我正在创建一个网站(基本上)让用户提交一个单词,将其与MySQL数据库匹配,并返回找到的最接近的匹配项。我当前的实现是,每当用户提交一个单词时,都会调用PHP脚本,它会读取数据库信息,逐个扫描每个单词,直到找到匹配项,然后返回它。
我觉得这样效率很低。我即将制作一个程序,将单词列表存储在树形结构中,以便进行更有效的搜索。如果数据库中有数万个单词,我可以看到当前的实现速度相当慢。
我的问题是:不是必须编写另一个单独的程序,而是使用PHP只与每个查询连接,我可以用PHP只将整个数据树保存在内存中吗?这样,任何会话,任何查询都只是从内存中读取而不是重新读取数据库并反复重建树。
答案 0 :(得分:4)
我会考虑在你的服务器上运行memcached的实例。 http://www.memcached.org。
您应该能够将已编译的数据树存储在内存中并检索它以便在PHP中使用。但是,您必须将其加载到PHP中以执行搜索,并为数据库更改时更新memcached中的树构建方法(假设单词列表可以更新,因为没有充分的理由将其存储在数据库中,否则)。
答案 1 :(得分:0)
我建议在mysql中查看内存表类型:http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
然后,您仍然可以在快速“内存”数据中使用mysql的搜索功能。
答案 2 :(得分:0)
PHP对于大型内存结构来说确实不是一个好的语言。它只是内存效率不高而且存在持久性问题,正如您所询问的那样。通常使用PHP,人们会将数据存储在一些经过优化以便快速检索的外部持久数据存储中。
通常人们使用双重方法:
1)将数据存储在数据库中,尽可能优化标准查询
2)在memcached中缓存昂贵查询的结果
如果您正在处理大量无法通过关系数据库轻松编制索引的数据,那么您可能需要使用自己的守护程序(例如,用C编写)来保存内存中数据结构的持久副本用于快速查询功能。