当前位置:  开发笔记 > 编程语言 > 正文

高效的服务器端自动完成功能

如何解决《高效的服务器端自动完成功能》经验,为你挑选了2个好方法。

首先,我知道:

过早优化是万恶之源

但我认为错误的自动填充功能真的会炸毁您的网站.

我想知道是否有任何库可以有效地自动完成(服务器端),这可以适合RAM(为了获得最佳性能).所以没有browseride javascript自动完成(yui/jquery/dojo).我认为在stackoverflow上有足够的话题.但我无法在stackoverflow上找到一个关于这个的好线程(可能看起来不够好).

例如自动完成名称:

names:[alfred, miathe, .., ..]

我能想到的是:

简单的SQL就像例如:SELECT name FROM users WHERE name LIKE al%.

我认为这个实现会爆炸很多同时用户或大数据集,但也许我错了所以数字(可以处理)会很酷.

使用诸如solr术语之类的东西,例如:http://localhost:8983/solr/terms?terms.fl=name&terms.sort=index&terms.prefix=al&wt=json&omitHeader=true.

我不知道这个性能如此大的网站用户请告诉我.

也许在内存redis trie中,我也没有测试性能.

我也在这个帖子中读到了如何在java中实现这个(lucene和shilad创建的一些库)

我想听到的是网站使用的实现以及它可以处理负载的数量,最好:

链接到实现或代码.

你知道它可以扩展的数字.

如果可以通过http或套接字加入它会很好.

非常感谢,
阿尔弗雷德



1> Jon Winstanl..:

优化自动完成

不幸的是,此问题的解决方案将在很大程度上取决于您希望查询的数据.

LIKE查询不会给您的数据库带来太大压力,只要您花时间使用"EXPLAIN"或分析器来向您展示查询优化器计划如何执行查询.

一些基本要记住:

索引:确保您已设置索引.(是的,在许多情况下,LIKE确实使用索引.在myitforum上有一篇关于该主题的优秀文章.SQL性能 - 索引和LIKE子句).

联接:确保您的JOIN已就位并由查询计划程序进行优化.SQL Server Profiler可以为此提供帮助.注意完整的索引或全表扫描

自动完成子集

自动完成查询是一种特殊情况,因为它们通常用作不断减少的子集.

'name' LIKE 'a%' (可能会返回10000条记录)

'name' LIKE 'al%'(可能会返回500条记录)

'name' LIKE 'ala%' (可能会返回75条记录)

'name' LIKE 'alan%' (可能会返回20条记录)

如果返回查询1的整个结果集,则无需再次为以下结果集命中数据库,因为它们是原始查询的子集.

根据您的数据,这可能会为优化提供更多机会.



2> Eduardo Molt..:

我不会遵守您的要求,显然规模的数量将取决于硬件,数据库的大小,应用程序的架构以及其他几个项目.你必须自己测试一下.

但我会告诉你我成功使用的方法:

例如,使用简单的SQL:SELECT name FROM users WHERE name LIKE al%.但用于TOP 100限制结果的数量.

缓存结果并维护缓存的术语列表

当有新请求进入时,如果您有术语(或术语的一部分已缓存),请首先检查列表.

请记住,您的缓存结果是有限的,如果该术语在结果的末尾仍然有效,您可能需要执行一些SQL查询(我的意思是,如果最新结果与该术语匹配,则有效.

希望能帮助到你.

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有