01-leveldb概述
01-存储背景
数据存储是信息时代的一项基础技术,是各种互联网应用背后的重要基石。例如我们每天用到的各种APP,看头条,刷抖音,以及个人的各种电子数据的保存等等,都离不开存储技术。
在开发者的角度,数据存储大多是使用数据库,而大家广泛使用的又是比较成熟的关系型数据库,例如mysql、oracle、db2、sqlserver等。一直以来,关系型数据库得到大家的青睐。但随着互联网和信息技术的发展,以及各种新的应用场景的需求,各种数据库不断涌现,也出现了新的数据库类型,比如kv数据库、文档数据库、图数据库、时序数据库等等。
在db-engines上统计的目前数据库有数百个,以下是db-engines上目前排名靠前的数据库。
当然本书将要介绍的leveldb并未出现在这个前10榜单中。但它作为最近几年出现的数据库正成为后起之秀,越来越多地被开发者所熟悉和应用,并成为当前分布式数据库的核心引擎的主流之选。开源数据库ssdb就是将作leveldb作为存储引擎进行架构的。基于leveld开发的rocksdb更是被广泛地应用,目前国产数据库中风光无限的TiDB就是基于rocksdb开发。
02-leveldb背景
传统的关系型数据库平衡了读写的性能,使用B tree作为其索引存储结构,以其良好的稳定性被目前大多数应用和场景所使用。而对于一些写多读少、高并发、超大数据量的应用场景,使用B tree组织的关系型数据库难以堪此重任。因此以leveldb为代表的写优化的数据结构LSM tree应用而生。关于B tree和LSM tree后面章节会进行详细介绍,此处略过。
leveldb通过将磁盘随机写转换为顺序写来提高其写入性能。不论是数据的写入、删除还是更新,在leveldb中都是进行追加写的方式,从而保证了磁盘的顺序写。磁盘顺序写的性能较随机写至少要高1000倍。因此通过优化磁盘写入方式,显著提升了其写入性能。
03-leveldb简介
leveldb是谷歌开源的高效的kv数据库引擎,由Jeff Dean和Sanjay Ghemawat两位大神开发。在github上由两位的邮箱:Sanjay Ghemawat (sanjay@google.com) and Jeff Dean (jeff@google.com),如果您学习完leveldb之后有新的发现和建议,不防可以尝试和两位大神进行交流。
在github上的项目地址是:https://github.com/google/leveldb
开源协议为BSD,非常友好的开源协议,可以按照协议对源代码进行修改并重新发布,Facebook开源的Rockdb就是就是基于leveldb进行优化的。
介绍完作者和开源情况,接下来说说leveldb的特点:
- leveldb是持久化存储的kv系统,不同于redis将数据全部存储在内存中,而是将大部分数据存储于磁盘上。
- leveldb在存储数据时是根据key的顺序进行有序存储的,key的排序默认按字节序排序,支持用户自定义比较函数。
- leveldb和其他kv数据库一样,提供put、get、delete及批量原子操作接口。当然还提供一个范围查询的迭代器。
- leveldb支持数据快照功能,使得读取操作不受写入操作的影响,在读取过程中获得一致的数据。
- leveldb支持数据压缩功能,使用特定的前缀压缩以及块压缩,大大减少磁盘空间的占用以及提高IO效率。
- leveldb性能非常突出,官方报道其随机写性能达到40万每秒,而随机写性能达到6万每秒。
- leveldb是一个数据库存储引擎,它可以作为嵌入式数据库使用,也可以自己封装网络层来实现自己的数据库服务。
01-leveldb概述相关推荐
- RN学习笔记01:概述、特点与环境搭建
RN学习笔记01:概述.特点与环境搭建 一.RN概述 React Native(简称RN)是Facebook于2015年4月开源的跨平台移动应用开发框架,是Facebook早先开源的JS框架 Reac ...
- 中学教学01教学概述02教学过程03教学原则与方法
01教学概述 一.教学的概念 (一)教学的含义 教学的教,学生的学共同组成的一种活动 面对着墙讲课不是教学 教学也不等于教育学 教育学是一门学科,科学 教学不等于教育 教育:教书育人 教育的概念更大 ...
- 机器学习入门 01 —— 机器学习概述
文章目录 系列文章 机器学习概述 1.1.人工智能概述 1 人工智能应用场景 2 人工智能小案例 3 人工智能发展必备三要素 4 人工智能.机器学习和深度学习 5 小结 1.2.人工智能发展历程 1. ...
- C 程序设计教程(01)—— 概述
C 程序设计教程(01)-- 概述 该专栏主要介绍 C 语言的基本语法,作为<程序设计语言>课程的课件与参考资料,用于<程序设计语言>课程的教学,供入门级用户阅读. 目录 C ...
- (全栈旅行足迹地图打卡网站 0-1)-项目概述-01(WebGIS Vue-js-go-mysql)
专栏介绍 首先本专栏是一个全栈项目的旅行足迹地图打卡网站,定位是一个想要做开发的小伙伴,还有就是刚刚开始学习Web项目的大学生,想要做项目或者其他设计的学习源.也定位于目标想要快速上手 WebGIS ...
- 笔记 HTML - 01 HTML 概述
01 HTML 概述 By Kevin Song 定义:HTML 超文本标记语言 特点 最基础的网页语言 代码都是由标签组成 代码不区分大小写 <html><head>< ...
- 光脚丫思考Vue3与实战:第04章 模板语法 第01节 概述+插值
下面是本文的屏幕录像的在线视频: 光脚丫思考Vue3与实战:第04章 模板语法 第01节 插值 温馨提示: 1.视频下载:线上视频被压缩处理,可以下载高清版本: 链接:https://pan.baid ...
- 中学课程01课程概述02课程组织03基础教育课程改革
一.课程概述 (一)"课程"一词的由来-单选-斯宾塞准备学知识 "课程"一次源于斯宾塞<什么知识最优价值>,他是最早把课程作为一个专门的研究术语 ( ...
- 【JDBC - 核心技术】01 JDBC概述
第01章 JDBC概述 创作日期:2021-12-05 1.1 数据的持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意 ...
- MEM/MBA 写作-论证有效性分析(01) 概述
1 写作试题概述与简介 MEM/MBA 考试中 作文主要分为两个部分:论证有效性分析 和 论说文,分别位于卷面的56题和57题,如下图所示: 论证有效性分析(30分,参考时间25分钟) 和 论说文(3 ...
最新文章
- 肝了3版才满意:分布式系统之CAP理论,我们对它的理解和误解
- 祝融号火星车亮相,每小时仅移动40米,为何比乌龟还慢?
- PHP判断文件夹是否存在和创建文件夹的方法
- mysql+代码备份,一个很简单的MYSQL数据库备份脚本代码
- [工具库]JOXMLBuilder工具类——一键把多个bean对象数据转换为XML格式数据
- RTT设置删除空闲钩子函数想到函数指针和回调函数
- LoadRunner字符串编码转换函数:lr_convert_string_encoding
- 信息安全工程师(中级)—重要知识点总结
- 电脑摄像头测试软件在线,AMCap 摄像头测试软件使用说明
- 正则表达式匹配中文时发现的问题
- 高通平台开发系列讲解(音频篇)Codec驱动移植步骤
- 学习笔记(三):WiFi-Sleep
- 西数、希捷、DIY移动硬盘详细拆解,暴力解析
- IT培训行业揭秘(四)
- 云计算的主要应用领域
- JS: exec()方法
- WebStorm2016.2 注册码及激活,2018.6.14亲测有效
- 如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。//现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等
- 【金猿产品展】拍乐云——新一代实时音视频云服务,构建云上的每一次美好互动...
- android下雨动画效果,Android 自定义View(二) 下雨效果