导读:LevelDB是一种为分布式而生的键-值数据库。

作者:廖环宇 张仕华

来源:大数据DT(ID:hzdashuju)

01 LevelDB的特性

LevelDB是一个C++语言编写的高效键-值嵌入式数据库,目前对亿级的数据也有着非常好的读写性能。虽然LevelDB有着许多键-值数据库所不具备的优秀特性,但是与Redis等一些主流键-值数据库相比也有缺陷。本节将对LevelDB的优缺点进行具体阐述。

LevelDB的优点体现在:

  • key与value采用字符串形式,且长度没有限制;

  • 数据能持久化存储,同时也能将数据缓存到内存,实现快速读取;

  • 基于key按序存放数据,并且key的排序比较函数可以根据用户需求进行定制;

  • 支持简易的操作接口API,如Put、Get、Delete,并支持批量写入;

  • 可以针对数据创建数据内存快照;

  • 支持前向、后向的迭代器;

  • 采用Google的Snappy压缩算法对数据进行压缩,以减少存储空间;

  • 基本不依赖其他第三方模块,可非常容易地移植到Windows、Linux、UNIX、Android、iOS。

LevelDB的缺点体现在:

  • 不是传统的关系数据库,不支持SQL查询与索引;

  • 只支持单进程,不支持多进程;

  • 不支持多种数据类型;

  • 不支持客户端-服务器的访问模式。用户在应用时,需要自己进行网络服务的封装。

读者可以综合LevelDB的优缺点,有针对性地评估其是否适用于实际开发的项目/产品,并对最终是否使用进行决定。

02 LevelDB的性能分析

在LevelDB的源码中,笔者写了一段用于测试LevelDB性能的代码(db_bench.cc)。经过编译后,生成用于性能测试的可执行程序db_bench。通过运行该性能测试程序,用户能直观地了解LevelDB在海量数据读写方面的性能。

可为测试程序db_bench指定相关测试参数,也可以选择默认参数。db_bench在默认的测试参数下读写百万级别的数据时,每一个数据的key占用16字节,value占用100字节(启用压缩后,value占用50字节,即压缩率为50%)。

db_bench主要针对读与写两个方面进行测试。写性能测试项具体如下。

  • Fillseq:以顺序写的方式创建一个新的数据库。

  • Fillrandom:以随机写的方式创建一个新的数据库。

  • Overwrite:以随机写的方式更新数据库中某些存在的key的数据。

  • Fillsync:每一次写操作,均将数据同步写到磁盘中才算操作完成;而对于上述3种其他的写操作,只是将需要写的数据送入操作系统的缓冲区就算成功。

读性能测试项具体如下。

  • Readrandom:以随机的方式进行查询读。

  • Readseq:按正向顺序读。

  • Readreverse:按逆向顺序读。

在终端中输入命令执行db_bench,测试程序即可进行相应的读写操作,并记录相应的性能数据。

$ ./db_bench

针对上述的几个测试项,表1-1对比了LevelDB官方发布的与笔者实际测试的结果。两者硬件测试环境不同,因而相应测试项的数据也不相同。但总体而言,可以得知LevelDB读写性能的优异。

▼表1-1 LevelDB测试数据

此外,为了更好地测试比较LevelDB的实际性能,Google的工程师也将LevelDB与另外两种数据库(SQLite3和Kyoto TreeDB)进行了对比。经过测试证明,LevelDB相较于另外两种数据库,无论是在基本操作环境下,还是在某些特定配置环境下,均具有非常优秀的读写性能。

具体测试结果,可以参见源码中的leveldb/doc/benchmark.html。

关于作者:廖环宇,中南大学硕士、阿里云高级算法专家与工业大脑算法团队负责人,长期致力于人工智能算法与工业大数据技术的研究和实践,主导过许多大型数据智能平台的开发与应用。

张仕华,贝壳找房资深软件开发工程师,毕业于北京科技大学,曾就职于360、滴滴。热衷源码研究与探究技术本质,合著有《Redis 5设计与源码分析》。

本文摘编自《精通LevelDB》,经出版方授权发布。(ISBN:9787111693260)

《精通LevelDB》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:阿里、贝壳找房专家联合撰写,深入方法与关键代码层面,多注释与讲解。本书详细剖析LevelDB从使用到设计实现的方方面面,读后可了解谷歌Bigtable数据库的设计精髓。

