web-dev-qa-db-ja.com

1つのサーバー(MySQL)に3〜4時間以内に50 GB(約3億件以上のレコード)を超えるサイズのデータ​​ベースがインポートされることを期待することは現実的ですか?

Text/csvファイルに数億行が含まれています(ゲノムデータベース)。各レコードの長さは255文字未満です...)。

理想的には、検索可能にしたいので、今のところ最善の策はそれらを吐き出し(cygwinから少し助けて!)、テキストファイルとして500 mbずつ1つずつメモ帳++から読み取ることです(そうです... )-したがって、これは非常に不便で穴居人のようなアプローチです。

MySQLを使用したいのですが、必要に応じてAmazonインスタンスに最大500ドルの予算があります。32GB RAMでいくつかのXeon GoldとAmazonの200 GBのハードディスクで実行できますか?それぞれが同時挿入/読み込みを行う最大10個のインスタンスを使用しても問題ありません。

私は誰かがssdと32GB RAMを使用してローカルサーバーで 'load data infile'を使用して300,000行/秒を達成したことを読み取りました-それを50,000行/秒にさえし、通常の時間にphpmyadminでそれを照会できる場合-私幸せになるでしょう。ありがとう!

2
kevinjordan

私は誰かがssdと32GB RAMを備えたローカルサーバーで 'load data infile'を使用して300,000行/秒を達成したことを読みました

それは私のブログ投稿から取られたように聞こえます(または少なくともそれらは私の数と仕様でした): https://jynus.com/dbahire/testing-the-fastest-way-to-import-a-table- into-mysql-and-some-interesting-5-7-performance-results / および https://jynus.com/dbahire/testing-again-load-data-on-mysql-5- 6-5-7-8-0-non-ga-and-mariadb-10-0-10-1-and-10-2-non-ga /

ご覧のとおり、私の経験は実際のテストに基づいています。上記のようなラボテストだけでなく、データベースのバックアップ(およびリカバリ)が正しく生成されるように準備するのに役立ち、また、論理的ダンプとスナップショットの両方を毎日処理して、確実かつ迅速に実行できるため、これらを実行します。 MariaDBデータベースに格納するペタバイトのデータの半分: https://www.slideshare.net/jynus/backing-up-wikipedia-databases

32 GBのメモリサーバー上の50 GBのデータベースは非常に寛大な比率であり、データの60%がバッファプールに収まる可能性があります。その場合、VM、OS、およびmysqlの構成をセットアップする限り(バイナリログの無効化、バッファープールとトランザクションログファイルの増加、インポート中の整合性パラメーターの緩和など)、スループットを大幅に最適化できます。また、元のフォーマットを簡単にロードできるように最適化して、フォーマットやその他の変更の解析や変換、および可能であれば複数のスレッドでの並列処理など、CPUサイクルを無駄にしないようにします。

例として、私のプロダクションには、数十億行の1〜2 TBのデータベースがあり、多くのインデックスを含む512 GBのメモリマシンで6〜12時間で論理的に回復できます。

上記の適切な状況下では、ほとんどメモリ内のデータベースを使用して、50 GBのデータベースをリモートで並列に約30分でロードできます。ストレージが遅い場合は1時間未満。テストは専用のリソースを想定しているので注意してください。 CPU、メモリ、またはIOの制限によりボトルネックが発生し、ロード時間が長くなる可能性があります。

2
jynus