PHP/AJAx 实时搜索的最佳方法 - xml 还是 MySQL? [关闭]

Posted

技术标签:

【中文标题】PHP/AJAx 实时搜索的最佳方法 - xml 还是 MySQL? [关闭]【英文标题】:Best approach to PHP/AJAx Live Search - xml or MySQL? [closed] 【发布时间】:2012-12-20 06:47:24 【问题描述】:

需要一些建议....

我看到很多关于执行 AJAX 实时搜索的不同方法的讨论,其中自动完成功能用于建议搜索词。就像在 Google 或 YouTube 上一样。

一些教程建议使用 AJAX 从 XML 文件中获取结果。有人建议直接查询数据库。关于采取哪种方法似乎有很多相互矛盾的建议 - 但对于每种方法的优缺点没有明确的共识。

假设我有一个结构表:

ID   TITLE   AUTHOR   LINK

我想要一个自动完成的搜索框,以提供有关标题的建议。该表很大 - 100000+ 行。

什么是最好的方法:

    在每次击键时直接查询 DB(可能设置一个函数来限制每个用户每秒的 # 个服务器请求)。

    查询 XML 文件。这更有效吗?如果我直接查询数据库,是否会面临服务器过载的风险?

    还有别的吗?

有人能总结一下需要考虑的事情吗?如果您的网站上有 AJAX 实时搜索,您会采用什么方法?

【问题讨论】:

我可能会使用 Sphinx,因为它真的很快。 查询正确索引的数据库有多快?答:非常快。读取整个 XML 文件并手动搜索您要查找的内容有多快?每一次,一次又一次,阅读整个文件?答:不是很。 【参考方案1】:

首先,100,000+ 行是一个小型数据库。今天的计算机速度很快,它们有大量的 RAM,它们有快速的总线。但是,即使不是所有这些,正确的索引数据库也将使用 binary search tree 之类的东西或更高级的变体,以确保搜索在 O(log N) 时间内发生,或者更快。对于 100,000 行的数据库,这意味着所需的元素将在最多 17 次比较中找到。将其增加到 10,000,000 行只需要 23 次比较。所以,从这个意义上说,大小几乎不是问题。

您将如何读取该 XML 文件?数据库是精心设计的软件,通常经过多年的测试、调试和优化。而且,如果您对 DB 不满意,通常可以执行扩展或修改以提高 DB 的效率。例如,Facebook 每秒处理大约 6000 万次查询,它们是 running on mysql

相比之下,您的 XML 文件在开头没有索引,因此每次阅读时都需要进行线性搜索(在 O(N) 时间内)。文件 I/O 相对较慢,线性搜索也较慢。

您的数据库还被设计成可以同时接受许多用户的点击而不会抱怨。您的操作系统可能会或可能不会被设计为处理多个用户对同一文件的同时访问。

XML 选项可能更好的一种情况是,如果您的数据库位于不同的服务器上并且存在明显的延迟时间。在这种情况下,您可以考虑使用 SQLite 或尝试优化与数据库的连接。

【讨论】:

以上是关于PHP/AJAx 实时搜索的最佳方法 - xml 还是 MySQL? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

实时数据搜索问题,如何通知用户在搜索中更具体

大型数据库实时索引的最佳实时搜索平台?

使用 XML 进行实时搜索。错还是对?

PHP Ajax 跨域问题最佳解决方案

PHP Ajax 跨域问题最佳解决方案

PHP Ajax 跨域问题最佳解决方案