2016-04-09 12 views
1

免責事項 - この質問は仕事やアカデミー関連ではなく、大きなデータに関するアイデアやアプローチを理解することに過ぎません。ビッグデータ修正ステッカー

私は世界各地のフライトについての記録が10個のデータベースがあることを提案します。毎分10%〜20%が更新されています。更新は、出発/到着の変更、またはフライトのその他の関連パラメータのいずれかになります。

DBからのすべてのデータが別のマシンのキャッシュに更新されています(「キャッシュマシン」と呼ぶ)。

数千のクライアントがキャッシュマシンからデータを要求します。次のように

私の質問は以下のとおりです。デシベルは毎分更新されたデータを持っている場合

1.How私は、キャッシュマシンで古いデータを避けることができますか?

2.クライアントがキャッシュマシンを呼び出す最も効率的な方法は何ですか?キャッシュマシンが大量のデータを保持し、複数のクライアントがマシンの同時性にアクセスし、非同期のアプローチが必要になるという事実はありますか?

3. DB用にRDBMSを使用する必要がありますか?このようなDBにデータが保持されていると、異なるテーブルからのクエリに長時間かかる可能性があります。これらの質問を自分自身に答えるためにしようと

、私はそれを言うと思います:

1.

a.Iは、キャッシュマシンごとに1分をクリアして、DBからのすべてのデータを取得することができます。私のデータは新鮮ですが、そのようなクエリは非常に遅くなる可能性があります。

OR

B. 1は、しかし、それは私のDBをチョークができ、定期的にキャッシュにすべてのアイテムの状態を確認することができます。

2.クライアントが相互に干渉しないように、キューベース要求を持つことができます。

3.RDBMSはこの量のデータには適していません。この種のデータでは、キー/値のDBが機能する可能性があります。

私はこれらの質問にどのように回答すべきかはっきりしていませんし、そのようなシナリオをどう対処するかについての良い点や説明があれば分かります。

答えて

1

あなたの問題文は非常に短いです。

  1. キャッシュの更新:
    • は、あなたが維持する必要がないと仮定すると、私はいくつかの単純な仮定(間違っている場合は、私の仮定を修正し、私はそれに応じて答えを微調整することができますしてください)を明確化しようとしていますキャッシュ内のデータのコピーではなく、最新のアクセスデータセットのみを使用するため、繰り返しアクセスが高速になり(平均アクセスレイテンシが向上します)。クエリはまずキャッシュを検索し、見つからなければDBを検索します。
    • DBからのプッシュが必要であると仮定すると、データプッシュのタイムスタンプ付きバケットを持つことができます。検索クエリは、最新の時間バケットから検索を開始できます。見つからなければ、前のタイムバケットに移動します。ブルームフィルタを使用して、エントリがバケットに存在しないかどうかを確認します。
    • あなたは/コンパクトバケツ、インデックス、マルチタイムラインは
  2. キャッシュアクセスエントリの古いエントリ削除統合するためにバックグラウンドジョブを実行する必要があります
    • バッチ・モード:キューのために行くの。クエリをキューに入れ、クライアントが取得するために結果セットを別のキューに入れることもできます。
    • オンラインモード:読み取り専用アクセスを想定すると、分散キャッシュのためにmemcached/radisを使用することができます(キャッシュの目的は、低遅延クエリを有効にすることです)。あなたは、前にapp/webサーバーを接続することができます。
  3. DBの選択:あなたのキャッシュを想定し
    • は、クエリのアクセスポイントである、あなたは、高性能DBを必要としません。データは膨大なので、分散キャッシングが必要であると思います。 Postgres、Hive/HBase、MongoDBなどの分散型DBは良いでしょう。
    • データの種類とアクセス要件がわからないため、RDBMSが良好かどうかはまだわかりません。キー(多分コンポジットキー)を使用してキャッシュを介してアクセスすると仮定すると、キー値ベースのストレージ(HBaseなど)は良好です。

おそらくこれでは十分ではありませんが、あなたはより多くの詳細を追加した場合、私はそれに応じて変更することができます。