数億件のレコードを保存

数億件のレコードを保存

私の会社は、約 2 億~ 3 億件のレコードからなるデータセットを取得する予定です。ソース マテリアルは csv で、圧縮されていない状態で約 150 GB あります。データの初期ロードを実行し、その後、毎日レコードの約 1% を更新する必要があります。各レコードの履歴も保存できればと考えています。

現在、私たちは MySQL を使用しており、この規模のデータベースに MySQL と PostgreSQL を使用している人もいるようですが、彼らの経験に関する確かな情報はあまり見当たりません。

データを正規化しなくても間違いなく問題は解決しますし、情報を多数のサーバーに分散させることも考えられます。MongoDB やその他の非伝統的なデータストアはどうでしょうか?

この種の取り組みの実現可能性について、何かご意見をお持ちの方はいらっしゃいますか? ご協力いただければ幸いです。

答え1

そのサイズのデータ​​セットに関する私の経験は MSSQL に限られていますが、そのサイズのデータ​​は間違いなく処理できます。

まず気になるのは、データのサイズです。150GB の 3 億件のレコードは、1 行あたり約 500KB で、これは大きな行です。非常に大きな行です。第 3 正規形に正規化できれば、これは劇的に役立ちます (正規化できるデータがあると仮定した場合)。正規化しない場合 (単一の巨大なテーブルのみの場合)、ISAM をサポートするエンジンは RDBMS よりも高速になるため、ISAM モードの MySQL は MSSQL よりも明らかに優れています (申し訳ありませんが、Postgre や Mongo の経験はありません)。

とはいえ、MSSQL はそのようなサイズのテーブルを問題なく処理できます。MSSQL はデータを分割して、異なる部分を異なるディスクに保存できるため、予算が問題であれば、更新されたデータの 1% を高速ディスクに保存し、残りを低速ディスクに保存することができます。選択した DBMS がこれをサポートしている場合は、これが賢明な方法かもしれません。

参考までに、私はかつて、1 つのテーブルに約 2 億行 (ただし、テーブルのサイズは 20 GB のみ) を持つデータベースを管理していましたが、スマートなインデックス作成により、クエリ時間は依然としてミリ秒単位で計測されていました。これは第 3 正規形に正規化されていたため、関連データを取得するための LOJ も多数ありました。

答え2

ほとんどのデータベースは、このような大量のデータの保存を簡単に管理できますが、実際に、ロードしたデータで何をしたいかによって異なります。トランザクション型なので、頻繁にクエリを実行して更新しますか? それとも、トランザクション システムから毎日新しい情報が入ってくるレポート用ですか?

関連情報