web-dev-qa-db-ja.com

+-70 000レコードをCSVからdrupal

約のCSVファイルがあります。 Drupal 7.にインポートする70.000レコード。これが完了すると、クライアントは、更新された行をDrupalに同期する必要がある毎日のベースで新しいCSVファイルを提供します。

Feeds および Migrate モジュールを使用してインポートを記述しましたが、どちらの場合も、70.000行をインポートするのは永遠に時間がかかります。 Drupal 7でより速くデータをインポートする他の解決策はありますか?

5
Jenzzz

レコードのupdate機能が必要な場合、Diffをスキャンして変更を見つける方法がわかりません。これには時間がかかります。

Migrateを使用して、単純なCSVファイルとテーブルをアップロードしました。 Migrate 2.6 Hash()関数を見て、ソースデータからの更新のみを実行するために、データの変更を追跡しましたか? http://www.acquia.com/blog/migrate-26-framework-changes

Migrate 2.6では、MigrateSourceに 'track_changes'オプションが導入されました。ソースコンストラクターのオプション配列で 'track_changes' => 1を渡すと、MigrateはprepareRow()が呼び出された後にソースデータをハッシュし、最初のインポート時にマップテーブルにハッシュを保存します。後続のインポートでは、受信したソースデータを再度ハッシュし、保存したハッシュと比較します。ハッシュが一致しない場合、オブジェクトは再インポートされ、新しいハッシュが保存されます。それ以外の場合はスキップされます。もちろん、これはハイウォーターマークよりも遅い方法ですが、変更されたレコードを取得する必要があり、ソースデータに適切なハイウォーターマークフィールドがない場合は、この方法が適しています。

CSVファイルをMySQLテーブルにインポートして、そこからMigrateまたはDrushスクリプトを使用してデータをインポートできない理由はありますか?テーブルに入ると、データ/テーブルを簡単に分割して、挿入を同時に実行してスピードアップできます。

[〜#〜]編集[〜#〜]

EDUでキャンパスデータの10万件のレコードの.NET Webサービスにアクセスしました。データを線形に解析すると、XMLファイルの上から下まで1時間程度かかることがわかりました。各部門に同時に個別にリクエストし(1つの大きなxmlファイルではなく、一度に最大60のXMLファイルを取得)、最大8スレッドまで並列処理します( ltimate Cron を介して)同じプロセス約5分かかります。

ある時点で、データの線形処理は単に失敗し、他の手段を見つける必要があります。

1
tenken

Drupalを直接バイパスし、ファイルをデータベースに直接同期することができます。これにより、最高のパフォーマンスが得られます。これを行う1つの方法を示します http://www.tech- recipes.com/rx/2345/import_csv_file_directly_into_mysql/

0
LeeHunter