2012-01-29 39 views
1

我正在制作一个网站(基本上)让用户提交一个单词,将它与MySQL数据库进行匹配,并返回找到的最接近的匹配。我目前的实现是,每当用户提交一个单词时,就会调用PHP脚本,它读取数据库信息,逐个扫描每个单词,直到找到匹配项并将其返回。服务器运行时,有没有一种方法可以在PHP中保存数据库数据?

我觉得这样效率很低。我即将制作一个程序,将单词列表存储在树状结构中以进行更有效的搜索。如果数据库中有成千上万个单词,我可以看到当前的实现速度有所下降。

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

+1

可能想看看http://memcached.org/ – cspray 2012-01-29 05:27:09

回答

4

我会研究在你的服务器上运行memcached的一个实例。 http://www.memcached.org

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

+0

谢谢。我看着图书馆,似乎比我从零开始编写整个程序的原始想法更容易得多。 – Sefu 2012-01-29 06:31:14

0

对于大型内存结构,PHP确实不是一种好语言。正如你所询问的那样,它不是非常有效的内存,并且存在持久性问题。通常在PHP中,人们会将数据存储在为快速检索而优化的外部永久性数据存储中。

通常人们使用两倍的办法:在数据库

1)存储数据,尽可能为标准查询

优化

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

如果你是处理很多无法被关系数据库索引的数据,那么您可能需要推出自己的守护进程(例如用C语言编写),以便在内存中保存持久的数据结构副本以便快速查询功能。

相关问题