代码之家  ›  专栏  ›  技术社区  ›  canni

存储大型PHP数组、普通PHP或gzip序列化数据?

  •  0
  • canni  · 技术社区  · 14 年前

    我有一个静态的大数组,它代表树结构,大约有100k个节点,这个数组只是值锁定的只读引用。

    现在,这两种方法中的哪一种会表现得更好?

    或者将数组转换为SQLite或类似的东西,但存储必须能够快速锁定长的“ID路径”,即1->5556->123->45->455->节点名称(实际上PHP表做得很好)

    服务器上的内存限制不是问题

    3 回复  |  直到 14 年前
        1
  •  1
  •   Evert    14 年前

    无论如何,您需要将数组转换成一个PHP值,这样gzip就不存在了。

    因此,如果您要决定是使用sqlite之类的工具将它保存在磁盘上,还是让php每次都加载它(最好启用APC),那么真正的问题是内存还是CPU对您来说更重要。如果你还不知道,你可能正遭受着过早优化的痛苦。

    当它 与你相关的是减少内存或cpu,(或io)答案会更明显,所以确保你可以轻松地重构。

    如果你想预测什么对你更好,做一个基准测试。

    更新 我刚看到记忆显然不重要。转到PHP数组并包含该文件。容易的。但请记住,如果总数据大小为10MB,则每个apache进程的数据大小将为10MB。在100个apache进程中,这已经是1GB了。

        2
  •  1
  •   Michael    13 年前

    考虑到每个请求都要加载整个文件,这些加载时间实际上看起来相当不错。gzip可能会有所帮助(通过减少从磁盘读取的数据量)

    如果你能找到一种方法,找到你真正想要的数据,然后直接加载它,而不是加载整个文件,这样会大大加快速度。

        3
  •  0
  •   canni    14 年前

    我的基准说明了一切:

    纯PHP文件大小:~5 MB

    Pure PHP file import: avg load time: ~210 ms
    Pure PHP file import with APC: avg: ~60-80 ms
    Unserialize(gzuncompress(file_get_contents()) : almost const, every request: ~ 40 ms