sql >> データベース >  >> RDS >> Mysql

7.300.000.000行を効率的に保存する

    「さて、説明されている問題にどのように取り組みますか?」

    単純なフラットファイルを使用します。

    これが理由です

    2.000.000エンティティがあります。エンティティ番号に基づくパーティション:

    level1= entity/10000
    level2= (entity/100)%100
    level3= entity%100
    

    データの各ファイルはlevel1/level2/level3/batch_of_dataです。

    次に、ディレクトリの特定の部分にあるすべてのファイルを読み取って、処理用のサンプルを返すことができます。

    リレーショナルデータベースが必要な場合は、特定のentity_idのファイルをデータベースにロードして使用します。

    編集 日数。

    1. date_id / entity_id 一意性ルールはではありません 処理しなければならない何か。これは、(a)ファイル名に簡単に課せられ、(b)クエリには関係ありません。

    2. date_id 「ロールオーバー」は何も意味しません。クエリがないため、名前を変更する必要はありません。 date_id エポックの日付から無制限に成長する必要があります。古いデータを削除する場合は、古いファイルを削除してください。

    date_idに依存するクエリはないため 、それで何もする必要はありません。重要なすべてのファイル名にすることができます。

    date_idを含めるには 結果セットで、ファイルの各行にある他の4つの属性を使用してファイルに書き込みます。

    編集 開閉時

    書き込むには、ファイルを開いたままにしておく必要があります。定期的にフラッシュ(または閉じる/再開)を実行して、実際にディスクに移動することを確認します。

    ライターのアーキテクチャには2つの選択肢があります。

    1. さまざまなソースからのデータを統合する単一の「ライター」プロセスがあります。これは、クエリが比較的頻繁に行われる場合に役立ちます。書き込み時にデータをマージするための料金を支払います。

    2. 複数のファイルを同時に開いて書き込みます。クエリを実行するときは、これらのファイルを1つの結果にマージします。これは、クエリが比較的まれである場合に役立ちます。クエリ時にデータをマージするための料金を支払います。



    1. 特定のデータが複数のテーブル(すべて同じ列を持つ)に存在するかどうかを確認するにはどうすればよいですか?

    2. 予約されたSQLキーワードで名前が付けられたテーブル列を処理する方法は?

    3. 未定義の関数oci_connect()の呼び出し

    4. MariaDB – MySQL –使用可能でサポートされているすべてのエンジンを表示するためのエンジンの表示