【问题标题】:Is there a way of keeping database data in PHP while server is running?有没有办法在服务器运行时将数据库数据保存在 PHP 中?
【发布时间】:2012-01-29 05:23:05
【问题描述】:

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

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

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

【问题讨论】:

标签: php html object tree


【解决方案1】:

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

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

【讨论】:

  • 谢谢。我查看了该库,似乎比我最初从头开始制作整个程序的想法要容易得多。
【解决方案2】:

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

然后您仍然可以使用 mysql 的搜索功能对快速“内存中”数据进行搜索。

【讨论】:

    【解决方案3】:

    对于大型内存结构,PHP 确实不是一门好语言。正如您所询问的那样,它的内存效率不是很高,并且存在持久性问题。通常使用 PHP,人们会将数据存储在一些针对快速检索而优化的外部持久数据存储中。

    通常人们使用两种方法:

    1) 尽可能针对标准查询在数据库中存储数据

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 2013-11-11
      • 2019-03-05
      • 1970-01-01
      相关资源
      最近更新 更多