续-假如有一亿个文章或书名,标题不重复……
http://community.csdn.net/Expert/topic/5340/5340679.xml?temp=4.165286E-02
原贴在上面这地址,因为回帖多,感觉分不够给了,开个新贴
谢谢大家的支持,我已经确定用B树做了,另外用静态变量做缓存,把经常查询到的10万条存在哈系表里,我想10万条作缓存够用了,因为数据虽多,但大部分是级少访问到的东西。
缓存方面制作没有什么问题,http://3http.com是我编写的论坛程序,也用了不少缓存,大家有兴趣可以看下。
但我在B树这方面还不太懂,原理什么的大概了解了,不过具体的例子没找到过,还有我的建立过程是让程序自动一条条的添加过程,我发现B树添加的过程中,是一分为二那么简单,但必需有个整理过程,即保证每层树都差不多多的子层数,就有可能需要移动大量的数据,感觉难点还在这个上面,因为数据实时在用,又要考虑移动这一点。
下面是我的制作思路,有兴趣的朋友提下意见
标题→自身ID号→自身的数据文本→对应的书(可能多本)
↘
自身的数据缓存
另外我说的一亿条,只是标题数量有一亿条,然后对应ID号(自动生成,数字形式),ID号对应具体的一个文本文件,文本文件里存放对应的本书,可能对应多本书,但这具体的书的数量就少多了,也采用ID号顺序一本本的添加。
是一本书对应着很多标题,查询的是标题
[解决办法]
用数据库不是很简单?为何要缓存?用数据库查询时间 <1s
[解决办法]
用缓存快
[解决办法]
3http.com这个论坛很有意思,页面即时响应,用户体验不错。
不明白B树移动什么意思,B树的移动应该只在结点内部,这个量不大,而且可以在内存中进行,然后整个结点写回硬盘。难道指的是结点在硬盘中的位置也要整理,反正保存地址物理位置随机没关系。
相同标题对应的多本书是在同一个ID的文本文件中,还是不同文件中?
[解决办法]
数据库方案
1、把文章分组,比如首字母之类的分组方法
2、每组放到不同表中
3、查询时,先判断是哪一组,然后再查询该表
举例:身份证查询,你设计的话不会把全国13亿的号码都放一起查询吧,甚至包括被注销的
数据库已经很完善了,用得好,几亿数据量又算什么。
不用数据库?
费用问题?可以选用免费的
性能问题?你能保证你写的算法比常用的数据库好?我看这几乎是吹牛。
就是不想用数据库,想用算法讨论学习而已?
题外话,楼主没说出影响设计的初衷,这是本帖的败点。
要求达到某个性能、要求开发时间有限制、是否考虑软件费用等等都没具体提。
简单来说,楼主就是需求表达不清,方向不明,导致游客理解各有着重,回答形形色色。
[解决办法]
简单的方法, 树, 前面有说过这方法
举个例子:
文章或书名为: "代码手册 "
代码 的HEX 为: B4 FA C2 EB
那么读取文件 C:\B4\FA\C2\FB\file.txt (前两个字为路径)
如果保存文件的路径, 加名称1024个字节那么1亿个文件
1000000000/128/128/128/128 = 3.7
1024*3.7 < 4096, 这个文件小于4K, 这个速度应该比较块了吧!