Appleのプッシュ通知サービス用のデバイスを説明する約30万行を含むテーブルがあります。私はDoctrine2をORMとして使用しています。
デバイスの挿入は問題ありませんが、デバイスの取得はまったく別の話です。単純なMySQLSELECT
を使用すると、WiFiが主なボトルネックである数秒でそれらを取得できます。ただし、Doctrineを介してそれらをフェッチしようとすると、最大1ギガバイトのPHPを許可しても、メモリが不足します。ドキュメントに従って、Doctrineエンティティのゲッターとセッターおよび保護されたプロパティを作成しました。
何が間違っているのかわかりません。これは問題ありません:
$devices = mysql_query("SELECT * FROM `Devices` WHERE `deviceProperty`='someValue'");
$message = new Message();
while($device = mysql_fetch_array($devices))
{
$message->addRecipient($device['pushToken']);
}
ただし、これは最初の行のメモリが不足します(次の行のブレークポイントに到達することはありません)。
$devices = self::$entityManager->getRepository('Device')->findBy(array("deviceProperty" => "someValue"));
$message = new Message();
foreach($devices as $device)
{
$message->addRecipient($device->getPushToken);
}