首先我所知道的:
过早的优化是万恶之源
但我认为错误的自动完成功能真的会毁掉你的网站。
我想知道是否有任何库可以有效地进行自动完成(服务器端),最好可以放入 RAM(以获得最佳性能)。所以没有浏览器端 javascript 自动完成(yui/jquery/dojo)。我认为 stackoverflow 上有足够多的主题。但我在 stackoverflow 上找不到关于此的好帖子(也许看起来不够好)。
例如自动完成名称:
names:[alfred, miathe, .., ..]
我能想到的:
- simple SQL like for example:
SELECT name FROM users WHERE name LIKE al%
.
- 我认为这个实现会因大量同时用户或大型数据集而崩溃,但也许我错了,所以数字(可以处理)会很酷。
- Using something like solr terms like for example:
http://localhost:8983/solr/terms?terms.fl=name&terms.sort=index&terms.prefix=al&wt=json&omitHeader=true
.
- 也许像在内存redis trie https://stackoverflow.com/questions/1958005/redis-autocomplete/我还没有测试过性能。
- 我还在这篇文章中读到了如何在java https://stackoverflow.com/questions/971052/autocomplete-server-side-implementation(lucene和shilad创建的一些库)
我想听到的是站点使用的实现以及它可以如何更好地处理负载的数字:
- 链接到实现或代码。
- 您知道它可以缩放到的数字。
- 如果能通过http或者socket访问就太好了。
非常感谢,
Alfred
优化自动完成
不幸的是,这个问题的解决很大程度上取决于您希望查询的数据。
只要您花时间使用“EXPLAIN”或探查器来向您展示查询优化器计划如何执行查询,LIKE 查询就不会给您的数据库带来太大压力。
要记住的一些基本知识:
索引:确保您已设置索引。 (是的,在很多情况下 LIKE 确实使用索引。myitforum 上有一篇关于该主题的优秀文章。SQL 性能 - 索引和 LIKE 子句 http://myitforum.com/cs2/blogs/jnelson/archive/2007/11/16/108354.aspx ).
连接:确保您的连接已就位并由查询规划器进行优化。 SQL Server Profiler 可以帮助解决这个问题。留意全索引或全表扫描
自动完成子集
自动完成查询是一种特殊情况,因为它们通常作为不断递减的子集工作。
-
'name' LIKE 'a%'
(可能返回10000条记录)
-
'name' LIKE 'al%
'(可能返回 500 条记录)
-
'name' LIKE 'ala%'
(可能返回75条记录)
-
'name' LIKE 'alan%'
(可能返回20条记录)
如果您返回查询 1 的整个结果集,则无需再次访问数据库来获取以下结果集,因为它们是原始查询的子集。
根据您的数据,这可能会带来进一步的优化机会。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)