键值对数据库综述
关系型数据库与键值对数据库的比较与选择

关系型数据库与键值对数据库的比较与选择在当今数据密集型应用呈指数级增长的环境下,数据库的选择对于一个项目的成功至关重要。
而在数据库领域,关系型数据库和键值对数据库是两种主要选择。
本文将对这两种数据库进行比较,并提供一些建议,以帮助读者根据项目需求做出正确选择。
关系型数据库(RDBMS)是一种基于关系模型的数据库管理系统,它使用表格来表示和存储数据,且具备ACID(原子性、一致性、隔离性和持久性)的特性。
相比之下,键值对数据库(KV数据库)则是建立在键值对上的非关系型数据库,强调的是简单的键和值的存储。
首先,让我们来比较一下这两种数据库的特点和优势。
关系型数据库以其严格的模式和结构化查询语言(SQL)的支持而闻名。
它适用于需要复杂数据模型和强大查询功能的应用。
关系型数据库提供事务处理能力,确保数据的完整性和一致性,这对于金融、电子商务等对数据准确性要求较高的领域至关重要。
与之相比,键值对数据库在处理大量数据时效率更高。
它的核心思想是通过键来快速检索值,因此对于需要快速读取和写入大量数据的应用非常适用。
键值对数据库通常具有良好的横向扩展性,可以轻松地通过添加更多的节点来处理更多的负载。
考虑到数据模型的不同,关系型数据库通常更适合处理结构复杂的数据。
例如,当需要处理多个实体之间的关联关系时,关系型数据库可以更好地维护数据一致性。
另一方面,如果数据的关联性较弱,数据结构较为简单,键值对数据库可以提供更高的性能和可扩展性。
关系型数据库以其高度一致的数据模型而闻名,这意味着数据必须按照预定义的结构和类型存储。
这就是为什么关系型数据库通常更适合事务处理应用程序,其中数据和架构是经过精心设计和定义的。
然而,当需要处理半结构化数据(例如日志文件、文本数据)或者需要频繁地更改数据结构时,键值对数据库可能更适合。
此外,关系型数据库通常将数据存储在表格中,这样可以轻松地实现复杂的查询和聚合操作。
键值对数据库则将数据存储为简单的键值对集合,这在某些场景下更直接、更高效。
关系型与非关系型数据库的特点与应用优缺点对比研究与综述

关系型与非关系型数据库的特点与应用优缺点对比研究与综述引言:在当今数字信息时代,数据库扮演着重要的角色,不仅用于存储和管理海量数据,还能为企业提供有效的数据处理和分析工具。
关系型数据库(RDBMS)和非关系型数据库(NoSQL)是最常见的两种数据库类型。
本文将对这两种数据库进行深入探讨,比较他们的特点与应用优缺点,以便读者更好地根据实际需要选择适当的数据库。
一、关系型数据库的特点与应用优缺点对比研究1. 特点:关系型数据库是由关系代数和规范化理论为基础设计得到的数据库,其特点如下:(1)表结构:数据以表的形式储存,表之间通过键值进行关联。
(2)事务支持:保证了数据的一致性和可靠性。
(3)严格的数据一致性: 关系型数据库遵循ACID(原子性、一致性、隔离性、持久性)规则确保数据的一致性。
(4)灵活的查询:可以使用SQL语言进行复杂的查询操作。
(5)存储容量大: 关系型数据库可以处理海量数据的存储需求。
2. 应用优缺点对比:(1)优点:灵活的查询语言:关系型数据库使用结构化查询语言(SQL)进行数据查询,几乎可以处理任何复杂的查询操作。
严格的数据一致性:关系型数据库通过ACID规则保证数据的一致性和完整性。
可靠性和稳定性:关系型数据库经过长期发展,已经成为一种成熟和稳定的技术,具有高可靠性。
各种故障恢复、备份和容灾方案都有较好的支持。
(2)缺点:可扩展性:关系型数据库在面对海量数据时,存在扩展性的瓶颈,往往无法满足大规模数据存取的需求。
高昂的成本:关系型数据库的许可证和硬件成本通常较高,消耗较多的资源。
复杂的数据模型:关系型数据库要求数据建模要符合固定的表结构,对于非规范化数据和复杂的关系不够灵活。
二、非关系型数据库的特点与应用优缺点对比研究1. 特点:非关系型数据库是相对于关系型数据库而言的一种新型数据库模型,其特点如下:(1)非结构化数据存储:与关系型数据库不同,非关系型数据库不要求存在固定的表结构,可以存储半结构化或非结构化数据,并以键值对或文档形式进行存储。
7.3 键值对数据库-1

