web-dev-qa-db-ja.com

静的データを保存するための最良の戦略:jsonファイルvs DB(mongo)vs redis

私は現在、旅行業界に関連する一連の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'}]
  }

以来、最高のパフォーマンスとスケーラブルなものは何だろうと思います:

  • 重要なフォーマットはjsonです(ソリューションから別のソリューションへのデータの移動は簡単です)
  • 約200の都市がありますが、各都市には、私たちの使用に関連しない大量のデータが含まれている可能性があります)
  • 私たちが必要とするデータはめったにまたはまったく変化しません(ガトウィック空港は常にロンドンにあります...)
  • 一度にいくつかの都市をローカライズする必要があります(20〜100)。
  • aPIは1台のサーバー(redisがインストールされている)にのみ存在しますが、クラスタリングが必要になるポイントまで1日を取りたいと考えています。

私は考えていました:

  1. MongoDBにデータを残すと必要に応じてクエリを実行し、インデックスを使用して最適化します。長所:データの整合性、クエリの一意のソース。短所:パフォーマンスが悪い

  2. 私のjsonを再配置して多くのファイルに保存する、再配置することにより、他のファイルにはcityCodeとAirportCodeを含むassoc json配列を持ち、airportCodeを持つことになります長所:Uber高速の短所:一貫性なし、スケーラブルではありませんか?

  3. 私のjsonを再配置してredisに保存 redisキャッシュプロにあることを除いて、以前と同じです:よりスケーラブルな多分短所を除いて以前と同じです:jsonを読み取って解析する必要があります(私は本当にできませんでした)他のものを見る)

今の質問:

  1. 他に推奨する戦略はありますか?
  2. 私はどちらに行くべきですか?なぜですか?
4
syroz

最もパフォーマンスの高いソリューションは、インメモリです。その後、YMMVです。たとえば、ファイルからのデータの読み取りは、DBからの読み取りよりも遅くなる可能性があります。どちらが良いかは言いたくないので、テストする必要があります。

ただし、redisがファイルをキャッシュしている場合、これはより高速になるため(事実上、メモリ内にあります)、そのために使用しますが、自動化された整合性は価値があります。それで、DBに保持されているデータからファイルを生成します。起動時(またはアプリケーションのリロード)にこれを行う場合は、ファイルを完全に無視できます。DBでの更新とファイルへの書き込みの間の遅延(これは既知のリリース時間を予定していると想定しています)は別です。行ってよかった。もちろん、管理システムにメソッドを追加して、書き換えを強制することもできます。

1
gbjbaanb