PHP/AJAx实时搜索的最佳方法- xml或MySQL


Best approach to PHP/AJAx Live Search - xml or MySQL?

需要一些建议....

我看过很多关于执行AJAX实时搜索的不同方法的讨论,其中使用自动完成功能来建议搜索词。比如在Google或者YouTube上。

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

假设我有一个结构表:

ID   TITLE   AUTHOR   LINK

我想有一个搜索框,自动完成提供对标题的建议。这个表很大——100000+行。

最好的方法是什么:

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

  2. 查询XML文件。这样更有效率吗?如果直接查询DB,是否会导致服务器过载?

  3. 别的吗?

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

首先,100,000+行是一个小的数据库。今天的计算机速度很快,它们有大量的内存,它们有快速的总线。但是,即使不是所有这些,一个合适的索引数据库也会使用像二叉搜索树这样的东西,或者更高级的变体,来确保搜索在O(log N)时间内完成,或者更快。对于100,000行数据库,这意味着最多只能在17次比较中找到所需的元素。将其增至10,000,000行只需要23次比较。因此,从这个意义上说,大小几乎不是问题。

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

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

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

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