「さて、説明されている問題にどのように取り組みますか?」
単純なフラットファイルを使用します。
これが理由です
2.000.000エンティティがあります。エンティティ番号に基づくパーティション:
level1= entity/10000
level2= (entity/100)%100
level3= entity%100
データの各ファイルはlevel1/level2/level3/batch_of_data
です。
次に、ディレクトリの特定の部分にあるすべてのファイルを読み取って、処理用のサンプルを返すことができます。
リレーショナルデータベースが必要な場合は、特定のentity_idのファイルをデータベースにロードして使用します。
編集 日数。
-
date_id
/entity_id
一意性ルールはではありません 処理しなければならない何か。これは、(a)ファイル名に簡単に課せられ、(b)クエリには関係ありません。 -
date_id
「ロールオーバー」は何も意味しません。クエリがないため、名前を変更する必要はありません。date_id
エポックの日付から無制限に成長する必要があります。古いデータを削除する場合は、古いファイルを削除してください。
date_id
に依存するクエリはないため 、それで何もする必要はありません。重要なすべてのファイル名にすることができます。
date_id
を含めるには 結果セットで、ファイルの各行にある他の4つの属性を使用してファイルに書き込みます。
編集 開閉時
書き込むには、ファイルを開いたままにしておく必要があります。定期的にフラッシュ(または閉じる/再開)を実行して、実際にディスクに移動することを確認します。
ライターのアーキテクチャには2つの選択肢があります。
-
さまざまなソースからのデータを統合する単一の「ライター」プロセスがあります。これは、クエリが比較的頻繁に行われる場合に役立ちます。書き込み時にデータをマージするための料金を支払います。
-
複数のファイルを同時に開いて書き込みます。クエリを実行するときは、これらのファイルを1つの結果にマージします。これは、クエリが比較的まれである場合に役立ちます。クエリ時にデータをマージするための料金を支払います。