设计一个结构,利用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. 从零开始学JAVA(04)-连接数据库MSSQL(JDBC准备篇)

    在JAVA中可以使用JDBC连接数据库,不管是哪种数据库,首先必须下载驱动,包括Windows的MSSQL. 1.下载MSSQL的JDBC驱动,可以通过百度“Microsoft JDBC Driver ...

  2. solr查询字段为空值,删除字段空值的方法

    1. 例,我想查找内容字段content为空值的文档,看看文档有多少?执行如下查询. http://127.0.0.1:11100/solr/province/select?q=-(content:* ...

  3. C如何使用内存

    栈:   自动变量:auto.变量的地址在栈中.   C语言函数调用的实现: 在调用方,参数从后往前按顺序被堆积在栈中 和函数调用关联的返回信息(返回地址等)也被堆积在栈中. 一旦函数调用结束,局部变 ...

  4. hg(Mercurial)版本库迁移到git版本库

    这几天没事干净搞迁移了,迁移完MVC又迁移版本库,还把工作电脑迁移了一下,开始用Win8.1了.这个迁移主要是因为实在不想在工作电脑上又装git又装hg了,点个右键出来一大堆菜单,况且现在git已经成 ...

  5. VMware系统运维(十一)部署虚拟化桌面 Horizon View 5.2 HTML ACCESS安装

    如果你希望在浏览器上面能够连接到用户桌面,那么HTML ACCESS是必须安装的,下面开始安装. 1.点击红框文件 2.打开安装向导,点击"下一步" 3.接受协议,点击" ...

  6. linux-启动停止重启shell 简单shell示例

    停止: #!/bin/bashpid=`ps -ef|grep /opt/lampp|grep -v grep|awk '{print $2}'|wc -l`b=0if [ $pid -gt $b ] ...

  7. # 基于Gitolite搭建Git Server - 支持SSH&HTTP

    Git, 一个分布式的版本管理工具,我认为其革命性的点:在于改变了用户协作的方式,使得协作更简单. 下面讲述 使用一个开源软件 Gitolite搭建一个Git Sever, 并给了一个推荐的团队协助方 ...

  8. poj 1821 动态规划

    思路:每次枚举每个工人的右边界j,维护最优的左边界k.那么dp[j]=max(dp[j],dp[k]+(j-k)*w[i].p): 对于每个工人的初值k=w[i].s-1; 令x=j-w[i].l,如 ...

  9. ASP.NET 状态的传递和保存

    1,HTTP协议是无状态的.服务器不会记住上次给浏览器的处理结果,如果需要上次处理结果(上次状态)就需要浏览器把处理结果值(上次状态)再次给服务器. 2,URL传值:通过URL参数或者通过Form表单 ...

  10. CSS导航指示箭头

    效果图 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...