前面学习了一下rocksdb,这个db是对leveldb的一个改进,是基于leveldb1.5的版本上的改进,而且leveldb1.5以后也在不断的优化,下面从写入性能对两者进行对比。

前言

比较的leveldb的版本是1.18,rocksdb的版本是3.10.1.

在比较的时候需要将leveldb和rocksdb的参数调成一样的,本文的参数为,

memtable 4M,最多2个memtable

level0_slowdown_writes_trigger=8,level0_stop_writes_trigger=12,level0_file_num_compaction_trigger=4,

flush和compaction共用一个进程

leveldb和rocksdb在后台进程管理的默认配置也是不一样的,leveldb默认只能有一个后台进程用于flush和compaction,而rocksdb flush和compaction都会有一个进程,本文特殊没有说明的rocksdb就是和leveldb一样的,flush和compaction共用一个进程

场景1

每个key 8byte,没有value

这个场景在关系链系统里面非常常见,因为关系链系统是key-list,使用leveldb类似系统实现的时候,需要将list中的id提到key里面

得到的测试结果如下:

  leveldb rocksdb
请求数 10000000 10000000
数据量 80M 80M
耗时s 56 73
吞吐量(Mps) 1.428571429 1.095890411
qps 178571.4286 136986.3014
是否发生stall

结论是leveldb比rocksdb要略胜一筹,由于value为空,整个的吞吐量和磁盘的吞吐量(100Mps到150Mps)还相差比较远,所以并没有发生写stall的情况。因为没有发生stall,所以性能对比完全是内存操作的性能的对比。

这个场景比的主要是内存的写操作速度,可以看出leveldb要好一些。

因为主要是内存操作,内存操作没有log,(加上log会严重影响性能),猜测的原因可能是:

  1. leveldb的skiplist的原子指针用的是memory barrier实现的,而rocksdb使用的atomic实现的。
  2. rocksdb采用了很多虚函数的地方,性能有可能比leveldb要差一些。

场景2

每个key 8byte,value 1000byte。

  leveldb rocksdb(flush和compaction共用线程) rocksdb(flush和compaction分开线程)
请求数 1000000 1000000 1000000
数据量 1G 1G 1G
耗时s 70 138 125
吞吐量(Mps) 14.62857143 7.420289855 8.192
qps 14285.71429 7246.376812 8000
是否发生stall

结论仍然是leveldb要更好一些,具体查看LOG文件,可以看出端倪,rocksdb的最后的level分布是:[6 359 148 0 0 0 0],level1文件严重超出范围,这样level0的文件并到level1上的时候就需要读入非常多的文件。咋

其中一次8个level0的319个level1的文件进行一次compaction,花费的时间可想而知。

那么为什么会这样呢?因为rocksdb在挑选compaction的时候,如果level0的文件数目超出level0_slowdown_writes_trigger的时候得分异常高,所以会一直发生level0向level1转移的情况,没有机会level1向level2转移。在这种情况下rocksdb就走向了深渊。。。。leveldb挑选compaction的时候,level0的分值是文件数目除以kL0_CompactionTrigger,其他level的分值是该level的总文件大小除以这个level的最大byte

当rocksdb的flush和compaction分为两个进程的时候时间稍有减少,可以看出效果很不明显。这个原因是磁盘是瓶颈,分为两个进程并不能提高磁盘的吞吐量。

结论

从这个比较中可以看出,在写量非常大的时候,leveldb的性能还是要优于rocksdb的

