【问题标题】:APC vs Custom Mmap extensionAPC 与自定义 Mmap 扩展
【发布时间】:2011-03-01 01:54:54
【问题描述】:

好的,所以我正在处理这个项目,该项目需要我在表上进行内存键值存储查找。我正在使用的业务规则还规定必须从每个单独节点上的内存中读取该表,并且该表需要在多个请求中保持不变。

所以显而易见的解决方案是使用 APC 和 apc_fetch();和 apc_store();

问题是该表将包含成千上万个键值对,大小为几兆字节(运行该表的机器是内存庞然大物)

因此,如果 APC 在加载时对用户缓存进行序列化,我会担心性能方面的问题。

如果不是,那么这应该不是什么大不了的事,然后它实际上将是更优化的解决方案。

但是,如果不是更好的选择,那就是用 C 编写一个自定义扩展,对持久保存到磁盘的结构的排序文件进行二进制搜索?

或者(希望)编写自定义扩展根本不值得。

胜利、失败、快速思考?

提前致谢

【问题讨论】:

  • 我不知道,但 APC 可能会在压力下驱逐缓存条目。这是您需要考虑的事情——尽管如果您对此感到满意,我会研究 memcached。

标签: php c


【解决方案1】:

虽然 APC 将在加载时进行序列化,但通过 apc_fetch() 进行的实际查找是通过哈希表完成的,并且不会出现您描述的瓶颈。由于您的机器是内存庞然大物,因此您应该考虑调整 APC 的表,使其足够大以将所有键/值对保存在内存中。这可以通过将 php.ini 中的 apc.user_entries_hint 设置为适合您的应用程序的值来完成。

【讨论】:

  • 获取不是我关心的瓶颈。序列化是我关心的瓶颈。几年前,我们以类似的负载关闭了雅虎商店。当然,这些机器是内存庞然大物,但是当您必须为每个请求序列化 100k 键值对数据时,内存只会让您到目前为止。这就是让我害怕的部分。
【解决方案2】:

试试看https://serverfault.com/questions/57915/ram-disk-and-physical-raid 基本上在 linux 上查看tmpfs 并将其用作具有您想要的任何规则的规则文件系统。它也很容易在应用程序之外进行调试和检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多