设计一个结构,利用Berkeley DB完成大数据的存储,备份,查询功能。

已有的储备:

  1.Berkeley DB的基本操作。

  2.数据转存后数据不丢失。

  3.过百GB以上数据的存储。

数据流如下,个人称为数据流,具体跟其他术语冲突不在考虑范围。

各部分功能:

  A:负责将数据存进Berkeley DB,目的是将源数据转换为Berkeley DB能够访问的格式。方便后续使用。由于A的磁盘有限,而且A在源源不断的插入过程中消耗大量的系统资源,同时一旦宕机,后果很严重(或许是处理方法没有找到)。同时在A中利用一个进程插入数据,要利用另外一个进程对A进行检索还得另外处理。此时的检索效率也不一定会高。所以做相应修改。

  node[]:定期获取A上的数据。获取规则根据实际情况制定。有点类似map的原理。经过我们的测试,做了这个步骤之后。出现了node中只有第一个node可以访问数据。其他node打开环境都会出错。所以有一个merge的节点负责将所有节点数据收集起来,这样打开环境就不会出现问题了。数据也可以访问了。

  merge:根据上面所说,merge负责将数据合并。这样Berkeley DB可以访问。目的是能在merge上进行检索。

问题:

  1.A宕机导致node节点jdb文件数据不按顺序的问题。如果A是程序异常,而环境下的jdb文件都丢失了,这时候如果重新启动程序则打开环境失败。即使把环境下的内容清空,重新产生的文件也是从头开始。无法再跟之前的数据进行合并。一个方案是,如果把新产生的文件的文件名改成之前的最大文件名的下一个,然后合并到merge上去。通过测试,此方案不可行,不能将两个不同环境下的文件按照文件名有序强行组合成一个环境还想着去访问他。毕竟内存数据库不是硬盘。另外一个方案是,再利用一个merge把宕机之后的文件都合成在merge2中。这样要检索的时候,我们遍历下merge去访问数据库。(这里所有的电脑通信,连接等过程暂时都是考虑利用ssh来进行)。这个方法理论上可以,实际上有待考证。

  2.我个人认为最大的问题就是利用的资源太多了。node的可以考虑去掉。node的作用是防止merge上的数据丢失所有数据都丢失了。但是实际上merge上的数据是很难丢失的。如果merge仅仅是用来做检索操作,基本上是没有丢失的可能。除非人工把硬盘的文件给删了。所以现在就在想着将以上结构改改。得到以下结构并给出相应解释

A的功能不用多说,跟之前一样。node数据。但是切换到下一个node的条件是PreNode的磁盘用完或者A宕机。我们保证每个node上存储的数据都是一个Environment。宕机我就切换到下一个node。实验室电脑现在能让程序异常,终止,的数据量至少能达到200G。性能好的电脑能让Berkeley DB管理TB级的文件都没压力。A的磁盘最好是尽量大,这样就可以考虑如果小数据就不用把A上的数据删除。

检索入口要求不高,基本能运行程序就行了,当然也可以直接利用一个node去作为检索入口。

个人认为上述方案比第一个方案要好。还有一些隐藏的问题没有发觉,毕竟经验不足。

转载说明出处:http://www.cnblogs.com/ickelin/p/3975676.html

