`
天机老人
  • 浏览: 151435 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

3亿数据快速检索实现

    博客分类:
  • Java
阅读更多
  上周有个需求,就是要做一个检索库:
  1 3亿个手机号码,并且每个号码20个左右的属性例:地区,订阅等信息。
  2 在最短的时候内select出来(5分钟,10分钟)[最重要]
  3 允许更新。对这些号码进行发送信息后,状态改变。[可以让他慢慢更新]

  和几个同事讨论了一下,具体要注意以下几点:
  1 如果发送下去状态改变,但是只发送一半,但状态改变了如何办?
  2 如果多个产品线一起下发,状态会不会混乱。
  解决以上第二个问题,决定采用,队列等待的方式。第一个问题没想到好的解决办法,回滚也想过了,但感觉不是很现实!

  解决方案:
  经过实验500w条的数据在用plsql直接select,只需要0.2秒,所以总体采用分表的方式,每500w条分一个表,然后同时查询!

  但总感觉不是很好,抛砖引玉(真的很砖 )。不知道大家有没有更好的解决方案!



-----------------------------------------重新描述一下需求-------------------------------
很多人说需求不是很的清楚,这里重新整理了一下!
不过要注意的是数据库里已经有3亿个手机基数了!

一. 号码入库。
不定期会有新的号码需要入库,入库需要记录号码的常规属性,如:手机号,省份,城市,入库时间,手机卡类型,是否支持彩信,号码来源情况等。


二. 入库手机号源文件管理
入库手机号源文件要以文件形式保存在服务器上。

三. 按需要提取号码(最关键部分)
要按照需求提取所需的号码。

例如:
提号要求:
1.此号码非黑名单用户。
2.此号码为的订购和退订用户。
3.此号码2个月内没有活动。
4.省份要求:辽宁,云南,广东
5.号段要求:137和138和139号段
6.数量要求:每个省10w
7.是否支持彩信:是(是,否,忽略三种情况)
……

最后,符合条件的号码,按照固定格式(每个手机号占一行),形成文本文件,将此文件测试号码,是否需要状态报告等信息形成最终可发送文件并提供下载功能,同时记录本次提取信息(发送时间,发送标识等)
注:文件格式如下:
139***85185#09#0
139***71283
139***33190
第1列:手机号
第2列:产品类型(#09)
第3列:是否需要状态报告(#0)

四. 统计功能
一.号码情况统计
1.统计当前号码总量。
2.按照2个基本要求,统计现在库中可以使用的号码数量。
注:统计需要显示,全国总量,各省总量,各省省会总量,各省去除省会总量,各省7天未下发总量(省会与其他城市分开显示),各省可以发送总量(省会与其他城市分开显示,所以单独列出来)。

二.发送产品统计
1.按时间段、业务线等统计发送产品的情况,如:发送时间,最终发送文件等

五. 黑名单及特殊号码管理
1. 添加黑名单
2. 去除黑名单
3. 过滤黑名单
4. 查询黑名单

以上除黑名单外都是迫切需要的,黑名单功能可以以后完善。
分享到:
评论
83 楼 zjjvalid 2009-07-25  
如果是oracle 可以建立分区表 为了更平均 可以按照手机号最后一位 就可以每个标有3千万 如果还有问题 可以后两位分就每个表3百万 已经很小了。

2、更新数据 尽量减少 可以弄个表做插入 例如只更新是否发送了 网关的响应和状态报告都可以扔到另外的表里
3、我想3亿条数据你也不会每天都发 如果每天发1千万 这种做法可定没有问题
4、用户的添加我想 对于时间不会有太高要求 差不多就行了 所以索引一定要建好 当然也不需要太多
82 楼 zhaojuan8 2009-06-26  
数据切分吧
前面不是有人发过一个数据切分的帖子么
另外楼主发帖没有说明数据库环境
81 楼 src_bord 2009-06-26  
dmewy 写道
数据库更新其实很好解决.
不知道你们有没有DataExchange的概念.
可以create一个新表去Insert.
等到晚上的时候再update回主表.


呵呵! 不错. 这解决方案挺好的.在数据量非常大的情况下,白天把用户需要更新的数据记录下来,晚上空闲时候在去update,这样效率上虽然好不到哪去,但是,时间安排的好....
80 楼 抛出异常的爱 2009-06-17  
funcreal 写道
我知道oracle可以按照日期进行分区,分区后速度很快。但不知道能不能按照手机号码进行分区?

不用想了工信发文了...以后做这行不用考虑成本了...买几个服务器吧.
79 楼 funcreal 2009-06-17  
我知道oracle可以按照日期进行分区,分区后速度很快。但不知道能不能按照手机号码进行分区?
78 楼 swit1983 2009-06-09  
弱弱的问一下,大家说的分区,是逻辑上的还是物理上的啊。比如是把原来的一张表分区成多张表,还是加上一个条件(比如:地区为xx)多次查询啊?
77 楼 fjlyxx 2009-06-02  
楼主可以参考  防火墙,安全隐患策略类型软件的数据格式  用块状数据去存储 不一定要用数据库. 因为你有手机号码 所以你可以做到按手机号码排序  这样用文件去做更新是很快的  你想防火墙过滤规则的数据量是不会小的 但是为什么他们能做到这么快...
76 楼 0000 2009-06-01  
我知道垃圾短信是哪来的了。。
75 楼 elmar 2009-06-01  
天机老人 写道
按照我们的方案,大批量的查是没啥问题!但是大批量的更新非常成问题!
速度实在是难以想象!每更新一条就要开启关闭一次事物!

所以还是想听听大家的意见!


数据库无事务吧……应用程序做
74 楼 elmar 2009-06-01  
土土的问:为什么不直接使用3亿条数据,置标志位的方式实现 300M*300字节=100G数据文件的直接访问。
73 楼 redhat 2009-06-01  
这个使用水平切分数据库可以达到目的,使用读写分离技术进一步提高性能。

一点建议:
这个应用业务相对于简单,可以自己写一个简单的dal层。
你可以对于切割数据库:对于手机号进行水平分割。

对于修改,和查询进行预编译,使之关联到各个table进行查询或修改。

不过可以尝试使用hibernate shards,应该更加方便一点。
72 楼 zelsa 2009-06-01  
Lucene完全可以搞定,数据又不是很多,索引在update数据时实时更新度没问题的。直接用Hibernate Search或Compass吧,肯定能满足。
71 楼 天机老人 2009-05-27  
太感谢大家了,想不大家都如此热情!
特别是老抛同学真是太热心了。不知道说啥好呢!
70 楼 uptorun 2009-05-26  
抛出异常的爱 写道
dmewy 写道
抛出异常的爱 写道
Auckland 写道
抛出异常的爱 写道
天机老人 写道
机器只会有一台。不用考虑多台机器的事情!
公司要的就是价值最大化!不然这个活也不会交到我们手里了!

放文件里吧....
不同的属性不同的文件夹.
规则成树状
大量的移动使用文件move
少量的移动把文件中对应的手机号删除新建.


看来看去还是觉得抛出异常的爱的建议不错。
其次,我觉得你的瓶颈不仅仅在数据库更新上。


最大难点在于规则方案少....
检索慢...不过5分钟应该足够用了

dmewy 写道
数据库更新其实很好解决.
不知道你们有没有DataExchange的概念.
可以create一个新表去Insert.
等到晚上的时候再update回主表.

一秒100TPS一宿也update不了多少.



这个就简单了.首先你是用当天insert的哪张表去update所以不是3亿数据都UPDATE.
小表join大表去update.
OK.不过我基本上都不用update.因为update是一条一条去做的.
没关系.还是很easy.
基本的做法是根据PK去delete然后再 addbatch insert.
delete的时候用exist .这些都是小技巧了.
技巧很多很多. 比如insert的时候先drop index 全部insert以后再create index.
问题是楼主的需求他自己估计都搞不懂.
PS:我本来是做web开发的,现在主要负责DataExchange的部分.

好办法...

可以使用批处理进行更新,但是要注意失误便捷不要划分的太大,否则占用大量回滚段资源,也会影响性能,另外,update语句的更新条件最好能减少使用等值,也有利于更新的速度
69 楼 抛出异常的爱 2009-05-26  
dmewy 写道
抛出异常的爱 写道
Auckland 写道
抛出异常的爱 写道
天机老人 写道
机器只会有一台。不用考虑多台机器的事情!
公司要的就是价值最大化!不然这个活也不会交到我们手里了!

放文件里吧....
不同的属性不同的文件夹.
规则成树状
大量的移动使用文件move
少量的移动把文件中对应的手机号删除新建.


看来看去还是觉得抛出异常的爱的建议不错。
其次,我觉得你的瓶颈不仅仅在数据库更新上。


最大难点在于规则方案少....
检索慢...不过5分钟应该足够用了

dmewy 写道
数据库更新其实很好解决.
不知道你们有没有DataExchange的概念.
可以create一个新表去Insert.
等到晚上的时候再update回主表.

一秒100TPS一宿也update不了多少.



这个就简单了.首先你是用当天insert的哪张表去update所以不是3亿数据都UPDATE.
小表join大表去update.
OK.不过我基本上都不用update.因为update是一条一条去做的.
没关系.还是很easy.
基本的做法是根据PK去delete然后再 addbatch insert.
delete的时候用exist .这些都是小技巧了.
技巧很多很多. 比如insert的时候先drop index 全部insert以后再create index.
问题是楼主的需求他自己估计都搞不懂.
PS:我本来是做web开发的,现在主要负责DataExchange的部分.

好办法...
68 楼 jichongchong 2009-05-26  
GT07 写道
jichongchong 写道
我们用了hash+文件+内存,没用关系数据库,用户属性都是动态的-_-!

这种方案之前我们都讨论过,你们是怎么实现复杂查询的?

没有Index,你说怎么查的-_-!
67 楼 dmewy 2009-05-26  
抛出异常的爱 写道
Auckland 写道
抛出异常的爱 写道
天机老人 写道
机器只会有一台。不用考虑多台机器的事情!
公司要的就是价值最大化!不然这个活也不会交到我们手里了!

放文件里吧....
不同的属性不同的文件夹.
规则成树状
大量的移动使用文件move
少量的移动把文件中对应的手机号删除新建.


看来看去还是觉得抛出异常的爱的建议不错。
其次,我觉得你的瓶颈不仅仅在数据库更新上。


最大难点在于规则方案少....
检索慢...不过5分钟应该足够用了

dmewy 写道
数据库更新其实很好解决.
不知道你们有没有DataExchange的概念.
可以create一个新表去Insert.
等到晚上的时候再update回主表.

一秒100TPS一宿也update不了多少.



这个就简单了.首先你是用当天insert的哪张表去update所以不是3亿数据都UPDATE.
小表join大表去update.
OK.不过我基本上都不用update.因为update是一条一条去做的.
没关系.还是很easy.
基本的做法是根据PK去delete然后再 addbatch insert.
delete的时候用exist .这些都是小技巧了.
技巧很多很多. 比如insert的时候先drop index 全部insert以后再create index.
问题是楼主的需求他自己估计都搞不懂.
PS:我本来是做web开发的,现在主要负责DataExchange的部分.
66 楼 抛出异常的爱 2009-05-26  
Auckland 写道
抛出异常的爱 写道
天机老人 写道
机器只会有一台。不用考虑多台机器的事情!
公司要的就是价值最大化!不然这个活也不会交到我们手里了!

放文件里吧....
不同的属性不同的文件夹.
规则成树状
大量的移动使用文件move
少量的移动把文件中对应的手机号删除新建.


看来看去还是觉得抛出异常的爱的建议不错。
其次,我觉得你的瓶颈不仅仅在数据库更新上。


最大难点在于规则方案少....
检索慢...不过5分钟应该足够用了

dmewy 写道
数据库更新其实很好解决.
不知道你们有没有DataExchange的概念.
可以create一个新表去Insert.
等到晚上的时候再update回主表.

一秒100TPS一宿也update不了多少.
65 楼 dmewy 2009-05-26  
数据库更新其实很好解决.
不知道你们有没有DataExchange的概念.
可以create一个新表去Insert.
等到晚上的时候再update回主表.
64 楼 Auckland 2009-05-26  
抛出异常的爱 写道
天机老人 写道
机器只会有一台。不用考虑多台机器的事情!
公司要的就是价值最大化!不然这个活也不会交到我们手里了!

放文件里吧....
不同的属性不同的文件夹.
规则成树状
大量的移动使用文件move
少量的移动把文件中对应的手机号删除新建.


看来看去还是觉得抛出异常的爱的建议不错。
其次,我觉得你的瓶颈不仅仅在数据库更新上。

相关推荐

    基于VGG-16的海量图像检索系统1

    【基于VGG-16的海量图像...总的来说,基于VGG-16的图像检索系统是利用深度学习技术解决大规模图像数据检索问题的有效方法,它结合了深度学习模型的强大特征提取能力与高效的数据索引策略,实现了快速且准确的图像匹配。

    基于Sphinx+MySQL的千万级数据全文检索

    【基于Sphinx+MySQL的千万级数据全文检索】的架构设计着重解决大数据量下的高效全文检索问题。Sphinx是一款源自俄罗斯的开源全文搜索引擎,它在处理海量数据时表现出极高的性能和可扩展性。在DELL PowerEdge 6850...

    海量小文件元数据的分布式存储与检索.pdf

    本文提出了一种新的分布式存储与检索方法,通过分布式文件存储元数据,并采用元数据缓冲和Hash映射实现元数据的分布;同时,借助MapReduce并行程序实现元数据检索,并针对并行检索中存在的问题提出了局部位图索引的...

    Elasticsearch亿级数据检索性能优化案例实战!

    【Elasticsearch亿级数据检索性能优化案例实战】 在数据量巨大的业务环境中,Elasticsearch作为流行的全文搜索引擎,面临着如何高效处理亿级数据检索的挑战。本文将分享一个实际案例,探讨如何对Elasticsearch进行...

    虚拟列表快速显示海量数据

    - 虚拟列表模式要求数据检索是快速的,因此通常配合数据库查询优化或内存缓存来实现。 - 需要正确计算总行数,提供给`DataGridView`的`RowCount`属性,以便它能正确地处理滚动和显示状态。 - 在大量数据操作时,...

    人工智能-项目实践-检索-基于faiss构建大规模检索数据,文本数据通过simbert转化成emd.zip

    总的来说,这个项目展示了如何结合先进的深度学习模型和高效的检索技术,实现大规模文本数据的快速、准确检索。这对于搜索引擎优化、推荐系统、问答系统等领域都有重要的应用价值。通过对FAISS和SimBERT的深入理解和...

    solr千亿检索设计说明.zip

    本篇文章将详细探讨基于Solr实现的千亿级检索设计,以及其背后的Lucene结构和倒排索引技术。 首先,我们要理解Solr的核心功能:提供高效的全文搜索、 faceted search(分面搜索)、命中高亮、动态集群、实时添加...

    信息存储与检索\第三章\3 超星电子图书.ppt

    读秀学术搜索不仅拥有260万种图书、6亿页全文资料的数据库,还包含了大量期刊元数据、报纸元数据、人物简介和词条解释,形成了一个庞大的知识库。用户可以根据需求,进行全文、图书、期刊、报纸、学位论文和会议论文...

    延云YDB 大数据 万亿数据秒查

    ### 延云YDB:万亿数据秒级查询与分析引擎 #### 一、概述 随着信息技术的飞速发展,大数据已经成为推动企业决策、产品创新和业务增长的关键力量。面对日益增长的数据规模和复杂的数据结构,传统的数据分析工具已经...

    基于Spark的大数据即席检索与分析.pptx

    - **性能提升**:相比暴力扫描,万亿级数据秒查,而几百亿数据的暴力扫描需要半小时以上。 - **统计分析优化**:结合lucene倒排索引和parquet列存储,实现高效的统计分析,支持多维度钻取。 综上所述,基于Spark...

    eBay技术平台:掌控十亿级交易数据(Tony Ng).zip

    4. **搜索引擎优化**:为了快速响应用户的搜索请求,eBay可能会采用Elasticsearch或其他搜索引擎技术,对商品信息进行索引和检索。 5. **机器学习和人工智能**:eBay可能利用机器学习算法预测市场趋势,推荐商品,...

    Python-同步mysql数据到elasticsearch的工具

    MySQL作为一款广泛应用的关系型数据库管理系统,存储了大量结构化数据,而Elasticsearch则是一款实时分布式搜索和分析引擎,适用于非结构化数据的快速检索。将MySQL中的数据同步到Elasticsearch,可以实现更高效的...

    PHP 全文检索引擎 Sphinx 介绍

    3. **高可用性**:单台服务器上,Sphinx能支持高达100GB的文本和1亿条文档,确保了系统在大规模数据下的稳定运行。 4. **分布式搜索**:Sphinx支持分布式搜索,可以将搜索负载分散到多个节点,提高整体系统的处理...

    100亿数据量1万属性数据库架构设计

    在处理100亿数据量、10万并发和1万属性的数据库架构设计时,首先需要面对的是海量数据和高并发读写带来的挑战。此外,考虑到任意字段都可能进行组合查询,这就要求数据库架构不仅要能够存储大量数据,还要能够快速...

    应对数十亿的时序数据【开源项目的思路】

    2. 实时查询需求:为了进行即时分析,系统需要快速检索最近的热点数据。 3. 乱序入库:由于网络延迟和数据传输的异步性,数据到达和存储的顺序可能与实际发生顺序不一致。 4. 时间截面为主,多维度辅助:时间戳是...

    大规模分布式并行信息检索

    ##### 2.2 并行检索实现 在信息检索的过程中,用户提交查询请求后,代理程序会对其进行预处理,然后将处理后的查询发送给搜索程序,搜索程序执行查询并返回结果,最后由代理程序整合结果并返回给用户。这一过程本身...

    腾讯Hermes实时检索分析平台.pdf

    - **目标与优势**:Hermes旨在为公司内部的大数据分析业务提供一套实时的、多维的、交互式的查询、统计和分析系统,使万级维度、千亿级数据下的秒级统计分析成为可能。相较于传统的关系型数据库集群或内存计算平台,...

    信息检索与Web搜索.pptx

    3. **索引构建**:创建索引数据结构以支持快速搜索。 4. **索引压缩**:通过压缩技术节省磁盘空间并提高检索效率。 5. **检索模型与排序算法**:确定查询与文档之间关联性的方法,如布尔检索模型、向量空间模型、...

Global site tag (gtag.js) - Google Analytics