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

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

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

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

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

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

使用mysql和php。

【问题讨论】:

  • 不确定这是否是重复的,但我认为这对 SO 来说是一个很好的问题;与许多新程序员相关的一个。

标签: mysql autocomplete performance


【解决方案1】:

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

【讨论】:

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

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

【讨论】:

  • 好的,将选项存储在内存中是有意义的。但我认为这并不意味着一个常规数组,因为每次发出请求时都需要从查询中填充它。内存解决方案有哪些?
  • 我猜是 APC,因为我可以用它来缓存数据库结果,它也可以处理 PHP 脚本缓存。
猜你喜欢
  • 2017-10-08
  • 1970-01-01
  • 2012-06-07
  • 2022-08-19
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多