• 带链表长度计数器:可以通过len成员来获取链表的节点的个数, 复杂度O(1)。
• 多态:链表使用void *指针来保存value,并且可以通过dup,free, match来操控节点的value值,因此,该链表可以保存任意类型的值。10
电数子据科技库大原学理-及张应凤荔用
• redis最基本的类型,string类型是二进制安全的,string可以包 含任何数据。
• String是最常用的一种数据类型,可应用于普通的key/ value 存 储,具有定时持久化、操作日志及 Replication等功能。
• 字符串操作包括set、get、decr、incr、mget等, 获取字符串长 度、append、设置和获取字符串的某一段内容、设置及获取字符串 的某一位(bit)、批量设置一系列字符串的内容等。
的内存开销,发送缓冲队列等也都是用的这个数据结构。
9
数据库系统原理与开发
2. List的特征—链表
电数子据科技库大原学理-及张应凤荔用
• 双端:链表节点都有prev和next指针,获取一个节点前置和后置的 算法复杂度都为O(1)。
• 无环:list的第一个节点(头节点)的prev和最后一个节点(尾节 点)的next都指向NULL。
• 键值数据库一致性表现在针对单个键的操作包括“获取”、“设置 ”、或者“删除”, 保证“一致性”, 也可以用“最终一致性模型 ”实现一致性
2
数据库系统原理与开发
键值数据库的类型
电数子据科技库大原学理-及张应凤荔用
• 根据数据的保存方式, 可分为临时性、永久性和两者兼有三类。 • 临时性键值存储是在内存中保存数据, 可进行非常快速的保存和读
NoSQL-键值数据库介绍

NoSQL-键值数据库介绍键值数据库是⼀类轻量级结合内存处理为主的NoSQL数据库。
为什么说他是轻量级1.他的存储数据结构特别简单,数据库系统本⾝的规模也⽐较⼩2.以内存为主的运⾏处理,⽬的是为了更快的实现对⼤数据的处理键值存储实现:键值数据库的设计原则是以提⾼数据处理速度为第⼀⽬标⼀、键值数据库实现的基本原理键值数据库数据结构最早借鉴了⼀维数组的设计⽅法;键值数据库设计时放宽了对下标和值的限制,所以key具有唯⼀地址的作⽤,也⽤来存在唯⼀内容,对value值存储内容不限制,可以存储字符串、数字、视频、图⽚、⾳频等,但是key--value必须成对出现。
且键下的内容必须具有唯⼀性,⽬的是为建⽴索引及数据查找提供⽅便,但任然起着唯⼀地址的作⽤。
只有数据存储结构和数据,数据得不到永久保存不能称为真正的数据库。
于是通过各种键值数据库系统的各种存储策略,以⼀定时间周期把数据复制到本地硬盘、闪存盘,键值数据库就初步成型了。
但是在⼤数据环境下单机的内存要受容量限制,那么引⼊分布式处理⽅式便成为键值数据库的必然选择也是其基本特征之⼀。
⼆、键值数据库存储的基本要素key(键):起唯⼀索引值的作⽤,确保⼀致键值结构李数据记录的唯⼀性,同时也起信息记录的作⽤,可以采⽤复杂的⾃定义结构,只要保持唯⼀即可注意:键不是越长越好(不要超过1024字节),键的内⽤越多,内存开销越⼤,从⽽降低查询效率,⽽且在⼤数据环境下,给数据查找这类计算带来更⼤的运⾏负担键的内容太短也不好,可读性不⾼在同⼀类数据集合中,键的命名规范最好统⼀value(值):值是对应键相关的数据,通过键来获取,可以存放任何类型的数据,键值数据库的值由⼆进制⼤对象(BLOB)进⾏存储,这意味着任何类型的数据都可以保存,⽆需预先定义数据类型,在关系型数据库中是强制要求预先定义存储数据类型的注意:不同的键值数据库对值会有不同的约束,特别是在值存储的⼤⼩上,不同数据库,甚⾄不同数据库⾥的不同数据集对象的约束是不⼀样的。
键值对数据库综述

