首先,我知道:
过早优化是万恶之源
但我认为错误的自动填充功能真的会炸毁您的网站.
我想知道是否有任何库可以有效地自动完成(服务器端),这可以适合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或套接字加入它会很好.
非常感谢,
阿尔弗雷德
不幸的是,此问题的解决方案将在很大程度上取决于您希望查询的数据.
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的整个结果集,则无需再次为以下结果集命中数据库,因为它们是原始查询的子集.
根据您的数据,这可能会为优化提供更多机会.
我不会遵守您的要求,显然规模的数量将取决于硬件,数据库的大小,应用程序的架构以及其他几个项目.你必须自己测试一下.
但我会告诉你我成功使用的方法:
例如,使用简单的SQL:SELECT name FROM users WHERE name LIKE al%.
但用于TOP 100
限制结果的数量.
缓存结果并维护缓存的术语列表
当有新请求进入时,如果您有术语(或术语的一部分已缓存),请首先检查列表.
请记住,您的缓存结果是有限的,如果该术语在结果的末尾仍然有效,您可能需要执行一些SQL查询(我的意思是,如果最新结果与该术语匹配,则有效.
希望能帮助到你.