1. データ要件の作成
110万レベル数量
1.2 複数の dbf ファイルを書き込みます。各 dbf ファイルは 2 つの SQL ファイルに関連付けられます。関連付けられた列は 1.3 の累積列です。
1.3 dbf ファイルの 2 つの列はグローバルに一意かつ累積的であり、一部の列はランダムに生成されます。
1.4 SQL ファイルの 3 つの列はグローバルに一意かつ累積的であり、一部の列はランダムに生成されます。
考慮すべき事項: CPU、ネットワーク、ディスク IO の読み取りおよび書き込み速度
2. 実施計画
2.1 シリアル実行
100,000 行のデータ
dbf および関連する sql1、sql2 ファイルを作成します。3 分 21 秒 - CPU 占有率 12% (12% 勝利、Linux 環境は 100%)、約 (8 コア システム、単一 CPU が完全に占有)
2.2 マルチスレッド並列処理、スレッドロックはグローバル一意変数をロックします
100,000 行のデータ
2 つの dbf ファイルとそれに関連する sql1 および sql2 ファイルの作成には 7 分かかります 。2.1 によると、CPU 使用率は通常の時間です。
2.3 マルチプロセス並列処理、プロセスロックはグローバル固有変数をロックします
100,000 行のデータ
dbf ファイルと関連する sql1、sql2 ファイルを作成します。時間は 7 分と 05 分です。--プロセスロックの切り替えにかかる時間
4 つの dbf ファイル + 関連する sql1、sql2 ファイルを作成、時間は 12 分 06 秒、
データの各行にはロック要求が必要であるため、この状況はロックを使用してグローバルに一意な変数を割り当てるのには適していません。ロックの待機が CPU パフォーマンスの完全な使用に影響を与えるのを防ぐために、2.4 ソリューションが採用されています。
2.4 マルチプロセス並列処理。プロセスロックは使用されず、各プロセスが使用するグローバルに一意な変数範囲は、生成されるデータの量に応じて事前に割り当てられます。
100,000 行のデータ
dbf ファイルと関連する sql1、sql2 ファイルを作成します。時間は 3 分 39 です。
4 つの dbf ファイル + 関連する sql1、sql2 ファイルを作成、時間は 4 分 02 秒-- 4 つの Python プロセス、それぞれ約 12% を占有 (8 コア システム)
100万行のデータ
4 つの dbf ファイル + 関連する sql1、sql2 ファイルを作成、所要時間は 33 分 48 秒- 予想どおり
3. まとめ
3.1 ネットワークの最適化:
ツールで環境アカウント情報などを取得する場合は、ネットワーク経由でサーバーのデータベースに該当するデータを要求する必要があります。
最適化方法:最初の取得後にキャッシュし、その後データを作成するときに最初にキャッシュを検索します
3.2CPU 使用率の最適化:
マルチプロセスの利用
3.3 計画の概要:
2.4 が最適な解決策です。複数の dbf ファイルを同時に作成すると、各作成プロセスが対応するプロセスを開始し、動作中に各プロセスが CPU の約 12% を占有します (8 コア システムは完全に占有されます)。 、sql1、sql2 ファイルはシリアルに実行されます。
上記の実践はすべて 10w に基づいているため、数千万のデータを乗算するのに必要な時間は、倍数にすると約 35 ~ 40 分になります。
注: 作成されるファイルの数 (プロセス数) がシステム コアの数を超える場合、全体の時間は 1 つのファイルを作成する時間の倍数になります。
例:
8 コア システム - 10 行のデータ:
単一ファイル - 3 分、
1 ~ 8 個のファイルを同時に作成 ~= 3 分、
9 ~ 16 個のファイルを同時に作成 ~= 6 分
ツールの現在のデータ時間は上記の統計値であり、実行環境のCPU性能やディスク書き込み速度に影響されますので、より高性能なマシンに交換した場合はさらに短縮されます。