rocksdb和leveldb性能比较——写性能的更多相关文章

  1. 提高HBase写性能

    以下为使用hbase一段时间的三个思考,由于在内存充足的情况下hbase能提供比较满意的读性能,因此写性能是思考的重点.希望读者提出不同意见讨论 1 autoflush=false的影响 无论是官方还 ...

  2. HBase最佳实践-写性能优化策略

    本篇文章来说道说道如何诊断HBase写数据的异常问题以及优化写性能.和读相比,HBase写数据流程倒是显得很简单:数据先顺序写入HLog,再写入对应的缓存Memstore,当Memstore中数据大小 ...

  3. cassandra mongodb选择——cassandra:分布式扩展好,写性能强,以及可以预料的查询;mongodb:非事务,支持复杂查询,但是不适合报表

    Of course, like any technology MongoDB has its strengths and weaknesses. MongoDB is designed for OLT ...

  4. mongodb官网文档阅读笔记:与写性能相关的几个因素

    Indexes 和全部db一样,索引肯定都会引起写性能的下降,mongodb也没啥特别的,相对索引对读性能的提示,这些消耗通常是能够接受的,所以该加入的索引还是要加入.当然须要慎重一些.扯点远的,以前 ...

  5. 漫谈linux之文件IO篇(SSD写性能和机械硬盘差不多,读是4到10倍)

    前同事的文章,觉得写得很清晰,收藏了. http://blog.chinaunix.net/uid-27105712-id-3270102.html 在Linux 开发中,有几个关系到性能的东西,技术 ...

  6. 存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?

    ​引言 随着大数据技术架构的演进,存储与计算分离的架构能更好的满足用户对降低数据存储成本,按需调度计算资源的诉求,正在成为越来越多人的选择.相较 HDFS,数据存储在对象存储上可以节约存储成本,但与此 ...

  7. 提高 web 应用性能之 CSS 性能调优

    简介 Web 开发中经常会遇到性能的问题,尤其是 Web 2.0 的应用.CSS 代码是控制页面显示样式与效果的最直接“工具”,但是在性能调优时他们通常被 Web 开发工程师所忽略,而事实上不规范的 ...

  8. ELK 性能(1) — Logstash 性能及其替代方案

    ELK 性能(1) - Logstash 性能及其替代方案 介绍 当谈及集中日志到 Elasticsearch 时,首先想到的日志传输(log shipper)就是 Logstash.开发者听说过它, ...

  9. Java程序性能优化之性能概述

    性能的基本概念 一).什么叫程序的性能? 程序运行所需的内存和时间. 二).性能的表现形式: 1).执行速度: 程序的反应是否迅速,响应时间是否足够短. 2).启动时间:程序从运行到可以处理正常业务所 ...

随机推荐

  1. layui省市区三级联动城市选择

    基于layui框架制作精美的省市区下拉框三级联动菜单选择, 支持三级联动城市选择,点击提交获取选中值代码. 示例图如下: 资源链接: https://pan.baidu.com/s/1s6l8iDBE ...

  2. 使用VSCode创建一个Vue项目

    vue-cli 是vue.js的脚手架,用于自动生成vue.js模板工程的. 安装vue-cli之前,需要先安装了vue和webpack · node -v          //(版本低引起:bas ...

  3. vs code 运行 Django 怎么修改端口

    1.具体操作步骤如下 默认情况下,通过 python manage.py runserver 命令行模式默认打开是 8000 端口,如下图所示: 在浏览器预览效果如下: 为了防止端口冲突,我们一般会修 ...

  4. ramfs 和 tmpfs 以及 ramdisk相关调研

    最近需要使用到 ramfs 和 tmpfs 做内存文件系统,下面对这两个文件系统相关的信息,做一下总结: 参考链接: https://www.thegeekstuff.com/2008/11/over ...

  5. java8 的files、path类相关文件遍历API

    Path的两种初始化(应该还有别的方式) Path file = new File(path).toPath(); Paths.get 判断是文件.是目录 Files.isRegularFile(fi ...

  6. elementUI+Vue实现管理系统的登录页面

    <template> <div class="maxbox"> <div id="appp"> <vue-partic ...

  7. 冒泡排序和sort,sorted排序函数

    冒泡: # 轮数 元素个数 比较次数# 1 6 5# 2 5 4# 3 4 3# 4 3 2# 5 2 1 # 列表有n个元素,则应比较n-1轮,即循环次数n-1 a=[85,7,4,89,34,2] ...

  8. C语言解决汉诺塔问题!

    很难受,看了很多资料才明白..... 对这个问题分析,发现思路如下:有n个黄金盘,要先把n-1个弄到B柱上,再把第n个弄到C柱上,然后把n-1个借助A柱弄到C柱上. 实现的函数如下: void f(i ...

  9. URLDecoder异常Illegal hex characters in escape (%)

    URLDecoder对参数进行解码时候,代码如: URLDecoder.decode(param,"utf-8"); 有时候会出现类似如下的错误: URLDecoder异常Ille ...

  10. 【CF528E】Triangles 3000(计算几何)

    [CF528E]Triangles 3000(计算几何) 题面 CF 平面上有若干条直线,保证不平行,不会三线共点. 求任选三条直线出来围出的三角形的面积的期望. 题解 如果一定考虑直接计算这个三角形 ...