LevelDB初体验

最近工作需要找一个能使用磁盘存储数据,对写要求比较苛刻,需要每秒达100000TPS,读的时候需要能10000TPS左右,不能占用太多内存。单节点满足这个要求的常见有Redis、Memcached等,但是这个东西太费内存了,代价比较高,不太合适。找来找去,找到Leveldb这个神器了,在写的时候对内存要求不高,读的时候根据性能要求的不同需要对应的内存,如果使用SSD就是完美搭配了。

         目前主要测试写入性能,发现Leveldb还是使用单线程插入最为高效,但是写入性能非常惊人。

         测试数据:

         key=timeline+【0,20亿】

         value=128字节

        测试环境:

        CPU:16核,Mem:32G  磁盘:SSD  

       写入客户端:

        leveldbjni+1Java thread ,write_buffer_size=512MB

      插入20亿条数据的统计数据如下:

         插入数据过程中,CPU消耗比较小,多的时候在160%,少的时候在80%左右,插入过程中对内存消耗比较小,与设定的512MB比较接近,没有大的变化,load小于1;

         插入完成之后,磁盘文件总个数为14913个,占用磁盘存储空间31G。

         全局的avgTps=149594,以插入500W条数据的时候,阶段性的minTps=84631,maxTps=234796。


      插入50亿条数据的统计数据如下:

         插入数据过程中,CPU消耗比较小,多的时候在160%,少的时候在80%左右,插入过程中对内存消耗比较小,与设定的512MB比较接近,没有大的变化,load小于1;

         插入完成之后,磁盘文件总个数为32318个,占用磁盘存储空间77G。

         全局的avgTps=158272,以插入1000W条数据的为基准阶段性的minTps=100000,maxTps=232558。

有话要说