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

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

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

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


-----------------------------------------重新描述一下需求-------------------------------
很多人说需求不是很的清楚,这里重新整理了一下!
不过要注意的是数据库里已经有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. 查询黑名单

以上除黑名单外都是迫切需要的,黑名单功能可以以后完善。