键值对数据库综述与典型KV数据库介绍一、键值数据库概述键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据.键值数据库将数据存储为键值对集合,其中键作为唯一标识符。
键和值都可以是从简单对象到复杂复合对象的任何内容。
键值数据库是高度可分区的,并且允许以其他类型的数据库无法实现的规模进行水平扩展.Key—Value 键值对数据模型实际上是一个映射,即key是查找每条数据地址的唯一关键字,value是该数据实际存储的内容。
例如键值对:(“20091234”,“张三”),其key:“20091234”是该数据的唯一入口,而value:“张三”是该数据实际存储的内容。
Key-Value 数据模型典型的是采用哈希函数实现关键字到值的映射,查询时,基于key 的hash值直接定位到数据所在的点,实现快速查询,并支持大数据量和高并发查询。
二、基本原理从API的角度来看,键值数据库是最简单的NoSQL数据库。
客户端可以根据键查询值,设置键所对应的值,或从数据库中删除键。
“值”只是数据库存储的一块数据而已,它并不关心也无需知道其中的内容;应用程序负责理解所存数据的含义。
由于键值数据库总是通过主键访问,所以它们一般性能较高,且易于扩展。
基本上所有的编程语言都带有应用在内存中的键值对存储。
C++STL的映射容器(map container)和Java的HashMap以及Python的字典类型都是键值对存储。
键值对存储通常都有如下接口:-Get(key ):获取之前存储于某标示符“key”之下的一些数据,或者“key”下没有数据时报错。
-Set(key, value ):将“value”存储到存储空间中某标示符“key”下,使得我们可以通过调用相同的“key”来访问它。
如果“key”下已经有了一些数据,旧的数据将被替换。
-Delete( key ): 删除存储在“key"下的数据。
三、基本特性键值数据库具有以下几个特性:-容错性-可扩展性-有效性四、读写方式分析已有key-value 数据库,其读写方式可分为面向磁盘的读写方式和面向内存的读写方式两种。
NoSQL数据库类型简介

NoSQL数据库类型简介近些年来,NoSQL数据库的发展势头很快。
据统计,目前已经产生了50 到150 个NoSQL 数据库系统。
但是,归结起来,可以将典型的NoSQL 划分为4 种类型,分别是键值数据库、列式数据库、文档数据库和图形数据库,如图1 所示。
图1 4 种类型的NoSQL 数据库图2 键值数据库举例1. 键值数据库键值数据库起源于Amazon 开发的Dynamo 系统,可以把它理解为一个分布式的Hashmap,支持SET/GET 元操作。
它使用一个哈希表,表中的Key(键)用来定位Value(值),即存储和检索具体的Value。
数据库不能对Value 进行索引和查询,只能通过Key 进行查询。
Value 可以用来存储任意类型的数据,包括整型、字符型、数组、对象等。
如图2 所示。
键值存储的值也可以是比较复杂的结构,如一个新的键值对封装成的一个对象。
一个完整的分布式键值数据库会将Key 按策略尽量均匀地散列在不同的结点上,其中,一致性哈希函数是比较优雅的散列策略,它可以保证当某个结点挂掉时,只有该结点的数据需要重新散列。
在存在大量写操作的情况下,键值数据库可以比关系数据库有明显的性能优势,这是因为关系型数据库需要建立索引来加速查询,当存在大量写操作时,索引会发生频繁更新,从而会产生高昂的索引维护代价。
键值数据库具有良好的伸缩性,理论上讲可以实现数据量的无限扩容。
键值数据库可以进一步划分为内存键值数据库和持久化键值数据库。
内存键值数据库把数据保存在内存中,如Memcached 和Redis。
持久化键值数据库把数据保存在磁盘中,如BerkeleyDB、Voldmort 和Riak。
键值数据库也有自身的局限性,主要是条件查询。
如果只对部分值进行查询或更新,效率会比较低下。
在使用键值数据库时,应该尽量避免多表关联查询。
此外,键值数据库在发生故障时不支持回滚操作,所以无法支持事务。
大多数键值数据库通常不会关心存入的Value 到底是什么,在它看来,那只是一堆字节而已,所以开发者也无法通过Value 的某些属性来获取整个Value。
redis数据库原理