Berkeley DB数据处理的更多相关文章

  1. Berkeley DB 使用

    http://www.ibm.com/developerworks/cn/linux/l-embdb/index.html UNIX/LINUX平台下的数据库种类非常多,参考资料1中 列举了其中的大部 ...

  2. 免费数据库(SQLite、Berkeley DB、PostgreSQL、MySQL、Firebird、mSQL、MSDE、DB2 Express-C、Oracle XE)

    SQLite数据库是中小站点CMS的最佳选择 SQLite 是一个类似Access的轻量级数据库系统,但是更小.更快.容量更大,并发更高.为什么说 SQLite 最适合做 CMS (内容管理系统)呢? ...

  3. Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)

    Berkeley DB的数据存储结构 BDB支持四种数据存储结构及相应算法,官方称为访问方法(Access Method),分别是哈希表(Hash Table).B树(BTree).队列(Queue) ...

  4. 比Redis更快:Berkeley DB面面观

    比Redis更快:Berkeley DB面面观 Redis很火,最近大家用的多.从两年前开始,Memcached转向Redis逐渐成为潮流:而Berkeley DB可能很多朋友还很陌生,首先,我们简单 ...

  5. Berkeley DB分布式探索

    明天回家就没有网络,今晚就将整个编写过程记录下来.顺带整理思路以解决未能解决的问题. 标题有点托大,想将Berkeley DB做成分布式存储,感觉很高端的样子,实际上就是通过ssh将Berkeley ...

  6. Berkeley DB

    最近用BDB写点东西,写了挺多个测试工程.列下表,也理清楚最近的思路 1.测试BDB程序,包括打开增加记录,查询记录,获取所有记录.将数据转存mysql 程序的不足,增加记录仅仅只有key和value ...

  7. BDB (Berkeley DB)数据库简单介绍(转载)

    近期要使用DBD,于是搜了下相关的资料,先贴个科普性的吧: 转自http://www.javaeye.com/topic/202990 DB综述DB最初开发的目的是以新的HASH訪问算法来取代旧的hs ...

  8. Oracle Berkeley DB Java 版

    Oracle Berkeley DB Java 版是一个开源的.可嵌入的事务存储引擎,是完全用 Java 编写的.它充分利用 Java 环境来简化开发和部署.Oracle Berkeley DB Ja ...

  9. 新浪研发中心: Berkeley DB 使用经验总结

    http://blog.sina.com.cn/s/blog_502c8cc40100yqkj.html NoSQL是现在互联网Web2.0时代备受关注的技术之一,被用来存储大量的非关系型的数据.Be ...

随机推荐

  1. 【阿里云产品公测】一句话告诉你什么样的人该使用ACE,如何使用ACE

    作者:阿里云用户小鸡咕咕 首先回应标题,这一句话就是:看完这篇帖子你就知道了.     前言 写在文章之前,我想先阐述一下写这篇文章的意义.可能大伙就要说了,写这篇文章不就是为了200的代金券吗?错, ...

  2. 【Shell脚本学习10】Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等

    Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最 ...

  3. 【Mood-10】每个程序员都应该读的30本书

    “如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西.” 很多程序员响应,他们在推荐时也写下自己的评语. ...

  4. Android学习笔记⑧——UI组件的学习AdapterView相关2

    前面都是用ListView控件来配合Adapter做的一些实例,这次我们来见识一下GridView与Adapter之间的爱恨情仇.... GridView是用于在界面上按行.列分布的方式来显示多个的组 ...

  5. Precompile Prefix file(.pch文件)

    参考资料: http://blog.csdn.net/lwjok2007/article/details/46385595 http://www.tuicool.com/articles/beURbe ...

  6. uva 12544 无向图最小环

    思路:这题的N有500,直接floyd肯定超时. 我的做法是每次枚举一个点,求出包含这个点的最小环. 对所有最小环取最小值.求包含某个点的最小环我用的是启发式搜索,先以该点求一次spfa,然后dfs解 ...

  7. poj 2498 动态规划

    思路:简单动态规划 #include<map> #include<set> #include<cmath> #include<queue> #inclu ...

  8. 基调(听云)app,服务器,质量测试手段

    1. 网络质量检测 http://www.tingyun.com/tingyun_network.html

  9. duplicate symbol _OBJC_METACLASS_$ 报错记录

    duplicate symbol _OBJC_METACLASS_$_TabbarButton in: /Users/hw201406/Library/Developer/Xcode/DerivedD ...

  10. Unity3d之截图

    1.Application.CaptureScreenshot("Screenshot.png", 0); 2. exture2D CaptureScreenshot2(Rect  ...