【问题标题】:PHP shmop how to store an array in shared memoryPHP shmop如何将数组存储在共享内存中
【发布时间】:2012-10-02 03:18:20
【问题描述】:

我需要将一些 6-8GB 的​​静态数据作为 ARRAY OBJECT 存储到共享内存中。数据是从数据库中获取的。我想 fork() 并允许孩子根据索引访问和搜索数组中的元素。

就我而言,我只能使用 shmop() 存储“字符串”。但我想存储一个 PHP 识别为数组对象的数组。

有什么建议吗?

【问题讨论】:

    标签: php mysql shared-memory


    【解决方案1】:

    看来这可以通过 PHP 的SEM functions 来完成。

    它在内部序列化对象。鉴于数据量巨大,性能会随着数据的增加而大幅下降。并且 8GB(并且还在增加)对于 shmop 和 SEM 来说太大了,无法有效处理。

    我的替代方法是在需要时简单地查询数据库(同时为每个线程存储一个本地缓存版本),我认为这会更快(尤其是使用 SSD)。所以这些功能不是我要走的路。

    【讨论】:

      【解决方案2】:

      shmop 只能真正存储字符串。要存储数组,您需要在存储之前对其进行序列化,在使用之前对其进行反序列化。

      【讨论】:

        【解决方案3】:

        您始终可以序列化 ArrayObject 并使用 Memcached 将其存储在内存中。

        如果你想坚持使用 shmop:因为 shmop_write() 使用字符串来存储数据,你也需要使用 serialize() 方法。

        【讨论】:

          【解决方案4】:

          使用 PHP 的 serialize() 函数。

          http://php.net/manual/en/function.serialize.php

          我建议编写一个负责序列化/反序列化和写入/读取共享内存的类。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-08-25
            • 2020-12-23
            • 1970-01-01
            • 2020-11-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多