设计一个结构,利用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. Autel MaxiDAS DS708 Fatal Application Error illegal operation

    I get one Original Autel MaxiDAS® DS708 Update Service, after complete update, I got a message " ...

  2. 【Linux/Ubuntu学习4】ubuntu 下面安装 vim 的问题

    ubuntu 下面安装 vim 的问题 1.输入vim时,显示: 程序“vim”已包含在以下软件包中: * vim * vim-gnome * vim-tiny * vim-gtk * vim-nox ...

  3. poi实现将数据输出到Excel表格当中

    今天简单的学习了一下POI,一下是所使用到的jar,这些jar可以到apache去下载

  4. extjs 简单入门

    中文网站:http://extjs.org.cn/ 英文网站:http://www.sencha.com/products/extjs/ 1.简介 extJS是一种主要用于创建前端用户界面,是一个基本 ...

  5. ASP.NET FormsAuthentication跨站点登录时绝对地址返回的问题

    关键字:FormsAuthentication, loginUrl, ReturnUrl, AbsoluteUri 在ASP.NET应用程序中,FormsAuthentication几乎是标配,但Fo ...

  6. Centos7.5 java环境的安装配置

    1.查看系统中的java环境 [root@localhost ~]# java -version openjdk version "1.8.0_101" OpenJDK Runti ...

  7. IE浏览器部分版本不支持background-siza属性问题

    background-size是CSS3新增的属性,但是IE8以下还是不支持,可以通过滤镜来实现这样的一个效果 background-size:contain; // 缩小图片来适应元素的尺寸(保持像 ...

  8. python 3.3.2 爬虫记录

    网络上大部分关于python爬虫的介绍以及代码讲解,都用的是python2.7或以下版本,用python3.x版本的甚少. 在python3.3.2版本中,没有urllib2这个库,也没有cookie ...

  9. c#中的方法的定义和运用

    首先,理解下,函数和方法: 其实两者是一样的,只是个叫法不同. C#中叫做Method,中文叫方法: C++中称为Function,中文叫函数. 函数是Function,多指以前面向过程编程时候,将逻 ...

  10. Cocoa Touch的3种类的交流方式delegate/target/notification

    1. Delegate 在Cocoa Touch类对象运行的周期中,某一个时间点它会去调用一些指定类的指定函数来完成他自身所要完成的功能.这个”指定的类”,就称为这个类的委托类.”指定函数”则是一些在 ...