楼主: jieforest

基于JSON的文档存储NoSQL数据库RaptorDB详述

[复制链接]
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
11#
 楼主| 发表于 2014-1-1 10:48 | 只看该作者
调整索引参数
为了获得RaptorDB的最佳性能,你可以对与硬件紧密相关的一些参数进行调整。

PageItemCount: 控制每个页面的大小

下面是一些我测试的结果:



我选择10000这个值,因为它在读写两方面都很好。欢迎你对你系统上的这个值进行修改,看看哪个数值更适合你。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
12#
 楼主| 发表于 2014-1-1 10:49 | 只看该作者
性能测试2.3版本

在版本2.3里,单个把内部类转换为结构的简单更改就获得了2倍多的性能提高和至少少使用30%的内存。这几乎可以保证让你在任何系统上都可以获得十几万的插入性能。



上面的一些测试运行了三次,这是因为那时计算机正在运行其他东西(不是为了测试而冷启动机器),因此最初的结果不算。HP G4笔记本电脑的测试结果是在令人惊讶。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
13#
 楼主| 发表于 2014-1-1 10:49 | 只看该作者
我还对上面所列的最后一个服务器重新进行了1亿插入测试,下面是测试结果:



正如你在上面的测试中所看到了,(虽然计算机规格与先前进行测试的HP系统不相匹配,但是)插入时间快了4倍,令人不可思议的是内存使用仅仅是前面测试所使用内存的一半。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
14#
 楼主| 发表于 2014-1-1 10:52 | 只看该作者
代码使用

要创建或者打开数据库,你可以使用下面代码:
  1. // 创建一个不允许重复的Guid关键字的数据库
  2. var guiddb = RaptorDB.RaptorDB<Guid>.Open("c:\\RaptorDbTest\\multithread", false);

  3. // 创建一个允许重复的,长度为100(UTF8)字符的字符串关键字的数据库
  4. var strdb = RaptorDB.RaptorDB<string>.Open("c:\\intdb", 100, true);
复制代码
要插入或者获取数据,你可以使用下面代码:
  1. Guid g = Guid.NewGuid();
  2. guiddb.Set(g, "somevalue");

  3. string outstr="";
  4. if(guiddb.Get(g, out outstr))
  5. {
  6.    //成功后的outstr应该是 "somevalue"
  7. }
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
15#
 楼主| 发表于 2014-1-1 10:53 | 只看该作者
UnitTests项目里包含了不同用户使用环境下可以运行的代码的例子,要看更多的例子的话,你就参考这个项目。

与版本1的不同

下面是RaptorDB版本2与版本1项比较的一系列不同之处:

1)删除了日志文件,而且不再需要日志文件了,这是因为MGIndex处理索引非常快。

2)用定时器取代了线程。

3)索引通过后台程序保存到磁盘,这样做就不会阻塞处理引擎。

4)简化了混乱不堪的通用代码,删除了RDBDataType,因此你可以使用常见的int,long,string和Guid数据类型。

5)增加了RemoveKey

而现有的代码就像以前一样,应该采用新的处理引擎编译。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
16#
 楼主| 发表于 2014-1-4 13:07 | 只看该作者
RaptorDBString和RaptorDBGuid的使用

RaptorDBString是用于长字符串关键字的(也就是大于255字符的字符串的),实际上,它用在文件路径及其他上。你可按照下面的方式使用:
  1. // 大小写不敏感的长字符串关键字 var rap = new RaptorDBString(@"c:\raptordbtest\longstringkey", false);

  2. //对guid关键字进行murmurhash  var db = new RaptorDBGuid("c:\\RaptorDbTest\\hashedguid");
复制代码
RaptorDBGuid是一个特殊的处理引擎,它对输入的Guid进行MurMur2散列,从而降低内存的使用(16字节的数据只使用4个字节), 如果你有大量的数据项需要存储,那么这么做是非常有用的。你可以按照下面方式使用:
  1. // 对guid关键字进行murmurhash var db = new RaptorDBGuid("c:\\RaptorDbTest\\hashedguid");
复制代码

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
17#
 楼主| 发表于 2014-1-4 13:08 | 只看该作者
全局性参数

下面的参数在Global.cs文件里,你可以对它们进行修改,它们控制着内部处理引擎的工作方式。

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
18#
 楼主| 发表于 2014-1-4 13:09 | 只看该作者
RaptorDB接口

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
19#
 楼主| 发表于 2014-1-4 13:10 | 只看该作者
没有进行清理就直接关闭

如果没有进行清理就直接关闭RaptorDB,那么RaptorDB就会自动对下面记录重新构建索引:存储文件最后一个已经索引的记录到最后插入的记录。这个功能还可以让你删除mgidx文件,然后重新构建索引。

删除关键字

在RaptorDB版本2里,添加了删除关键字功能,但有以下告警提示:

1) 存储文件里的数据是不能删除的

2) 向存储文件添加一条特别的删除记录,这样既可以追踪删除情况,也可以在需要的时候帮助我们重新构建索引。

3) 删除的是索引里的数据

使用道具 举报

回复
论坛徽章:
277
马上加薪
日期:2014-02-19 11:55:14马上有对象
日期:2014-02-19 11:55:14马上有钱
日期:2014-02-19 11:55:14马上有房
日期:2014-02-19 11:55:14马上有车
日期:2014-02-19 11:55:14马上有车
日期:2014-02-18 16:41:112014年新春福章
日期:2014-02-18 16:41:11版主9段
日期:2012-11-25 02:21:03ITPUB年度最佳版主
日期:2014-02-19 10:05:27现任管理团队成员
日期:2011-05-07 01:45:08
20#
 楼主| 发表于 2014-1-4 13:11 | 只看该作者
单元测试

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表