刷刷视频

键值数据库LevelDB的优缺点及性能分析相关推荐

  1. 键值数据库PebblesDB读后感

    键值数据库PebblesDB读后感        在LevelDB/RocksDB这种分层思路上,PebblesDB提出了一种减少写放大的思路,下面学习并总结,所述以论文为基础,也有个人 观点,客观论 ...

  2. Docker基础26--6.1 Etcd—高可用的键值数据库

    6.1 Etcd-高可用的键值数据库 6.1.1 etcd概述 Etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)仓库,遵循Apach ...

  3. 从零开始设计键值数据库(KEY-VALUE STORE)

    本文主要参考 System Design Interview: An Insider's Guide(CHAPTER 6) 键值存储(key-value store),也被称为键值数据库(key-va ...

  4. 分布式事务键值数据库 TiKV 加入 CNCF 沙箱孵化器

    百度智能云 云生态狂欢季 热门云产品1折起>>>   云原生计算基金会 CNCF 昨日宣布接纳 TiKV 开源分布式事务键值数据库作为 CNCF 沙箱的早期发展云原生项目. TiKV ...

  5. Redis键-值数据库 nosql 数据建模(4)------ 如何存储主从表数据 一对超级多关系

    Create GUIDs online 全球唯一主键 作者:QQ 14588019 WonderfulLife 本范例中不能使用guid编号作为明细的id,如果这么干,明细将无法查询,分页就更别谈啦 ...

  6. Redis键-值数据库 nosql 数据建模(5)------ 如何存储树形结构的数据

    作者:QQ 14588019 WonderfulLife 关系型数据库电商产品分类表 catgories id name parentId idPath 101 level1 1st category ...

  7. Redis键-值数据库 nosql 数据建模(3)------ 如何存储主从表数据 一对多关系

    作者:QQ 14588019 WonderfulLife customers表 (主表) cust_id     cust_name   mobile       address 3892045    ...

  8. 神器Android键值数据库MMKV——基于 mmap 的高性能通用 key-value 组件

    MMKV 是基于 mmap 内存映射的 key-value 组件,底层序列化/反序列化使用 protobuf 实现,性能高,稳定性强.从 2015 年中至今在微信上使用,其性能和稳定性经过了时间的验证 ...

  9. python 嵌入键值数据库_PupDB 一个用Python编写基于文件的简单键值数据库

    What is it? PupDB is an ernest attempt to create a simple file-based key-value database written in P ...

最新文章

  1. C语言:随笔7--预处理命令
  2. 第七周项目一-成员函数、友元函数和一般函数有区别(1)
  3. secureCrt开启oracle
  4. python xlrd处理表格常用方法
  5. Struts2学习笔记——Struts2与Spring整合
  6. php如何制作视频特效,用PS将bmp图片制作出漂亮的动态视频效果
  7. Android自己搭建一个实用的SharedPreferences管理类
  8. 一文看尽 JVM GC 调优
  9. 如何设置WIN7自动登录(去除登录密码)
  10. selenium 定位方式1
  11. 微服务升级_SpringCloud Alibaba工作笔记0023---Nacos之Namespace空间方案
  12. 主内存和工作内存交互
  13. 计算(数字)的观点看世界
  14. [转载] python中svm的使用_Python中支持向量机SVM的使用方法详解
  15. 2017/12/29
  16. mysql修改max_binlog_cache_size
  17. java与数据库连接odbc_详解java数据库连接之JDBC-ODBC桥连方式
  18. 微信HOOK-微信逆向-微信公众号爬虫系统
  19. 苹果好用的测试软件,Mac上有什么好用的Mac内存检测软件?
  20. python用户画像_研究用户应该从哪几个维度去构建用户画像模型?

热门文章

  1. Linux工作笔记-重置密码解决MySQL for Linux错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (usi
  2. Spring Boot注册Servlet三大组建(Servlet、Filter、Listener)
  3. HTML期末作业-旅游网页
  4. HTML期末作业-宠物网
  5. 用t430搭建虚拟服务器教程,T430完美使用VmWare
  6. 在Ubuntu 18.04系统上安装Java 11的方法
  7. docker tomcat启动无法进入欢迎页面
  8. Django之Mode的外键自关联和引用未定义的Model
  9. php 伪造请求连接,phpcurl发送伪造请求
  10. php cgi模块,PHP5模块和CGI