阅读更多

9顶
1踩

编程语言

TreapDB 是一个基于 Treap 算法(一种随机二叉搜索树)开发的 Key/Value 数据存储的数据库。兼容 memcached 协议

 

更多特性:

  • TreapDB支持传统的get和set操作,还支持诸如求k个最小和k个最大、前缀查找以及区间查找等;
  • TreapDB的索引是持久化的,但是使用了Memory Map机制,因此给它更多的内存它的性能会更好
  • TreapDB的性能不赖,在给足够的Memory Map的情况下在随机的插入1亿key-value数据,保持在7500每秒;
  • TreapDB还很年轻,需要一段时间的磨练

 

RPC Server

  • memcached protocol compatible server for test usage

  • thrift-based server for production usage

下载&配置

  
  java $JAVA_OPTS -cp $LIBS fx.sunjoy.FastTreapDB 11811 "./data/dbhere" 64 128

  11811 is the listening port;
  "./data/dbhere" is the index file path;
  64 is the index-block-item size (keep it, if your key is not longer that 30 bytes)
  128 is the memory-map-size (the more the better, if physical memory is big enough;
  when index file size is bigger than memory-map-size parameter,disk seeking will be more frequent.)
  • Case Study: when memory-map-size is set to 6.4 G, a client insert 0.1 billion key,value pairs to treapdb server with stable speed at 7200/s. After insertion, the query operation can also response in less than 10 ms.

 

查看更多详情:http://en.wikipedia.org/wiki/Treap

 

来自: Google Code
9
1
评论 共 14 条 请登录后发表评论
14 楼 fxsjy 2010-12-15 08:33
性能已经有了很大提升,请看:http://code.google.com/p/treapdb/issues/detail?id=6
13 楼 fxsjy 2010-12-09 10:31
leero 写道
7500,和redis相比还是差很多啊,

Redis的性能非常出色,每秒可以处理超过10万次读写操作。


设计思路不一样:
1. 首先,TreapDB没有使用应用级缓存,写入的索引数据立即刷到操作系统内核,至于内核何时刷入硬盘由操作系统决定(通常延时很小)。这一点更像是MongoDB。而真正的数据是以追加的方式进行,即使系统掉电,也不会损坏。我们现在正在实现由数据重新生成索引的功能,这样就算索引由于系统掉电坏掉了,也可以恢复。


2. Redis是内存受限的数据库,而TreapDB并不要求索引文件小于等于内存大小,落在内存映像范围内的数据访问速度很快,而超出内存映像的部分会直接读磁盘。所以,并不受限于内存大小,用户可以根据自己的实际情况来设置内存映像大小。

12 楼 leero 2010-12-09 09:25
7500,和redis相比还是差很多啊,

Redis的性能非常出色,每秒可以处理超过10万次读写操作。
11 楼 fxsjy 2010-12-04 15:20
forchenyun 写道
fxsjy 写道

关于bdb的写,我曾经测试过普通Sata硬盘写,value为1k的情况下,5w/s是没有问题的

5w/s是在什么情况下测试的呢?我觉得和数据规模和插入的key的有序性有很大的关系。对于bdb,如果key是随机的,并且数量超过100万,在我的测试中达不到5w/s的。

所谓的key是随机的是相对于有序的情况,有序是指测试程序的key是一系列有顺序的值,比如thing10,thing11,thing12,thing13,thing14。这样的插入时,后插入的key在读索引时,基本都是命中内存中的cache了(占了前一个key的光),也就是所谓的locality很好。

首先,key随机与否对于写入效率基本没有什么影响,因为文件的写手append only的。其次,你所说的读key索引的问题,基本是说顺序读和随机读的问题了,但就写入来说,一秒几万是肯定没有问题的,我们已经在生产环境中使用。
ps:我说的是je的版本,而非c的版本


可能python自带的c版bdb和je-bdb不一样吧, 在python的bsddb模块中,如果是使用btree或hash模式的话,应该都是要改写索引的,append only的模式是新的feature吗?索引全load到内存中?
10 楼 fxsjy 2010-12-04 15:07
又有新的更新了,加入了删除一个key和取length的API.
http://code.google.com/p/treapdb/source/detail?r=10
9 楼 forchenyun 2010-12-04 12:11
fxsjy 写道

关于bdb的写,我曾经测试过普通Sata硬盘写,value为1k的情况下,5w/s是没有问题的

5w/s是在什么情况下测试的呢?我觉得和数据规模和插入的key的有序性有很大的关系。对于bdb,如果key是随机的,并且数量超过100万,在我的测试中达不到5w/s的。

