As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center用于指导。
6年前关闭。
需要一些建议。。。。
我已经看到很多关于执行AJAX实时搜索的不同方法的讨论,其中使用自动完成功能来建议搜索词。比如在谷歌或YouTube上。
一些教程建议使用AJAX从XML文件中获取结果。有人建议直接查询数据库。对于采取哪种方法,似乎有很多相互矛盾的建议,但对于每种方法的利弊却没有明确的共识。
假设我有一个结构表:
ID   TITLE   AUTHOR   LINK

我想有一个搜索框,自动完成,以提供对标题的建议。这张桌子很大,有100000多行。
最好的方法是什么:
直接在每次击键时查询数据库(可能设置了一个函数来限制每用户每秒的服务器请求)。
查询XML文件。这样更有效率吗?如果我直接查询数据库,是否会导致服务器过载?
还有别的吗?
有人能总结一下需要考虑的事情吗?如果您的站点上有AJAX实时搜索,您采取什么方法?

最佳答案

首先,100000多行是一个小型数据库。今天的计算机速度很快,它们有大量的内存,它们有快速的总线。但是,即使不是所有这些,一个正确的索引数据库也将使用类似于binary search tree或更高级的变体,以确保搜索在O(log N)时间内或更快地进行。对于100000行数据库,这意味着所需的元素最多可以在17个比较中找到。将其提升到10000000行只需要23个比较。所以,从这个意义上说,大小几乎不是问题。
你打算如何读入那个XML文件?数据库是经过多年测试、调试和优化的精心设计的软件而且,如果您对数据库的出现不满意,通常情况下,您可以执行一些扩展或修改来提高数据库的效率。例如,Facebook每秒需要6000万次查询,而且它们running on MySQL
相比之下,XML文件在开始时没有索引,因此每次读取时都需要一个线性搜索(O(n))。文件I/O相对较慢,线性搜索较慢。
你的数据库也被设计成可以同时从许多用户那里获得点击而不发牢骚。您的操作系统可能设计为处理多个用户同时访问同一文件。
XML选项可能更好的一种情况是,如果您的数据库位于不同的服务器上,并且存在明显的延迟时间。在这种情况下,您可以考虑使用SQLite或尝试优化与数据库的连接。

07-27 22:13