Strategia migliore per la memorizzazione dei dati statici: file json vs DB (mongo) vs redis [closed]

1

Attualmente sto progettando una serie di servizi web relativi al settore dei viaggi. è necessario che uno di questi servizi inserisca un codice aeroportuale e una locale e restituisca il nome della città localizzata.

fn(cityCode) => localizedCityName
fn(airportCode) => cityCode, localizedCityName, localizedAirportName

Al momento ho nel mongodb una raccolta di città che contiene, tra le altre cose, per ogni città, informazioni localizzate e lista degli aeroporti:

{cityCode:'lon',
  localized:{
            'en':{name:'london'},
            'fr':{name:'londres'}
            },
 airports:[{code:'GTW', name:'Gatwick'}]
  }

Mi chiedo quale sarebbe la migliore e più scalabile poiché:

  • Il formato pivotal è json (quindi spostare dati da una soluzione all'altra è facile)
  • Ci sono circa 200 città, ma ogni città può contenere una quantità significativa di dati non relativi al nostro uso)
  • I dati di cui abbiamo bisogno sono raramente o mai in cambiamento (l'aeroporto di Gatwick sarà sempre a Londra ...)
  • È necessario localizzare alcune città alla volta (da 20 a 100).
  • l'API è solo su un server (con redis installato) ma speriamo di ottenere un giorno al punto in cui sarebbe richiesto il clustering.

Stavo considerando:

  1. Lascia i dati in MongoDB, e interroga secondo necessità e utilizza l'indice per ottimizzare. Pro: coerenza dei dati, fonte unica per le query. Contro: non performante

  2. Riorganizza il mio json e lo memorizza su molti file , riorganizzando intendo avere un assoc json array con cityCode come chiave e airportCode per gli altri file pro: Uber più veloce contro: nessuna coerenza, non scalabile ??

  3. Riorganizza il mio json e memorizza in un redis come prima, eccetto che si trova su una cache redis pro: come prima, tranne forse più scalabile contro: bisogno di leggere e analizzare il json (non riuscivo a vedere altro)

NOw the questions:

  1. Hai altre strategie da consigliare?
  2. Quale dovrei scegliere e perché?
posta syroz 13.02.2015 - 12:58
fonte

1 risposta

0

La soluzione più performante è in-memory, dopodiché ... YMMV. Ad esempio, la lettura dei dati dal file può essere più lenta della lettura dal DB. Non vorrei dire quale sia il migliore, quindi dovrai testarlo.

Tuttavia, se redis sta memorizzando il file nella cache, allora questo sarà più veloce (efficacemente in-memory!), quindi mi piacerebbe farlo, ma la coerenza automatizzata è qualcosa che vale la pena avere. Quindi, vorrei generare i file dai dati contenuti nel DB. Se lo fai all'avvio (o ricarica l'applicazione), puoi ignorare il file completamente e, a parte un ritardo tra l'aggiornamento nel DB e la scrittura su file (che presumo avresti programmato per un tempo di rilascio noto). è bello andare Ovviamente potresti aggiungere un metodo al tuo sistema amministrativo per forzare una riscrittura che potrebbe essere ancora migliore.

    
risposta data 13.02.2015 - 14:36
fonte

Leggi altre domande sui tag