需要一些建议......
我已经看过很多关于执行AJAX实时搜索的不同方法的讨论,其中自动完成功能用于建议搜索术语。就像谷歌或YouTube上一样。
一些教程建议使用AJAX从XML文件中获取结果。有人建议直接查询数据库。关于采取哪种方法似乎存在很多相互矛盾的建议 - 但对每种方法的利弊没有明确的共识。
假设我有一张结构表:
ID TITLE AUTHOR LINK
我想要一个自动填充的搜索框,以提供有关标题的建议。该表很大 - 超过100000行。
最好的方法是什么:
直接在每次击键时查询数据库(可能设置一个函数来限制每位用户每秒的#服务器请求数。)
查询XML文件。这更有效吗?如果我直接查询数据库,是否会使服务器超载?
还有别的吗?
有人可以总结一下需要考虑的事项吗?如果您的网站上有AJAX实时搜索,您采取什么方法?
答案 0 :(得分:1)
首先,100,000多行是小型数据库。今天的计算机速度很快,它们有大量的RAM,它们有快速的总线。但是,即使不是所有这一切,正确的索引数据库将使用类似binary search tree或更高级的变体,以确保搜索在O(log N)时间内发生,或更快。对于100,000行数据库,这意味着在最多17次比较中将找到所需的元素。将此值高达10,000,000行只需要进行23次比较。因此,从这个意义上说,尺寸不是问题。
您打算如何阅读该XML文件?数据库是精心设计的软件,通常需要多年的测试,调试和优化。而且,如果您对数据库不满意,通常可以执行扩展或修改以提高数据库的效率。例如,Facebook每秒大约需要6000万次查询,而且它们是running on MySQL。
相比之下,您的XML文件在开头没有索引,因此每次读取时都需要线性搜索(在O(N)时间内)。文件I / O相对较慢,线性搜索速度很慢。
您的数据库也可以同时接受来自许多用户的点击而不会抱怨。您的操作系统可能会或可能不会被设计为处理许多用户同时访问同一文件。
如果您的数据库位于不同的服务器上并且存在显着的延迟时间,则XML选项可能更好的情况。在这种情况下,您可以考虑使用SQLite或尝试优化与数据库的连接。