Google App Engine を使用して Web アプリケーションを作成しています。アプリにはエンティティがあり、そのレコードはユーザーがアップロード機能を介して挿入されます。ユーザーは、最大 5K 行 (オブジェクト) のデータを選択できます。JDO 実装として DataNucleus プロジェクトを使用しています。これは、Data Store にデータを挿入するために取っているアプローチです。
- データは CSV から読み取られ、エンティティ オブジェクトに変換され、リストに格納されます。
- リストは、グループごとに約 300 のオブジェクトの小さなグループに分割されます。
- 各グループはシリアル化され、一意の ID をキーとして memcache を使用してキャッシュに保存されます。
- グループごとにタスクが作成され、キーとともにキューに挿入されます。各タスクは、このキーを入力パラメーターとして受け取るサーブレットを呼び出し、メモリからデータを読み取り、これをデータ ストアに挿入して、メモリからデータを削除します。
キューの最大レートは 2/min で、バケット サイズは 1 です。私が直面している問題は、タスクが 300 レコードすべてをデータ ストアに挿入できないことです。300 個のうち、挿入される最大値は約 50 個です。データが memcache から読み取られた後、データを検証し、保存されているすべてのデータをメモリから取得することができました。PersistenceManager の makepersistent メソッドを使用してデータを ds に保存しています。誰かが私に何が問題なのか教えてもらえますか?
また、レコードの一括挿入/更新を処理するより良い方法があるかどうかを知りたいです。BulkInsert ツールを使用しました。しかし、このような場合、それは要件を満たしていません。