ログ データのチャンクを memcache に格納して、後でデータベースに投入しています。サーバーへのリクエストごとに、memcached::append() を使用してデータの配列を保存し、改行を使用してチャンクを区切ります。簡略化されたバージョンは次のようになります。
$myCache->append('log', serialize($myArray)."\n");
後でクエリを作成する必要がある場合は、データベースからすべての行を取り出し、それぞれの行をシリアル化解除します。
$dataToInsert = explode("\n", $myCache->get('log'));
$dataToInsert = array_map(function($row) {
return unserialize($row);
}, $dataToInsert);
これは組み込みの serialize() と unserialize() で問題なく動作しますが、サイズと速度という igbinary の明らかな強みを活用したいと思います。残念ながら、関数の igbinary バージョンを置き換えると、エラーが発生します。
igbinary でシリアル化されたデータには "\n" 文字が含まれている可能性があるため、隠しデータを展開すると、もちろん失敗する部分的な行が作成されます。
改行以外に igbinary データのブロックを区切るために使用できる区切り文字はありますか、それとも igbinary と append() は基本的に互換性がありませんか?