クライアントのPOSシステムでは、定期的に新しい販売データを1つの集中データベースに送信し、そのデータを1つの大きなデータベースに保存してレポートを作成しています。
クライアントPOSはPHPPOSをベースにしており、私は標準的なXML-RPCライブラリを使用して売上データをサービスに送信するモジュールを実装しました。サーバーシステムはCodeIgniterをベースに構築されており、ウェブサービスコンポーネントにXML-RPCおよびXML-RPCSライブラリを使用しています。大量の売上データ(salesテーブルから50行程度、sales_itemsから売上内の各アイテムに関連する個別の行)を送信すると、次のようなエラーが発生します。
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)
128Mはphp.ini
のデフォルト値ですが、これは壊すには膨大な数だと思われます。実際、この値を1024Mにしてみたこともありますが、エラーが出るまでの時間が長くなるだけでした。
対策としては、サーバー側の処理をすべて無効にしたり、入力に関係なく定型文を返すように細工したりしています。しかし、問題は実際にデータを送信するところにあると思います。PHPのスクリプト最大実行時間を無効にしてみてもエラーになります。