私は現在、旅行業界に関連する一連のWebサービスを設計しています。このサービスの1つは、空港コードとロケールを入力として受け取り、ローカライズされた都市名を返す必要があります。
fn(cityCode) => localizedCityName
fn(airportCode) => cityCode, localizedCityName, localizedAirportName
私は現在、mongodbに、各都市、ローカライズされた情報、空港のリストなどを含む都市のコレクションを持っています。
{cityCode:'lon',
localized:{
'en':{name:'london'},
'fr':{name:'londres'}
},
airports:[{code:'GTW', name:'Gatwick'}]
}
以来、最高のパフォーマンスとスケーラブルなものは何だろうと思います:
私は考えていました:
MongoDBにデータを残すと必要に応じてクエリを実行し、インデックスを使用して最適化します。長所:データの整合性、クエリの一意のソース。短所:パフォーマンスが悪い
私のjsonを再配置して多くのファイルに保存する、再配置することにより、他のファイルにはcityCodeとAirportCodeを含むassoc json配列を持ち、airportCodeを持つことになります長所:Uber高速の短所:一貫性なし、スケーラブルではありませんか?
私のjsonを再配置してredisに保存 redisキャッシュプロにあることを除いて、以前と同じです:よりスケーラブルな多分短所を除いて以前と同じです:jsonを読み取って解析する必要があります(私は本当にできませんでした)他のものを見る)
今の質問:
最もパフォーマンスの高いソリューションは、インメモリです。その後、YMMVです。たとえば、ファイルからのデータの読み取りは、DBからの読み取りよりも遅くなる可能性があります。どちらが良いかは言いたくないので、テストする必要があります。
ただし、redisがファイルをキャッシュしている場合、これはより高速になるため(事実上、メモリ内にあります)、そのために使用しますが、自動化された整合性は価値があります。それで、DBに保持されているデータからファイルを生成します。起動時(またはアプリケーションのリロード)にこれを行う場合は、ファイルを完全に無視できます。DBでの更新とファイルへの書き込みの間の遅延(これは既知のリリース時間を予定していると想定しています)は別です。行ってよかった。もちろん、管理システムにメソッドを追加して、書き換えを強制することもできます。