大数据库表和繁忙站点上的ajax自动完成查询的有效方法

Posted

技术标签:

【中文标题】大数据库表和繁忙站点上的ajax自动完成查询的有效方法【英文标题】:Effcient method for ajax autocomplete query on big db table and busy site 【发布时间】:2011-05-02 17:16:12 【问题描述】:

我们都熟悉 SO 上的自动完成标记设置。

我想知道在这种情况下查询标签表最有效的方法是什么。

有许多用户使用自动完成功能标记离开的繁忙网站需要大量查询。假设任何时候有 100 个用户平均输入 10 个字符来查找/创建他们的标签。这似乎是对单个表的大量查询,而这只是繁忙站点的一个方面。

那么,这只是确保您在发出请求之前在客户端有合理的延迟,还是对数据表进行智能索引,还是定期将数据卸载到更高效的服务器端查找存储?

如果有任何提示,我将不胜感激。

使用mysqlphp

【问题讨论】:

不确定这是否是重复的,但我认为这对 SO 来说是一个很好的问题;与许多新程序员相关的一个。 【参考方案1】:

将所有自动完成选项存储在内存中。您可以使用 Trie 快速过滤选项(例如this Java implementation)。无论 Trie 中有多少选项,它都将保持O(1) 效率。

【讨论】:

+1 ;每当网站用户在页面上的框中键入字符时,一想到服务器上的数据库连接就会抖动,我不寒而栗!【参考方案2】:

嗯,你不应该问。这应该被缓存。像这样想。假设 SO 上有 28,000 个标签。假设每个标签是 128 字节(不是)。那只是 3,584,000 字节(基本上没有)。有许多内存中的数据结构可以非常快速地搜索这些数据。

【讨论】:

好的,将选项存储在内存中是有意义的。但我认为这并不意味着一个常规数组,因为每次发出请求时都需要从查询中填充它。内存解决方案有哪些? 我猜是 APC,因为我可以用它来缓存数据库结果,它也可以处理 PHP 脚本缓存。

以上是关于大数据库表和繁忙站点上的ajax自动完成查询的有效方法的主要内容,如果未能解决你的问题,请参考以下文章

禁用站点上的所有 AJAX / Websocket 数据请求?

本地/实时站点上的相同查询,性能大不相同

cakephp 2 上的自动完成 Ajax

我的 Codeigniter 使用 ajax 自动完成

自动完成服务器端实现

从 SQL 填充的 Ajax 自动完成扩展器