大数据量下如何优化全数据模糊查询

Jieven 发布于 2015/01/18 23:07
阅读 7K+
收藏 3
需求:大数据量下进行模糊查询,会有条件
#DB:Oracle

#数据量 1亿++
主要数据为电信用户的家庭(标准)住址信息
eg:xx街道xxx小区xxx栋xxx号

在不调整数据库(软硬件)的情况下怎么,如何优化。
什么分表,分库,分布式数据库,就不讨论了。
目前采用了 Oracle 全文索引查询,但是速度依然很慢,有没有什么第三方工具/软件/方法能进行优化。
目前查询速度大约要20s左右,希望优化到3s内查询出结果。

以下是问题补充:

@Jieven:目前的情况和下面说的情况差不多,用户的这个痛点就是我们公司的产品性能问题所致! " 呵呵,有次去电信营业厅办业务,看营业员在UI上选地址,真让人抓狂啊,必须选市,然后选区,再选街道,小区,线路编号,而且速度真的很慢,营业员选完了估计花了5分钟。当时他们的系统要是有20s的模糊查询,估计每天能多办1倍业务。 对oracle在这个层面上的优化不是很懂,地址的模糊查询中,最快的方式是把所有地址预先计算一个有向DAG,并编制索引。扯的远了,呵呵。 印象中,oracle的full text采用的二元词干法做分词的,这个分词技术不是很准确,还可以设置对每个“字”遍索引,还可以定期的优化全文索引。 " (2015/01/19 09:57)
加载中
0
泥马勒戈壁
泥马勒戈壁
你不想换软硬件,又不肯分库分表,你还想干啥
Jieven
Jieven
电信的系统根深蒂固,其实我等屌丝能随便更替的?
0
仪山湖
仪山湖

呵呵,有次去电信营业厅办业务,看营业员在UI上选地址,真让人抓狂啊,必须选市,然后选区,再选街道,小区,线路编号,而且速度真的很慢,营业员选完了估计花了5分钟。当时他们的系统要是有20s的模糊查询,估计每天能多办1倍业务。

对oracle在这个层面上的优化不是很懂,地址的模糊查询中,最快的方式是把所有地址预先计算一个有向DAG,并编制索引。扯的远了,呵呵。

印象中,oracle的full text采用的二元词干法做分词的,这个分词技术不是很准确,还可以设置对每个“字”遍索引,还可以定期的优化全文索引。


Jieven
Jieven
现在的方案 就是你说的这种,定期优化全文索引,但是指标不治本
Jieven
Jieven
你说的这个就是我遇到的场景,CRM的 资源确认 查询标准地址 贼慢
0
道在何方
道在何方
这种不要求太实时和安全级的,查询是不是可以考虑搜索引擎?比如lucene等?
道在何方
道在何方
回复 @Jieven : 不明白字符串大小什么意思,搜索引擎跟这个没关系,lucene就是能根据你的自定义信息建立索引,比如搜‘张三’,显示结果为‘xxx小区,xxx街道’等,这样在java里直接可以连lucene进行搜索,而不用搜索数据库了,比数据库快很多。但肯定的加设备了,比如的建几个搜索引擎集群扩展了,而且搜索的程序的改造。
Jieven
Jieven
本来也是考虑过,但是搜索引擎 只对小字符串数据有效吗?
0
loki_lan
loki_lan
1亿量的模糊查询,醉了。
loki_lan
loki_lan
回复 @Jieven : 关注,楼主解决了这个问题可以分享一下经验。
Jieven
Jieven
电信用户数据多,没办法啊,系统又不是说换就能换的
0
车开源
车开源

为什么不采用第三方搜索引擎呢,就是上楼所提:lucene

响应时间应该可以做到3S以内

Jieven
Jieven
地址的字符串内容很短,你确定 用搜索引擎 优化作用有效吗?并且1亿数据 拿过去建索引,对索引程序本身的维护 是否需要话费巨大的代价
0
八风不动
八风不动

既然住址信息是标准的,为什么不能针对这个标准做自定义索引?

通用索引不好使,就自己定义。

八风不动
八风不动
回复 @Jieven : 举例:xx街道,xxx小区,xxx栋,xxx号,分成四个列,分别作索引,分级或不分级做模糊查询。如果街道、小区的名称有限,楼号数字也有限,甚至可以做精确查询。 如果原表不能改,你就搞个新表,专门做索引查询。
Jieven
Jieven
lucene 么?Sorl 什么的
0
朱宏青
朱宏青

最简单的就是分表,还不让用.真是醉了.

Oracle模糊查询用后匹配也是可以走索引的(类似:abc%)

你可以dump一份数据测试一下分表,比如街道or小区 看看性能能提升多少

效果好 就去跟上面的周旋周旋吧 毕竟这几乎改动量最小了

Jieven
Jieven
回复 @道在何方 : 的确如此,像电信这种公司,DBA 都不敢随便说分表
道在何方
道在何方
新系统还行,已经根深蒂固的系统,再折腾分表如果不是大师级oracle容易死人的。。。觉得还是搜索引擎能好些
0
sevendlong
sevendlong
建逆向索引吧
0
楊家家主
楊家家主
我感觉你大数据的搜索,就用lucene呗。 至于省市什么的,固定数据的,就缓存这些数据嘛
0
零下三度
零下三度
这种数据量的模糊查询应该用全文检索来。直接使用lucene可能时间和代价太大,可以考虑solr4.*和elasticsearch,而且扩张也比较方便。
Jieven
Jieven
估计只有这种方案了
返回顶部
顶部