`
天机老人
  • 浏览: 151429 次
  • 性别: 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. 查询黑名单

以上除黑名单外都是迫切需要的,黑名单功能可以以后完善。
分享到:
评论
63 楼 dmewy 2009-05-26  
天机老人 写道
dmewy 写道
我敢说你们公司没有一个正规的DBA.
看看server的配置.建立数据加加index.看看跑多久.
你说了在PLSQL上跑的时间我只能说你很没经验.DB是oracle吗?
上线后的东西是放在什么环境?APP SERVER是什么?有没有会出现HTTP握手的情况?你有没有想到上线后网络连接的问题?这些都会再加慢速度.
第一条是DB的隔离级别.每个connection设置一下就好了.会牵扯到dead lock.
每个DB的隔离级别含义都不一样.
第二个业务不懂.不知什么意思.
其实.基本上你这种情况很少会出现,应该从需求上出发.避免大数据让用户区查.比如限制它查询的范围.半年前的数据就不显示之类的.你要搞清楚需求,看看用户到底想看到的是什么.不要老板说了什么你就傻去做.基本上正规来说.一些大数据的表每一年都会做一次备份.做成view去select.
分表的解决方案没考虑到数据量继续增大以后怎么维护和备份.按照什么切?这个标准以后再增加维护起来就痛苦了.



完了,难道是我表达问题很多人都没看懂!


的确是的.你要把整个需求说清楚.你这个问题最好是从需求入手.
不要你就是说放一个表里面3亿条数据.怎么查的快.我觉得做这种事情是没意义的.
你们是根据什么去查的?单表还是多表?
查找的时候根据业务需求的不同会有很多小技巧的.你写的太模糊了.
比如说.by user去查的话. user在你那个3亿表中肯定不是一对一的吧?
你那个3亿表放的你只说了放手机号码.结构是怎样的?是by 什么去查的?
SQL的写法上有很多技巧的.比如小表链接大表.index的加法? 多看看excution plan.
肯定有很多废资料.要定期清除的.
你不说清楚需求,这块去哪入手呢?
出发点是怎么避免大数据的查询.
你们这个玩意当初是谁设计的?
设计的时候考虑到了吗?

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

这种方案之前我们都讨论过,你们是怎么实现复杂查询的?
61 楼 天机老人 2009-05-26  
dmewy 写道
我敢说你们公司没有一个正规的DBA.
看看server的配置.建立数据加加index.看看跑多久.
你说了在PLSQL上跑的时间我只能说你很没经验.DB是oracle吗?
上线后的东西是放在什么环境?APP SERVER是什么?有没有会出现HTTP握手的情况?你有没有想到上线后网络连接的问题?这些都会再加慢速度.
第一条是DB的隔离级别.每个connection设置一下就好了.会牵扯到dead lock.
每个DB的隔离级别含义都不一样.
第二个业务不懂.不知什么意思.
其实.基本上你这种情况很少会出现,应该从需求上出发.避免大数据让用户区查.比如限制它查询的范围.半年前的数据就不显示之类的.你要搞清楚需求,看看用户到底想看到的是什么.不要老板说了什么你就傻去做.基本上正规来说.一些大数据的表每一年都会做一次备份.做成view去select.
分表的解决方案没考虑到数据量继续增大以后怎么维护和备份.按照什么切?这个标准以后再增加维护起来就痛苦了.



完了,难道是我表达问题很多人都没看懂!
60 楼 dmewy 2009-05-26  
我敢说你们公司没有一个正规的DBA.
看看server的配置.建立数据加加index.看看跑多久.
你说了在PLSQL上跑的时间我只能说你很没经验.DB是oracle吗?
上线后的东西是放在什么环境?APP SERVER是什么?有没有会出现HTTP握手的情况?你有没有想到上线后网络连接的问题?这些都会再加慢速度.
第一条是DB的隔离级别.每个connection设置一下就好了.会牵扯到dead lock.
每个DB的隔离级别含义都不一样.
第二个业务不懂.不知什么意思.
其实.基本上你这种情况很少会出现,应该从需求上出发.避免大数据让用户区查.比如限制它查询的范围.半年前的数据就不显示之类的.你要搞清楚需求,看看用户到底想看到的是什么.不要老板说了什么你就傻去做.基本上正规来说.一些大数据的表每一年都会做一次备份.做成view去select.
分表的解决方案没考虑到数据量继续增大以后怎么维护和备份.按照什么切?这个标准以后再增加维护起来就痛苦了.


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

放文件里吧....
不同的属性不同的文件夹.
规则成树状
大量的移动使用文件move
少量的移动把文件中对应的手机号删除新建.
58 楼 天机老人 2009-05-26  
机器只会有一台。不用考虑多台机器的事情!
公司要的就是价值最大化!不然这个活也不会交到我们手里了!
57 楼 LargeBean 2009-05-26  
按号段或号码的前几位分表,例如表名:t_139101,操作拼sql的时候,根据号码前几位,可以拼出表名。
可能会建的表多一些,看拆的粒度了
56 楼 hatedance 2009-05-26  
这种数量巨大的东西,我是一点概念都没有。
不管是3亿还是300亿。反正一台奔四是搞不定的。
所以出路是2条。一是买台深蓝。二是学google,买N台pc。
建议分布式,集群吧。用N台机器总是能解决的。N<=3亿。
55 楼 jichongchong 2009-05-26  
我们用了hash+文件+内存,没用关系数据库,用户属性都是动态的-_-!
54 楼 wlvfox 2009-05-25  
看的你的问题 我想到一个用CPU和内存 换取数据库速度的方法 不知道各位高人如何看?
方法是这样的。。。。
你把UPDATE分成100或者更多的条数一起更新,这个条数你要自己研究出一个效率与速度最合理的值了。在更新前是要发送数据吧?然后根据网关的回复挑选出没有执行成功的条,剔出UPDATE的集合中,放到另一个集合里去。如此UPDATE的内容将不会存在没有发送成功的,同时保存了需要重新发送信息的条目。但是由于可能出现如中途中断等情况,所以具体实施的时候需要考虑到这点问题的处理。额。。。不知道是否可行?大家讨论下吧 办法很笨 哈哈
53 楼 Xsen 2009-05-25  
不分表做的话性能肯定有问题
根据号段分表,根据业务逻辑分为字段不更新的表和字段要更新的表
查询时使用搜索引擎,更新时根据手机号这个索引更新
52 楼 天机老人 2009-05-25  
phpxer 写道
天机老人 写道
  上周有个需求,就是要做一个检索库:
  1 3亿个手机号码,并且每个号码20个左右的属性例:地区,订阅等信息。
  2 在最短的时候内select出来(5分钟,10分钟)[最重要]
  3 允许更新。对这些号码进行发送信息后,状态改变。[可以让他慢慢更新]

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

  


select 到底 根据什么条件 select? 如果只是手机号就好办了,时间可以限制在毫秒级。更新问题不大,直接用文件,按手机号做个一级索引就可以了。


当然不会那么简单!是用各种条件的组合!
51 楼 phpxer 2009-05-25  
laiseeme 写道
3亿条 方到文件里面会不会很大?


测试了下, 2亿条 大概是 12G。
50 楼 GT07 2009-05-25  
我之前处理过批数据跟楼主差不多,是2亿多个手机号码,跟楼主有点区别在于,我们的数据只需要查询,而不需要插入或修改数据,因此好办许多。在这里提出两个看法:
首先,分表是可行的,但是个人不赞成采用地区分表。原因在于,全国各省市的手机用户分布不均匀,用这个办法分表的话,会造成表与表之间数据不均匀,比如西部的省市的表会很小,而东部沿海省市的表会很大,甚至几千万,所以采用地区分表个人认为效率有限,达不到目的。如果是分表,还是建议hash的方式。
其次,如果只是查询,建议楼主采用一些如lucene,sphinx之类的全文检索的程序,我们的处理就是采用sphinx做索引,响应的时间很快,整个查询可以控制在毫秒。
49 楼 phpxer 2009-05-25  
天机老人 写道
  上周有个需求,就是要做一个检索库:
  1 3亿个手机号码,并且每个号码20个左右的属性例:地区,订阅等信息。
  2 在最短的时候内select出来(5分钟,10分钟)[最重要]
  3 允许更新。对这些号码进行发送信息后,状态改变。[可以让他慢慢更新]

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

  


select 到底 根据什么条件 select? 如果只是手机号就好办了,时间可以限制在毫秒级。更新问题不大,直接用文件,按手机号做个一级索引就可以了。
48 楼 cauherk 2009-05-25  
自始自终我没看懂需求。
1、3亿个手机号码,并且每个号码20个左右的属性例:地区,订阅等信息。
3亿的数据量只能说还行,不是特别大,但是已经很大了。
2、在最短的时候内select出来(5分钟,10分钟)[最重要]
这个是什么意思?是不是要对某些地区的用户,订购了某项产品的人,发送指定的信息?
还是其他意思?
3、允许更新。对这些号码进行发送信息后,状态改变。[可以让他慢慢更新]
这么多纪录发送一遍就完了?以后再想发送怎么办?再导入3亿条纪录?

我个人觉得,就这些数据,要干这些事。首先取决于你的业务需求,其次取决于设备,然后再取决于怎么做。如果就一台普通设备,无论怎么优化和设计都无计可施,分库更是瞎扯。还有好多如果,都是瞎猜,还是要列出相对细的业务需求和设备。
47 楼 kunee 2009-05-25  
LZ在 asiainfo 还是?
46 楼 天机老人 2009-05-25  
wangzy 写道
垃圾短信就是这么来的?

郁闷我们可不发垃圾短信的!
是定制用户信息更新!
45 楼 wangzy 2009-05-25  
垃圾短信就是这么来的?
44 楼 laiseeme 2009-05-25  
索引后也就是查询快了
但是人家还要更新呢

相关推荐

    基于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