上亿调数据检索,用什么可以提高效率

2016-07-07 12:39:22 +08:00
 yangyaofei

需求是这样的,有现在有千万条数据,以后会增加到上亿调,使用一些字段是文本。 检索的时候是所有字段的组合,而且会用大量的模糊检索。

找了个外包做这个,用 sphinx 做索引,在 50w 不到的数据中查询,复杂一些的查询会用到 40s ……,问一下这个是 sphinx 的极限了,还是外包不会优化………

出现的检索有可能是好几个字段都是模糊的,还有各种 and or 什么的……

6535 次点击
所在节点    程序员
29 条回复
laoyuan
2016-07-07 12:43:37 +08:00
文本你也说清楚是标题还是内容啊。上 SSD 了吧
br00k
2016-07-07 13:05:43 +08:00
可以试试 elasticsearch
coolloves
2016-07-07 13:12:02 +08:00
上 es 吧,以下是刚刚实测的,
111,130,586 hits 的数据,输入关键字也就几秒就检索完了.
三台 dell730 做成的集群
windfarer
2016-07-07 13:15:12 +08:00
elasticsearch 集群
notgod
2016-07-07 13:16:49 +08:00
es 首选 因为你要考虑后期扩容问题
xiasix
2016-07-07 13:21:54 +08:00
谁告诉你 sphinx 的极限了? 40 秒? 他蒙你的 千万级以内的 sphinx 比 solr 和 els 不管是建立索引还是查询速度都快不止一点半点
linoder
2016-07-07 13:24:58 +08:00
Apache Solr
JerryKwan
2016-07-07 13:49:13 +08:00
没有具体的数据,仅从描述中很难判断出是 Sphinx 的问题还是别的导致的,但基本可以肯定的是外包没把工作做好。
在做这类工作的时候,不是选择了某个技术框架就万事大吉了。要根据具体问题具体分析。数据量同查询性能并没有直接关系,要看查询语句是怎么组织的。
wander2008
2016-07-07 13:58:28 +08:00
明显是做的不好,不要怪 sphinx 。
zado
2016-07-07 14:04:09 +08:00
用工具什么还要看具体需求,你提供的信息太少。
islee
2016-07-07 14:17:15 +08:00
我去才 50W 都这样,明显不是 sphinx 的问题
gejigeji
2016-07-07 14:20:34 +08:00
看能不能按某些字段进行分表
3dwelcome
2016-07-07 14:28:56 +08:00
如果是 50w 篇很长文章的全文索引、那其实也正常。

优化的关键在于每个索引不能太小、也不能太大、保证引擎搜索 bloom filter 时、最大效率的命中潜在数据集。
slixurd
2016-07-07 14:37:27 +08:00
全文搜索的耗时和文章长度没有必然联系。文章长度只会减慢 indexing 时的速度,对于查询时来说没什么区别
SPHINX 没用过我就不说了,至于 LUCENE ,没有用 Bloom Filter ,用的一个 FST ,前缀树的状态机,复杂度是 O(len(query))。

然后说性能慢,不给 PROFILE 数据,不给查询样例都是坑好吧,怎么看得出来为什么慢....
lianyue
2016-07-07 15:16:03 +08:00
千万数据 mysql 的 like 也才 10 多秒
lecher
2016-07-07 15:28:44 +08:00
用 sphinx 建好词库了吗,词库决定了查询的精准度和性能。
单次查询四十多秒应该是不会用 sphinx 的锅,本质上 sphinx 还是聚合数据源的多条 SQL 语句,做缓存以供加速。如果单次查询需要那么久,说明对应的 SQL 语句执行更久,还可能没建好索引。

索引词库要维护一份精准的词库,这个最重要。
内存开了多大,如果内存里面缓存的索引数据足够完整,性能也可以提升很大。
其次数据源存储位置放 SSD 里面也有性能提升。
SlipStupig
2016-07-07 15:34:01 +08:00
mysql 4G 内存 4CORE CPU 查询在 10 亿数据 50 张表查询 100 个邮箱地址出来,实际就 7-8s 左右, splinx 明显被蒙了
realpg
2016-07-07 15:38:28 +08:00
我有一个 elasticsearch 集群 节点 100 多个 全是各种报废淘汰 PC 机……
丢在政府的仓库改造的机房里……反正电和网都不要钱
dong3580
2016-07-07 16:23:46 +08:00
Solr
isno
2016-07-07 16:33:49 +08:00
给你个数据参考:
单台 sphinx 的, 1 核 1G 内存, 虚拟机, 5~10 的指定属性和模糊, 500 万的数据量, 大概在 0.0xs

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/290843

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX