0

Google App Engine を使用して Web アプリケーションを作成しています。アプリにはエンティティがあり、そのレコードはユーザーがアップロード機能を介して挿入されます。ユーザーは、最大 5K 行 (オブジェクト) のデータを選択できます。JDO 実装として DataNucleus プロジェクトを使用しています。これは、Data Store にデータを挿入するために取っているアプローチです。

  1. データは CSV から読み取られ、エンティティ オブジェクトに変換され、リストに格納されます。
  2. リストは、グループごとに約 300 のオブジェクトの小さなグループに分割されます。
  3. 各グループはシリアル化され、一意の ID をキーとして memcache を使用してキャッシュに保存されます。
  4. グループごとにタスクが作成され、キーとともにキューに挿入されます。各タスクは、このキーを入力パラメーターとして受け取るサーブレットを呼び出し、メモリからデータを読み取り、これをデータ ストアに挿入して、メモリからデータを削除します。

キューの最大レートは 2/min で、バケット サイズは 1 です。私が直面している問題は、タスクが 300 レコードすべてをデータ ストアに挿入できないことです。300 個のうち、挿入される最大値は約 50 個です。データが memcache から読み取られた後、データを検証し、保存されているすべてのデータをメモリから取得することができました。PersistenceManager の makepersistent メソッドを使用してデータを ds に保存しています。誰かが私に何が問題なのか教えてもらえますか?

また、レコードの一括挿入/更新を処理するより良い方法があるかどうかを知りたいです。BulkInsert ツールを使用しました。しかし、このような場合、それは要件を満たしていません。

4

1 に答える 1

1

これはApp Engine mapreduceの完璧なユースケースです。Mapreduce は、blob からテキスト行を入力として読み取ることができ、入力を分割してタスクキューで実行します。

バルクローダーが「要件を満たさない」と言うときは、満たしていない要件を教えていただければ助かりますが、この場合、問題は管理者以外のユーザーがデータをアップロードします。

于 2010-11-02T10:43:53.210 に答える