php持久服务?

php持久服务?,php,web-services,data-structures,persistence,Php,Web Services,Data Structures,Persistence,可能重复: 因此,我构建了一个相当大的数据结构,它不能很容易地转换为关系数据库格式。使用这种数据结构,我发出的请求非常快,但加载到内存大约需要4-5秒。我想要的是将它加载到内存中一次,然后让它坐在那里,并能够快速响应单个请求,这当然不是我正常编写的php脚本的正常流程。在php中有什么好方法可以做到这一点吗?(同样,不使用数据库,它必须使用这种专门的预计算结构,这需要很长时间才能加载到内存中。) 编辑:有点像我想要的,但它相当复杂,我希望有人能有一个更优雅的解决方案。正如他在本教程中所说,整个

可能重复:

因此,我构建了一个相当大的数据结构,它不能很容易地转换为关系数据库格式。使用这种数据结构,我发出的请求非常快,但加载到内存大约需要4-5秒。我想要的是将它加载到内存中一次,然后让它坐在那里,并能够快速响应单个请求,这当然不是我正常编写的php脚本的正常流程。在php中有什么好方法可以做到这一点吗?(同样,不使用数据库,它必须使用这种专门的预计算结构,这需要很长时间才能加载到内存中。)

编辑:有点像我想要的,但它相当复杂,我希望有人能有一个更优雅的解决方案。正如他在本教程中所说,整个问题在于php自然是无状态的。

您绝对必须按照链接教程的建议来做

请求之间没有持久的PHP状态。这是故意的

因此,您将需要某种独立的长时间运行的流程,以及某种IPC方法,或者您需要一种更好的数据结构,可以逐段加载

如果您真的无法将其放入关系数据库中(例如,它不必是流程数据库),请尝试使用其他类型的数据库,例如

请注意,您用任何语言编写的任何长时间运行的流程都不太可能比将您的数据结构转换为真正的数据库(关系数据库或其他数据库)更快、更容易或更好!将您的数据结构放入数据库!这是你可能的道路中最简单的一条


您可以做的另一件事就是尽可能快地加载数据结构。您可以将其序列化为文件,然后反序列化该文件;如果速度不够快,您可以尝试,这比标准php序列化程序快得多。

用php创建一个Web服务器(已经存在),在服务器启动时加载结构,然后回答请求。数据已经可用。很抱歉,我不熟悉PHP的这方面。。。用PHP创建Web服务器是什么意思?现在的设置是用户进入一个页面,apache运行该页面的php脚本…@hackartist this。。。它位于端口80(或您设置的任何端口),而不是apache。因此,您可以在PHP中获取请求并对其进行处理。我看到的一个问题是PHP没有线程。。。因此,对于并发性,它必须自己分叉(这很好,只要您知道自己在做什么……),将数据存储在APC()中怎么样?那么你基本上只是在内存中工作。谢谢你关于APC的提示。。这看起来很有希望实现我想要的。谢谢你的建议,如果找不到其他解决方案,我会尝试重构我的数据结构。我的数据结构是一个大的(特定于问题的)索引,有点像后缀树,将它放在内存中比尝试在数据库中跟踪路径要快得多,即使我可以在关系模型中为它找到一个好的表示形式。然而,我越想它,我真的不需要服务,只需要数据结构就可以持久化。如果数据结构已经可以在内存中快速访问,我仍然可以让php请求模型完成它的工作。你不明白——没有办法将该数据结构持久地放入php进程空间!每次请求后都会清除进程空间。您需要一些序列化步骤,可以是IPC,也可以是内存映射文件,或者是数据库,等等。您不能将整个内容加载到本机PHP对象中,而只是将其永久保留。顺便说一句,APC是一个很好的建议,但您仍然需要。实际上,您正在使用APC作为内存中的数据库。好吧,这很公平。谢谢你帮我理解这一点。