所谓的key是随机的是相对于有序的情况,有序是指测试程序的key是一系列有顺序的值,比如thing10,thing11,thing12,thing13,thing14。这样的插入时,后插入的key在读索引时,基本都是命中内存中的cache了(占了前一个key的光),也就是所谓的locality很好。

首先,key随机与否对于写入效率基本没有什么影响,因为文件的写手append only的。其次,你所说的读key索引的问题,基本是说顺序读和随机读的问题了,但就写入来说,一秒几万是肯定没有问题的,我们已经在生产环境中使用。
ps:我说的是je的版本,而非c的版本
8 楼 fxsjy 2010-12-04 09:04

关于bdb的写,我曾经测试过普通Sata硬盘写,value为1k的情况下,5w/s是没有问题的

5w/s是在什么情况下测试的呢?我觉得和数据规模和插入的key的有序性有很大的关系。对于bdb,如果key是随机的,并且数量超过100万,在我的测试中达不到5w/s的。

所谓的key是随机的是相对于有序的情况,有序是指测试程序的key是一系列有顺序的值,比如thing10,thing11,thing12,thing13,thing14。这样的插入时,后插入的key在读索引时,基本都是命中内存中的cache了(占了前一个key的光),也就是所谓的locality很好。
7 楼 forchenyun 2010-12-04 02:11
fxsjy 写道
tomqyp 写道
跟BDB比怎么样呢

1. 从使用上来讲:TreapDB提供远程访问的能力,但是你也可以直接用代码中的DiskTreap<K,V>这个类,把它嵌入你的代码,这样就和BDB的使用模式一样了。
2. 从性能上来讲,我测试过产生300万个随机key的插入,比BDB要快30%左右。不过,我是用python2.6中自带的bsddb模块,所以测试结果可能不能反映出bdb的真实情况
PS: 在下载包中有一个bench文件夹,bench_random_bdb.py就是测试bdb的写入速度的。bench_random_write.bat是测试treapdb的写入速度的


关于bdb的写,我曾经测试过普通Sata硬盘写,value为1k的情况下,5w/s是没有问题的
6 楼 fxsjy 2010-12-03 16:29
tomqyp 写道
跟BDB比怎么样呢

1. 从使用上来讲:TreapDB提供远程访问的能力,但是你也可以直接用代码中的DiskTreap<K,V>这个类,把它嵌入你的代码,这样就和BDB的使用模式一样了。
2. 从性能上来讲,我测试过产生300万个随机key的插入,比BDB要快30%左右。不过,我是用python2.6中自带的bsddb模块,所以测试结果可能不能反映出bdb的真实情况
PS: 在下载包中有一个bench文件夹,bench_random_bdb.py就是测试bdb的写入速度的。bench_random_write.bat是测试treapdb的写入速度的

5 楼 tomqyp 2010-12-03 16:20
跟BDB比怎么样呢
4 楼 fxsjy 2010-12-03 14:08
得益于thrift的跨平台,可以用多种编程语言进行访问,这里是一个python客户端的例子:

http://code.google.com/p/treapdb/wiki/PythonClientExample
3 楼 fxsjy 2010-12-03 11:58
chan.d 写道
7500每秒?

翻译的问题?

7500/s 究竟这里指的什么?

7500次成功插入每秒
2 楼 chan.d 2010-12-03 11:43
7500每秒?

翻译的问题?

