Key-Value数据库Kyoto Cabinet(1)

官方网站介绍 http://fallabs.com/kyotocabinet/
Kyoto Cabinet is a library of routines for managing a database. The database is a simple data file containing records, each is a pair of a key and a value. Every key and value is serial bytes with variable length. Both binary data and character string can be used as a key and a value. Each key must be unique within a database. There is neither concept of data tables nor data types. Records are organized in hash table or B+ tree.
Kyoto Cabinet runs very fast. For example, elapsed time to store one million records is 0.9 seconds for hash database, and 1.1 seconds for B+ tree database. Moreover, the size of database is very small. For example, overhead for a record is 16 bytes for hash database, and 4 bytes for B+ tree database. Furthermore, scalability of Kyoto Cabinet is great. The database size can be up to 8EB (9.22e18 bytes).
(1EB=1024PB,1PB=1024TB)

Kyoto Cabinet提供了java的API调用,安装过程参考http://blog.csdn.net/jiedushi/article/details/6037360
kyotocabinet 参数:
db.kyotocabinet.abc.relation.read.path=/a/b/logs/product_KcAbcRelation.kch#msiz=500000000#bnum=486489
-bnum num : specifies the number of buckets of the hash table.
-msiz num : specifies the size of the memory-mapped region.

下面是同事在Kyotocabinet数据库调研时候出的报告,非常好

Kyotocabinet数据库性能简单测试

机器配置:16G内存

a.数据库文件存储位置:NFS

写性能:

总记录数

数据库文件体积

写入成功数

写入失败数

耗时(豪秒)

平均每秒写入数

DB要求内存大小

8264272

734051632(734M)

8264272

0

44612

187824

1G

8264272

734051632

8264272

0

49108

168658

1G

8264272

734051632

8264272

0

51920

162044

1.5G

8264272

734051632

8264272

0

48922

172172

1.5G

8264272

734051632

8264272

0

58437

142487

2G

8264272

734051632

8264272

0

44818

187824

2G

18015570

1351514576(1.3G)

18015570

0

99932

181975

2G

18015570

1351514576(1.3G)

18015570

0

96606

187662

2G

18015570

1351514576

18015570

0

92966

195821

3G

18015570

1351514576

18015570

0

94012

191655

3G

 

读性能:

总记录数

数据库文件体积

命中数

未命中数

耗时(豪秒)

平均每秒读取数

DB要求内存大小

8264272

734051632(734M)

8264272

0

55211

150259

1G

8264272

734051632

8264272

0

52154

158928

1G

8264272

734051632

8264272

0

51565

162044

1.5G

8264272

734051632

8264272

0

50403

165285

1.5G

8264272

734051632

8264272

0

52776

158928

2G

8264272

734051632

8264272

0

55711

150259

2G

18015570

1351514576

18015570

0

123678

146468

2G

18015570

1351514576

18015570

0

121998

148889

2G

18015570

1351514576

18015570

0

120263

150129

3G

18015570

1351514576

241564

17774006

131038

137523

3G

33706245

2510662544(2.5G)

16978669

0

6154711

5477

200M

 

b.数据库文件存储位置:LOCAL

写性能:

总记录数

数据库文件体积

写入成功数

写入失败数

耗时(豪秒)

平均每秒写入数

DB要求内存大小

18015574

1215446928(1.2G)

18015574

0

79537

228045

3G

18015574

1215446928

18015574

0

79537

228045

3G

18015606

1215449104(1.2G)

18015606

0

77128

233968

3G

16978669

1146728896

16978669

0

73048

232584

3G

33706245

2510662544(2.5G)

33706245

0

208210

162049

3G

读性能:

总记录数

数据库文件体积

命中数

未命中数

耗时(豪秒)

平均每秒读取数

DB要求内存大小

33706245

2510662544(2.5G)

16978669

0

333752

101219

200M

16978669

1146728896(1.1G)

16978669

0

206954

82420

200M

18015574

1215446928

8264274

9751328

142549

126870

600M

18015574

1215446928

8264274

9751328

105576

171576

1G

18015574

1215446928(1.2G)

8264274

9751314

87114

207075

3G

 

c.结论:

1、 本地存储的写速度比NFS存储的写速度稍好,但都比较快,分别在每秒20万和每秒15万的级别上。

2、 写数据时,与文件大小无关,无论本地存储还是NFS存储,必须是内存体积大于数据文件的大小,否则性能急剧下降,并且变的不可接受。

3、 本地存储,读数据时,内存可以小于数据文件大小,读取速度与数据文件大小无关,而是与内存大小相关,当内存为200M时,每秒10万次读取次数,当将内存扩大了3G时,每秒20万次读取次数,也就是说,可以使用比较小的内存,读取比较大的数据量。

4、 NFS存储,读数据时,内存必须大于数据集文件体积,读取速度在每秒15万次。

 

读:内存>数据文件

写:内存>数据文件

读:内存<数据文件(数据文件=2.5G)

写:内存<数据文件

是否支持多进程写

Local

每秒20万次

每秒20万次

200M内存=每秒10万次,600M内存=每秒12万次

不可接受

NFS

每秒15

万次每秒18万次

不可接受

不可接受

 

所以,最好的选择时,文件存放在Local存储中,较大内存写入数据后,以较小内存去读取。

你可能感兴趣的:(数据库,NoSQL,key-value,内存数据库)