所以我构建了一个相当大的数据结构,不能轻易地转换为关系数据库格式。使用这种数据结构,我所做的请求非常快,但加载到内存大约需要4-5秒。我想要的是将它加载到内存中一次,然后让它坐在那里,并能够快速回答各个请求,这当然不是我正常编写的php脚本的正常流程。在php中有什么好办法吗? (再也没有使用数据库,它必须使用这种专门的预先计算结构,这需要很长时间才能加载到内存中。)
编辑:This tutorial提供了我想要的东西,但它非常复杂,我希望有人会有更优雅的解决方案。正如他在教程中所说,整个问题是自然php是无状态的。
答案 0 :(得分:1)
您绝对必须执行链接教程建议的内容。
请求之间没有PHP状态持续存在。这是设计的。
因此,您需要某种单独的长期运行流程,因此需要某种IPC方法,否则您需要一个更好的数据结构,您可以逐个加载。
如果您真的无法将其放入关系数据库(例如sqlite
- 它不必是一个流程数据库),请使用其他类型的数据库进行探索,例如作为file-based key-value store
。
请注意,使用任何语言编写的任何长时间运行的进程都比使用您的数据结构更快,更容易或更好地处理真正的数据库 极不可能或者其他!将您的数据结构放入数据库!它是您可能的最轻松之路。
您可以做的另一件事就是尽快加载数据结构。您可以将其序列化为文件,然后反序列化该文件;如果这还不够快,你可以尝试igbinary,这是一个比标准快得多的php序列化器。