7500/s 究竟这里指的什么?
1 楼 fxsjy 2010-12-03 10:29
svn checkout http://treapdb.googlecode.com/svn/trunk/

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 基于yacc/lex描述的Delphi公式解析器源码.rar

    用yacc/lex描述的一个Delphi公式解释执行类从及程序代码,支持部分标准函数及自定义函数。支持C中boolean?A:B格式。不过解析not/and/or还有点小问题。高手感兴趣的话,可以帮忙修正,本人水平有限,请不要拍砖。

  • Delphi与Lex、Yacc (一) 安装篇

    google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//<script type="text/javascript"

  • Lex和Yacc应用方法(一).初识Lex

    Lex(Lexical Analyzar 词法分析生成器),Yacc(Yet Another Compiler Compiler编译器代码生成器)是Unix下十分重要的词法分析,语法分析的工具。经常用于语言分析,公式编译等广泛领域。遗憾的是网上中文资料介绍不是过于简单,就是跳跃太大,入门参考意义并不大。本文通过循序渐进的例子,从0开始了解掌握Lex和Yacc的用法。 一.L

  • lex&yacc安装配置

     lex Lex 是一种生成扫描器的工具。扫描器是一种识别文本中的词汇模式的程序。 一种匹配的常规表达式可能会包含相关的动作。这一动作可能还包括返回一个标记。 当 Lex 接收到文件或文本形式的输入时,它试图将文本与常规表达式进行匹配。 它一次读入一个输入字符,直到找到一个匹配的模式。 如果能够找到一个匹配的模式,Lex 就执行相关的动作(可能包括返回一个标记)。 另一方面,如果没有可

  • 基于yacclex描述的Delphi公式解析器..rar

    基于yacclex描述的Delphi公式解析器..rar

  • VC6.0+ParGen

    Visual C++6.0和Parser Generator安装工具,编译原理上机实验可用

  • ParGen.zip

    将lex和yacc文件转成c、c++文件 1. 启动Pargen程序,并选择Project->ParserWizard… 2. 选中ParserWizard,开始工程的创建,此处我创建功能,命名为Test,目录位置可自己选择,目标语言为C++,编译器为vc++(32-bit) 3. 选择是创建lex,还是yacc,还是两者兼有。此处我选择是lex和yacc都有,准备实现一个不支持变量的计算器,使用lex识别token,使用yacc识别语法 4. 设置yacc的文件名字以及使用的解析器,此处我使用的默认选项,不进行修改,文件名默认为myparser.y 5. 设置lex的文件名以及使用的分析器的名字,此处我使用的默认选项,文件名默认为mylexer.l 6. 点击完成按钮,创建工程完毕,同时有两个文件mylexer.l 和myparser.y

  • pargen.zip

    这是我们编译原理所用软件

  • 用YACC/LEX 设计计算机语言

    woaidongmao 文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~ 随笔 - 1469, 文章 - 0, 评论 - 619, 引用 - 0 导航 C++博客首页新随笔联系聚合管理 2011年9月 > 日 一 二 三 四 五 六

  • centOS yacc lex

    yacc command not found configure: error: Your operating system's lex is insufficient to compile  libpcap.  flex is a lex replacement that has many advantages, including  being able to com

  • Lex和Yacc使用教程(九).Windows下使用Lex和Yacc

    Lex和Yacc应用方法(九).Windows下使用Lex和Yacc草木瓜  20070904一、序    不想Lex和Yacc系列的最后一篇文章竟如此“难产”,已时隔三个月之久。不由慨叹自由可支配时间是如此之少,如此岂不谓新时代的“奴隶”~    罢罢罢,闲话少叙,回归正题,本文主要介绍在Windows下如何去使用Lex和Yacc,以作为本系列文章的终结。    二、方法介绍  

  • linux 下怎样安装使用 Yacc 和 Lex

    安装过程参照以下步骤: 1、打开网址:www.tcpdump.org/ 下载 libpcap-1.0.0.tar.gz (512.0KB) 软件包,通过命令 tar zxvf libpcap-1.0.0.tar.gz 解压文件,并将其放入自定义的安装目录。 2、打开网址:flex.sourceforge.net/ 下载 flex-2.5.35.tar.gz (1.40MB) 软件包,通过 tar ...

  • bison(yacc)学习笔记

    看matz的streem项目时对其中bison解析语法的几个地方有些不懂, 上网搜了些资料, 把这些记录下来.bison是啥就不多说了, 网上一搜一大堆. bison官方文档. 首先是这个用法 %union { node* nd; strm_id id; }%type <nd> program compstmt %type <nd> stmt expr condition block con

  • 小白说编译原理lex和yacc环境配置-多图

    转自:http://blog.csdn.net/lpstudy/article/details/51330063 lex和yacc的使用很简单,但环境配置却是各种问题,本章说明lex和yacc在windows下的环境配置。 软件需求: 系统 win7-64位(win7-32, win8, win10全部通过) c++编译器: vs2010(2008,2013,2015也全部通...

  • PGReg.exe注册码

    ParGen.exe主要用于Yacc & Lex的Windows版的语法定制和解析器生成,可用于生成C/C++和JAVA语言为目标的解析器。如果没有注册则有30天的限制,它使用PReg.exe进行注册,序列号的前面是PGS或PGM,后面长度为5字节且为任意数字。破解的序列号不得用于商业用途,如有违反与我无关,特再此声明!

  • Lex Yacc (二) 语法树

    语法树的应用 草木瓜 (四) 源码见百度云盘 详细讲解:草木鱼(四) input input i=0; while(i<=10){ print(i); i=i+1; } print(i+i);node.h node.h /* 定义树结点的权举类型 */ typedef enum { TYPE_CONTENT, TYPE_INDEX, TYPE_OP }

  • 编译原理——Lex和yacc的安装

    Lex和yacc的安装 Linux用户 Lex和Yacc可以直接从终端安装,命令: apt install flex bison 部分系统可能还需要手动安装 gcc 和 make 等工具,请自行测试。 安装完成后,在终端输入以下命令,若可以正确显示出版本号,则安装成功。 gcc --version lex --version yacc --version 如图所示:(图片来源网络)...

Global site tag (gtag.js) - Google Analytics