首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

给个算法讨论下,该如何处理

2012-02-20 
给个算法讨论下电信业务发展迅速,每天话单量已亿为单位,由于交换机采集下来的话单有重单,包括完全重单,交

给个算法讨论下
电信业务发展迅速,每天话单量已亿为单位,由于交换机采集下来的话单有重单,包括完全重单,交叉重单,嵌套重单。如何进行完全重单剔除,交叉重单合并,嵌套重单剔除?能保证正确收费,减少投诉。
话单格式
主叫 被叫 开始时间 结束时间
例子:
完全重单: 
139888888 18999999999 20100101000001 20100101000159
139888888 18999999999 20100101000001 20100101000159
两条话单一模一样
交叉重单:
139888888 18999999999 20100101000001 20100101000159
139888888 18999999999 20100101000101 20100101000259
嵌套重单:
139888888 18999999999 20100101000001 20100101000159
139888888 18999999999 20100101000001 20100101000059

由于数据量大,肯定要把数据存到文件中,建立文件索引的,考虑用B+树做索引,但不知道如何组织数据,把数据分块读入,每块大小多少。

[解决办法]
把数据存到数据库中,按天建表。如果是一天的边界处的交叉和嵌套重单忽略之
[解决办法]
把数据存到数据库中,不需要自己去建B+树,外部文件,因为你可以站在巨人肩膀上。

注意:千万不要按天建表。

你可以按照电话号码范围建表,但是按天建表会发生什么问题?

如果用户要查半年的花费,那么杯具了,你要遍历180个表,如果人家要查3年的,那么餐具了。。。

你可以把136 6195 ****范围的建一个表,或者分段分库分机器处理都行。
[解决办法]
还是按时间建B+树,假定认为超过一个小时的通话为长通话时间,那么每天过来的纪录如果超过一个小时就放到一个新文件L中,如果不足一个小时,可以
1. 每个通话开始时刻存到一个文件
2. 或者每个通话开始时刻按通话时间分成几个文件
这样昨天的纪录不会影响今天的纪录,今天的纪录也不会读写昨天的文件。

热点排行