论坛首页 Java企业应用论坛

3亿数据快速检索实现

浏览 46403 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-23   最后修改:2009-05-30
  上周有个需求,就是要做一个检索库:
  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. 查询黑名单

以上除黑名单外都是迫切需要的,黑名单功能可以以后完善。
   发表时间:2009-05-24  
我觉得索引表是个很好的办法!
0 请登录后投票
   发表时间:2009-05-24  
试试数据的hash 分块根据某几位的hash值决定数据所在的DB...3亿对发号地区.对发号时间多次规范之后....
0 请登录后投票
   发表时间:2009-05-24  
按照我们的方案,大批量的查是没啥问题!但是大批量的更新非常成问题!
速度实在是难以想象!每更新一条就要开启关闭一次事物!

所以还是想听听大家的意见!
0 请登录后投票
   发表时间:2009-05-24  
天机老人 写道
按照我们的方案,大批量的查是没啥问题!但是大批量的更新非常成问题!
速度实在是难以想象!每更新一条就要开启关闭一次事物!

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


你去查查文档手册,里面有批量更新的方法。。。。
0 请登录后投票
   发表时间:2009-05-24  
laiseeme 写道
天机老人 写道
按照我们的方案,大批量的查是没啥问题!但是大批量的更新非常成问题!
速度实在是难以想象!每更新一条就要开启关闭一次事物!

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


你去查查文档手册,里面有批量更新的方法。。。。

好的谢谢!
0 请登录后投票
   发表时间:2009-05-24  
如果你真的用文档手册里面的批量提交方法去做,3亿条数据会让你的数据库down下来,因为你的数据库没足够的回滚段。

应该分批提交

特别是给这些号码发送信息的时候,我觉得更应该在收到短信网关回执的时候update一条的,否则批量update,如果其中发生什么问题导致回滚了,程序重启后继续处理,那时就会有客户收到重复的短信了
0 请登录后投票
   发表时间:2009-05-24  
手册不就是让你分批么?
比如100条100条的update。。。
0 请登录后投票
   发表时间:2009-05-24   最后修改:2009-05-24
是不能分批
交互一次update,这个没有什么好偷懒的
0 请登录后投票
   发表时间:2009-05-24  
分批查分批提交吧……
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics