超难电信项目(操作3GB的大文本),搞不定快疯了---which高手能搞定,分全给了 (182分)

  • 主题发起人 quietosea
  • 开始时间
if 手机文本库的生成软件能改变或全是手动生成,或生成软件是个简单的东东,你自己可以编一个 then
现在是在就改text数据库,先编个小程序,对你的12G数据排序,分类,自定义数据库
分别按区号、手机号(135,136,130等开头号)、等的每个可能作为搜索条件的项目,建立索引表(!自定义的索引,以区号分例,一个区号一个目录,或一个文件类(010.135。dat)
如果要再把号把排序,定义一些大号,如0-1000000或都按电信号码的地区定义,1234为XX地区,那么1234为一类,并标名头地址,或文件名)
把12G的数据用你的转换软件转换完后,你就可以不用其它的数据库来编程了

if 电信数据库生成工具太大,或电信整个系统太复杂,不值得全部改掉或没有精力,更没有资本去改 then
帮他们做一个小的软件,也就是给电信的老程序做一个接口软件,以后一有文本数据,就
转换成你的格式,添加到你的库中 当然,你的软件也就能处理了

好处:1。可以不改变Text库的本质,因为文件小了,对于一个单独的,如北京的号,你可以打开010.XXXX的文件来看,哪怕是记事本也能看
   2。由于把12G分割成小文件,查找速度很快,只要是一台普通的1G,256M内存的机器,也能很快的把要找的内容找出来,虽然在刚开始时对数据整理分类,是个很慢长的等待,但考虑到以后的正常使用,还是非常值得的
   3,没有改变电信对数据的定义,文本文件,而且数据类型,数据格式都一样,用它们原来的程序也能处理

*注,在对文本搜索时,你用内存映象的方式读入数据,并且多线程,这样速度还会更快!!
 
quietosea:
我没有明白你是什么意思,如果是想把这四个文件导入到Access中,那么,哥们,你死定了,Access数据库最大不能超过2个G的!
如果是在这四个文件中查找某一条记录,那么你就必须给这些文本建立索引,要不速度
会慢得要死!
如果你那四个文本文件是电信不定期不定时提供的,你建索引的时候就够你受得了!

建议你把具体的需求和数据来源及来源方式等说清楚,要不别人很难帮你!
 
妈的,打了老半天的字,点一下发送,IE居然出错,害得我要重新打!!!,我日我的破机子

接上回!!

数据库模型:
目录型数据库
010-135-1351000-135101XXX-13510110000.txt
-13510120000.txt
....
135102XXXX-....
....
....
-1352000....
....
-138-.....
.....
0571-135...

对于数据库的文本,好好细化点,便于查找
    对于查找数据如13512345678
查到是135的,到135目录,查123再进一步,如果提示区号,那直接到对应区号的目录去找
速度更快
如果想找出13512345678的区号,而在010的目录下有135123XXX的文件,找一下这个文件时有没有这个号,有就知道是北京的

优点:速度快只要几秒就能找出来,机子只要是1G,128M,DMA66的老机子就能很好的处理了
不用编写大型数据库,只要会基本的文本输入输出,和字符定位函数就能实现
如果用多线程+内存映象读取文件内存中查找,速度更快
缺点,必须先对老数据进行处理,而这个时间可能要NN个小时,但可对于以后的实际使用来说算不了什么,绝对值!
如果是NT的系统,可以把文件放在一个目录中,或很少的几个目录中
如果你用Win9x的系统,一定要分开,因为9X下一个目录文件太多,会很慢,你可以在9x下打开winxp的i386目录,虽然这个目录还没有5千,但也会卡一下,
建议你用XP,因为XP支持的NTFS格式为3.1,NTFS的分区支持对文件的索引,可以加快文件的查找,同时把NT的文件索引功能开起来,加快文件的查找,

当然最好是多目录+NT,速度一定很快

也可以是几个大文件,自定义数据,文件数据格式像上面的目录格式,同时也有物定号码的起始记录,方便搜索,好处是数据文件少了,好管理



 
对wyb_star和3304xfq朋友:
由于我的文本文件是电信不定期不定时提供的,要搜索的号码也是任意的,因此我无法改变文件的生成过程,故用建索引的方法要做太多的前期工作且要经常更新,很困难!

对3304xfq朋友:
你说的“如果用多线程+内存映象读取文件内存中查找,速度更快”,我很想知道具体的细节,能给个例子吗?谢谢!

 
我有例子,你留下邮箱

我的例子是搜索一大堆文件中的特定字符串的,因为都是小文件,所以每个文件都一次读入到内存,你只要稍改一下,改成一次读1M之类的,然后进行搜索就成了
 
可以自己编程序进行“外部排序”,原因是如果用数据库排序,需要先要导入数据库,
而贴主又不想用"能完成导入操作的大型数据库"。
 
3304xfq朋友:
我的邮箱是quietosea@163.com,谢谢!
 
已发!!请查收
邮件主题是:内存映象搜索字符串
 
3304xfq朋友:
我没有收到你的邮件呀,麻烦再发一次,为防邮箱出问题,请改发到tyxi1979@sina.com,谢谢!
 
不好意思我现在是在网吧上,自己的机子不能上网了(学校断网了),没有办法给你发了不好意思,你可以找找《delphi5开发指南》这里有介绍!
 
如果每条记录的长度是固定的想提高速度就好办多了,请问是不是固定的呢?
 
给你提供一个方案,供参考。
不过要求你的计算机配置要高
-----------------------
1。首先在内存中建立2块同样大小的缓冲区,建议每个大小为128M,
命名为ABuffer和BBuffer
2。生成2个线程,AThread和BThread。AThread负责从文件中读取
固定大小的内容到内存区ABuffer或BBuffer。
BThread负责在内存区中查找相应的手机号。
3。AThread和BThread的同步和互斥流程如下
AThread读取一块文件内容到ABuffer
BThread在ABuffer中查找。同时AThread读取一块文件内容到BBuffer。
Bthread再在BBuffer中查找。同时AThread读取一块文件内容到ABuffer。
这样循环往复,应该可以很快找到你要的数据。




 
这四个文件是静态文件,还是经常更新的文件。
 
把机器升级成银河1号那样的,管你多少记录,照单全收。[:D]

 
如果是我的话,就在Oracle或SQL或InterBase中建个表,先不加索引.
用MS的导入导出工具,或用企业服务器的数据转换功能把文本导进去.
12G的文本,实际上要不了多少时间,可以先导了1G的文本看看速度.
导完后再建立索引,进行优化.

有Oracle的话,建议使用Oracle.Oracle就是牛.不过机子也要好.
 
可否用SQL SERVER的DTC作中介,导入文本,导出ACCESS
 
12G的数据import 到数据库要产生多大的数据空间,估计一般的数据不行,建议按照手机号码分成数个目录,每个目录下再分10个目录,层次地分下去,对目录和文件进行查找操作,是不是速度很快,不要整天想着数据库,不是万能的
 

Similar threads

回复
0
查看
901
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
944
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部