1

私は現在、ユーザー データの増分更新の戦略を開発しています。データベースには 100_000_000 レコードがあり、ワークフローごとに約 1_000_000 レコードが更新されると想定しています。

アイデアは、MapReduce ジョブでレコードを更新することです。現在のレコードにランダムにアクセスできるようにするために、インデックス付きストレージ (Cassandra など) を使用すると便利ですか? または、HDFS からデータを取得し、新しい情報を既存のレコードに結合することが望ましいですか。

レコードサイズはO(200バイト)です。ユーザー データは固定長ですが、拡張可能である必要があります。ログ イベントの構造は似ていますが、同じではありません。ユーザー レコードの数は増加する可能性があります。ほぼリアルタイムの更新が望ましいです。3 時間のタイム ギャップは許容できません。数分でも問題ありません。

これらの戦略とこのサイズのデータ​​のいずれかを使用した経験はありますか? 豚のJOINは十分に速いですか?すべてのレコードを読み取ることが常にボトルネックですか? Cassandra はこの量のデータを効率的に保持できますか? スケーラブルなソリューションはどれですか? システムの複雑さはどうですか?

4

1 に答える 1

1

最初に要件を定義する必要があります。レコード ボリュームは問題ではありませんが、レコード長は指定されていません。それらは固定長、固定フィールド番号ですか、時間の経過とともにフォーマットが変わる可能性がありますか? 100 バイトのレコードですか、それとも 100,000 バイトのレコードですか? map/reduce を使用してすべての作業を行う場合を除き、そのフィールド/列でクエリを実行する場合は、フィールド/列にインデックスが必要です。ユーザー レコードの数は 1 億にとどまりますか (おそらく 1 台のサーバーで十分でしょう)、それとも年に 100% 増加しますか (おそらく複数のサーバーが時間の経過とともに新しいレコードを追加します)。

更新のためにレコードにアクセスする方法は、レコードをリアルタイムで更新する必要があるかどうか、またはバッチ ジョブを実行できるかどうかによって異なります。更新は 1 分ごと、1 時間ごと、または 1 か月ごとですか?

いくつかの実験を行うことを強くお勧めします。すでにテストを行っていますか?これにより、質問のコンテキストが得られ、より客観的な質問と回答につながります。あなたの質問に基づいて解決策を「ホワイトボード」できる可能性は低いです。

于 2012-08-22T23:03:36.343 に答える