有没有一种方法可以在服务器运行时将数据库数据保存在PHP中


Is there a way of keeping database data in PHP while server is running?

我正在创建一个网站,它(本质上)允许用户提交一个单词,将其与MySQL数据库进行匹配,并返回最接近的匹配结果。我目前的实现是,每当用户提交一个单词时,就会调用PHP脚本,它读取数据库信息,逐个扫描每个单词,直到找到匹配的单词,然后返回

我觉得这是非常低效的。我即将制作一个程序,将单词列表存储在树结构中,以便进行更有效的搜索。如果数据库中有数以万计的单词,我可以看到当前的实现速度慢了很多。

我的问题是:不必编写另一个单独的程序,并使用PHP在每个查询中连接到它,我可以只使用PHP在内存中保存整个数据树吗?这样,任何会话、任何查询都将只从内存中读取,而不是反复读取数据库和重建树。

我会考虑在服务器上运行memcached的实例。http://www.memcached.org.

您应该能够将编译后的数据树存储在内存中,并检索它以在PHP中使用。不过,您必须将其加载到PHP中才能执行搜索,还必须设计一种方法,以便在数据库更改时更新memcached中的树(假设单词列表可以更新,因为没有充分的理由将其存储在数据库中)。

我可以建议查看mysql中的内存表类型吗:http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

然后,您仍然可以在快速的"内存中"数据上使用mysql的搜索功能。

PHP对于大型内存结构来说确实不是一种好语言。正如您所问的,它只是内存效率不高,而且存在持久性问题。通常使用PHP时,人们会将数据存储在一些经过优化的外部持久数据存储中,以便快速检索。

通常人们使用两种方法:

1) 将数据存储在数据库中,尽可能优化标准查询

2) 在memcached 中缓存昂贵查询的结果

如果您正在处理大量关系数据库无法轻松索引的数据,那么您可能需要滚动自己的守护进程(例如,用C编写),该守护进程将数据结构的持久副本保存在内存中,以实现快速查询功能。