私はDatamapperを使用して、基本的に1つのデータベース内の一連の生データをより正規化されたデータベースに同期しています。私はすでに2セットのモデルをセットアップしました。1つはデータベースごとに1つで、どちらもDMを拡張しています。私が直面している問題は、ギグに相当するデータを新しいデータベースにインポートする必要があることです。コントローラーで新しいDMオブジェクトを作成しているとき、作成しているメソッドを返しても解放されないようです。モデルは関係を自動ロードしません。
$clients = $this->client->get_iterated();
foreach($clients as $client) {
$this->addUser($client);
}
addUser()で、新しいUserオブジェクトを作成し、保存して戻ります。これのメモリ使用量を出力すると、すべてが使い果たされるまで増加します。最初は、PHPがaddUser()に渡される$ clientオブジェクトのコピーを作成していたためだと思いましたが、addUser()の最初の行に「return」を入れるだけではメモリの増加は見られません。新しいUserオブジェクトを作成して保存したときだけです。
メソッドが終了する前に$user->clear()を使用してみましたが、役に立ちませんでした。
アプリケーションが元々rawデータベースモデルで問題なく実行されていたことは注目に値します。新しいモデルが作成され、保存された後、解放されることはありません。これは文字通り数分で2ギガのメモリをかみ砕きます。