1

需要一些建议......

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

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

假设我有一个结构表:

ID   TITLE   AUTHOR   LINK

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

什么是最好的方法:

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

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

  3. 还有什么?

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

4

1 回答 1

1

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

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

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

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

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

于 2013-01-06T10:35:02.533 回答