redis数据库原理Redis(Remote Dictionary Server)是一个开源的高性能键值对存储数据库。
它具有速度快、内存占用少、支持多种数据结构等特点,在实际应用中被广泛使用。
本文将从Redis的基本原理、数据结构、存储方式、持久化机制以及高可用性等方面展开,详细介绍Redis数据库的原理。
Redis的基本原理:Redis是一个基于内存的数据库,数据以键值对的形式存储在内存中,通过使用哈希表等数据结构来提供高效的读写操作。
Redis采用单线程模型,每个请求都会被顺序执行,从而避免了多线程并发操作带来的线程安全问题。
此外,Redis还支持通过主从复制来提高读写性能和数据可用性,并且具备发布订阅功能,可以实现消息的实时传递。
Redis的数据结构:Redis支持多种数据结构,包括字符串、列表、集合、有序集合、哈希表等。
这些数据结构都是基于字节数组实现的,可以存储不同类型的数据。
通过不同数据结构的组合使用,Redis提供了丰富的操作命令,可以对数据结构进行增删改查等操作。
Redis的存储方式:Redis的数据存储是基于键值对的方式。
每个键值对包含一个唯一的键和对应的值,可以通过键来快速访问对应的值。
在内存中,Redis使用哈希表来存储键值对,通过哈希函数将键进行映射,从而实现快速的插入、查找和删除操作。
此外,Redis还支持持久化机制,将数据保存到磁盘上,以防止服务重启后数据的丢失。
Redis的持久化机制:Redis支持两种持久化方式:RDB和AOF。
RDB是指将Redis的内存数据周期性地保存到磁盘上,形成一个快照文件。
通过加载快照文件,可以将数据恢复到服务重启前的状态。
AOF是指将Redis的写操作以追加的方式记录在一个文件中,当服务重启时通过重新执行这些写操作,可以还原数据。
RDB适用于数据量大且数据不太频繁变动的场景,而AOF则适用于数据量小但数据频繁变动的场景。
Redis的高可用性:为了提高Redis的可用性,Redis支持主从复制和哨兵机制。
key-value数据库

