6 ~ 8 GB の静的データを ARRAY OBJECT として共有メモリに格納する必要があります。データベースからデータが取得されます。fork() して、子供がインデックスに基づいて配列内の要素にアクセスして検索できるようにしたい。
私に関する限り、shmop() を使用して「文字列」のみを格納できます。しかし、PHP が配列オブジェクトとして認識する配列を格納したいと考えています。
助言がありますか?
6 ~ 8 GB の静的データを ARRAY OBJECT として共有メモリに格納する必要があります。データベースからデータが取得されます。fork() して、子供がインデックスに基づいて配列内の要素にアクセスして検索できるようにしたい。
私に関する限り、shmop() を使用して「文字列」のみを格納できます。しかし、PHP が配列オブジェクトとして認識する配列を格納したいと考えています。
助言がありますか?
これは、PHP のSEM 関数によって実現できるようです。
オブジェクトを内部的にシリアライズします。膨大な量のデータを考えると、データが増えるとパフォーマンスが大幅に低下します。そして、8GB (および上昇中) は、shmop と SEM が効率的に処理するには多すぎます。
私の代替手段は、必要に応じて単純にデータベースにクエリを実行することです (スレッドごとにローカルにキャッシュされたバージョンを保存しながら)。したがって、これらの機能は私が行くべき道ではありません。
shmop は実際には文字列しか格納できません。配列を保存するには、保存する前にシリアル化し、使用する前にシリアル化を解除する必要があります。
常にシリアル化し、ArrayObject
Memcached を使用してメモリに格納できます。
shmop: に固執したい場合は、文字列を使用してデータを保存するため、そこでもメソッドshmop_write()
を使用する必要があります。serialize()
PHPのserialize()
関数を使用します。
http://php.net/manual/en/function.serialize.php
シリアル化/逆シリアル化と共有メモリへの書き込み/読み取りを処理するクラスを作成することをお勧めします。