写入500万条: tcbtest write test.tcb 5000000 1024 2048 5000000 时间: 4.448秒 速度: 1124101条/秒
TCBDB没有开启xmsiz扩展MMAP内存,写入大量数据时,速度
仍然能够得以保证。
TCBDB B+Tree数据库的优化
Dell R900 system ( 16 cores, 32GB of RAM, FusionIO + RAID10 )
Tokyo Cabinet及Tokyo Tyrant 简介
TC(Tokyo Cabinet )是日本人 平林幹雄 开发的一款
Key-Value 键值数据库,该数据库读写非常快,哈希 模式写入100万条数据只需0.402秒,读取100万条数据 只需0.334秒。 TT(Tokyo Tyrant )是由同一作者开发的 Tokyo Cabinet 数据库网络接口。它拥有自己的协议,并支 持Memcached兼容协议,也可以通过HTTP协议进行 数据交换。哈希数据库读写速度大约在50000次/秒。 TC和TT目前运行在日本最大的SNS网站MIXI,在TCHDB哈希数据库的优化
很多人反应TT/TC插入数据超过一定数量后,性能会大幅度下降? 先对TC做个测试:
写入100万条:tchtest write test.tch 1000000 时间: 0.732秒 速度:1366120条/秒 写入200万条:tchtest write test.tch 2000000 时间: 1.718秒 速度:1164144条/秒
修改参数后,再测试:
写入100万条: tcbtest write test.tcb 1000000 1024 2048 5000000 时间: 0.981秒 速度: 1019367条/秒 写入200万条: tcbtest write test.tcb 2000000 1024 2048 5000000 时间: 1.856秒 速度: 1077586条/秒
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
键值对数据库综述与典型KV数据库介绍一、键值数据库概述键值数据库是一种非关系数据库,它使用简单的键值方法来存储数据。
键值数据库将数据存储为键值对集合,其中键作为唯一标识符。
键和值都可以是从简单对象到复杂复合对象的任何内容。
键值数据库是高度可分区的,并且允许以其他类型的数据库无法实现的规模进行水平扩展。
Key-Value 键值对数据模型实际上是一个映射,即key是查找每条数据地址的唯一关键字,value是该数据实际存储的内容。
例如键值对:(“”,“张三”),其key:“”是该数据的唯一入口,而value:“张三”是该数据实际存储的内容.Key-Value 数据模型典型的是采用哈希函数实现关键字到值的映射,查询时,基于key 的hash值直接定位到数据所在的点,实现快速查询,并支持大数据量和高并发查询。
二、基本原理从API的角度来看,键值数据库是最简单的NoSQL数据库。
客户端可以根据键查询值,设置键所对应的值,或从数据库中删除键。
“值”只是数据库存储的一块数据而已,它并不关心也无需知道其中的内容;应用程序负责理解所存数据的含义。
由于键值数据库总是通过主键访问,所以它们一般性能较高,且易于扩展。
基本上所有的编程语言都带有应用在内存中的键值对存储。
C++STL的映射容器(map container)和Java的HashMap以及Python的字典类型都是键值对存储。
键值对存储通常都有如下接口:-Get( key ): 获取之前存储于某标示符“key”之下的一些数据,或者“key”下没有数据时报错。
-Set( key, value ): 将“value”存储到存储空间中某标示符“key”下,使得我们可以通过调用相同的“key”来访问它。
如果“key”下已经有了一些数据,旧的数据将被替换。
-Delete( key ): 删除存储在“key”下的数据。
三、基本特性键值数据库具有以下几个特性:v1.0 可编辑可修改-容错性-可扩展性-有效性四、读写方式分析已有key-value 数据库,其读写方式可分为面向磁盘的读写方式和面向内存的读写方式两种.后者适合于不要求存储海量的数据但需要对特定的数据进行高速并发访问的场景.采用哪一种读写方式,通常由数据量的大小和对访问速度的要求决定的。
1) 面向磁盘的读写方式通常情况下,NoSQL 系统中都存储着海量的数据,且无法全部维持在内存中,所以一般都采用面向磁盘的读写方式,下图描述了NoSQL 系统中采用的典型的面向磁盘读写的一般过程。
图4-1 面向磁盘的读写过程通常,当写入数据时,数据首先会被写到一个内存结构中,系统返回写入成功.当内存中的数据达到指定大小或存放超过指定时限时,会被批量写入磁盘.当需要读取数据时,首先访问内存结构,如果未命中则需要访问磁盘上的实例化文件.当系统发生意外宕机时,内存结构中的数据将丢失,因此,一般采用日志的方式来帮助进行数据恢复.为了进一步提高写入效率和并发能力,许多系统都采用了Append 的方式,即将修改和删除操作都追加写到文件末尾,而读数据时利用时间戳过滤掉旧信息,返回给用户最新版本的数据.因此,数据库需要进行定期的数据合并,将过期的冗余数据删除。
2)面向内存的读写方式内存数据库将所有数据存放在内存中。
每次访问记录时,无需将数据从磁盘读到内存中,避免了磁盘操作造成的延迟。
在几十年前,由于内存容量的限制,在数据库中,内存只能充当磁盘的缓存。
但随着存储技术的迅猛发展,单台机器的内存容量不断增长。
目前,高端的服务器已经能提供几太字节的内存容量。
这使得将所有数据存在内存中成为可能。
磁盘读写操作不再是性能瓶颈后,数据库系统由IO 受限(IO-bound)转向CPU 受限(CPU-bound)。
五、键值数据库的优缺点-KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能-由于需要根据键值查询,所以可以根据时间戳等数据库之外的值来生成键名,所以键值数据库非常适合保存会话(会话ID为主键)、购物车数据、用户配置等信息。
还可以使用expiry_secs属性指定关键字的过期时间,这对会话或购物车对象特别有用。
-这同时表示像SQL那样用WHERE语句或者通过任何形式的过滤来请求数据中的一部分是无法做到的。
如果你不知道去哪找,你必须遍历所有的键,获取它们对应的值,应用某种你需要的过滤,然后保留你想要的东西。
这将会需要大量的运算,也即表示只有当键已知的时候才能体现出最佳性能,否则键值对存储将无法胜任-不像关系型数据库,键值对存储不需要了解值中的数据,也没有像MySQL或者PostgreSQL中那样的任何结构。
它不关心键值对里的值,可以是二进制块、文本、JSON、XML等。
六、典型的键值数据库键值数据库主要可以分为两种:面向内存的key-value存储和面向磁盘的key-value 存储,前者的典型应用是Redis和Memcached,后者是RocksDB和LevelDB。
(一)Redis简介Redis 是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。
它支持多种类型的数据结构,如字符串(strings),散列(hashes),列表(lists),集合(sets),有序集合(sorted sets)与范围查询, bitmaps, hyperloglogs 和地理空间(geospatial)索引半径查询。
目前由VMware主持开发工作。
它具有以下几个特点:-使用C/C++编写,运行异常快-有硬盘存储支持的内存数据库,-Master-slave复制-支持多种类型的数据结构-支持事务-支持将数据设置成过期数据(类似快速缓冲区设计)-Pub/Sub允许用户实现消息机制注:但自版本以后可以将数据交换到硬盘(注意,以后版本不支持该特性!)Redis具有以下几点优势:1)非常丰富的数据结构;2.)Redis提供了事务的功能,可以保证一串命令的原子性,中间不会被任何操作打断;3.)数据存在内存中,读写非常的高速,可以达到10w/s的频率。
当然,Redis 也有一些缺点:1)后才出来官方的集群方案,但仍存在一些架构上的问题;2.)持久化功能体验不佳——通过快照方法实现的话,需要每隔一段时间将整个数据库的数据写到磁盘上,代价非常高;而aof方法只追踪变化的数据,类似于mysql的binlog 方法,但追加log可能过大,同时所有操作均要重新执行一遍,恢复速度慢;3)由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。
虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。
如果内存增长过快,需要定期删除数据。
Redis 并不是能应付所有的应用场景,它适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序,例如:微博、数据分析、实时数据搜集、实时通讯等。
v1.0 可编辑可修改(二)Memcached简介Memcached是一个自由开源的,高性能,分布式内存对象缓存系统。
Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fitzpatric为首开发的一款软件。
现在已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重要因素。
它是一种基于内存的key-value存储,用来存储小块的任意数据(字符串、对象)。
这些数据可以是数据库调用、API调用或者是页面渲染的结果。
Memcached简洁而强大。
它的简洁设计便于快速开发,减轻开发难度,解决了大数据量缓存的很多问题。
它的API兼容大部分流行的开发语言。
本质上,它是一个简洁的key-value存储系统。
一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。
图6-1 Memcached的基本原理Memcached作为高速运行的分布式缓存服务器,具有以下的特点。
-协议简单-基于libevent的事件处理-内置内存存储方式-memcached不互相通信的分布式许多语言都实现了连接memcached的客户端,其中以Perl、PHP为主。
仅仅memcached 网站上列出的有:Perl、PHP、Python、Ruby、C#、C/C++、Lua等等。
除此之外,Memcached 用户十分广泛,如LiveJournal、Wikipedia、Flickr、Bebo、Twitter、Typepad、Yellowbot、Youtube、等等。
(三)LevelDB简介LevelDB是google实现后现已开源的高效持久化的KV数据库,对于随机写有着对于随机写有着良好的性能,适用于查询少、写入多的系统。
在billion数量级下LevelDBLevelDB 仍保持着高速的响应,这主要由于它采用了LSM算法,对索引变更先延时暂时保存,达到一定程度在统一处理,在通过合并更新至硬盘,减少系统的开销。
LevelDB 具有以下特点:(1) LevelDB 将大部分数据存储在磁盘上,减轻内存负担提高响应速度;(2) 插入记录时键值默认按照字典顺序存储,也可自定义排函数;(3) 提供了基本操作接口,可以批量也单独执行,可移植性好;(4) 自动使用 Snappy 压缩数据,全景的 snapshot( 快照 )使读写分离,保持数据在读操作时的一致性。
(四)RocksDB简介RocksDB 是一个来自 facebook 的可嵌入式的支持持久化的 key-value 存储系统,也可作为 C/S 模式下的存储数据库,但主要目的还是嵌入式。
RocksDB 基于 LevelDB 构建,因此实际上是LevelDB的优化。
下面是RocksDB 对LevelDB的优化:1) 增加了column family,这样有利于多个不相关的数据集存储在同一个db中,因为不同column family的数据是存储在不同的sst和memtable中,所以一定程度上起到了隔离的作用。
2) 采用了多线程同时进行compaction的方法,优化了compact的速度。
3) 增加了merge operator,优化了modify的效率。
4) 将flush和compaction分开不同的线程池,能有效的加快flush,防止stall。
5) 增加了对write ahead log(WAL)的特殊管理机制,这样就能方便管理WAL文件,因为WAL是binlog文件。