NoSQL-键值数据库介绍
键值数据库是一类轻量级结合内存处理为主的NoSQL数据库。
为什么说他是轻量级???
1.他的存储数据结构特别简单,数据库系统本身的规模也比较小
2.以内存为主的运行处理,目的是为了更快的实现对大数据的处理
键值存储实现:
键值数据库的设计原则是以提高数据处理速度为第一目标
一、键值数据库实现的基本原理
键值数据库数据结构最早借鉴了一维数组的设计方法;键值数据库设计时放宽了对下标和值的限制,所以key具有唯一地址的作用,也用来存在唯一内容,对value值存储内容不限制,可以存储字符串、数字、视频、图片、音频等,但是key--value必须成对出现。
且键下的内容必须具有唯一性,目的是为建立索引及数据查找提供方便,但任然起着唯一地址的作用。
只有数据存储结构和数据,数据得不到永久保存不能称为真正的数据库。于是通过各种键值数据库系统的各种存储策略,以一定时间周期把数据复制到本地硬盘、闪存盘,键值数据库就初步成型了。但是在大数据环境下单机的内存要受容量限制,那么引入分布式处理方式便成为键值数据库的必然选择也是其基本特征之一。
二、键值数据库存储的基本要素
key(键):
起唯一索引值的作用,确保一致键值结构李数据记录的唯一性,同时也起信息记录的作用,可以采用复杂的自定义结构,只要保持唯一即可
注意:
键不是越长越好(不要超过1024字节),键的内用越多,内存开销越大,从而降低查询效率,而且在大数据环境下,给数据查找这类计算带来更大的运行负担
键的内容太短也不好,可读性不高
在同一类数据集合中,键的命名规范最好统一
value(值):
值是对应键相关的数据,通过键来获取,可以存放任何类型的数据,键值数据库的值由二进制大对象(BLOB)进行存储,这意味着任何类型的数据都可以保存,无需预先定义数据类型,在关系型数据库中是强制要求预先定义存储数据类型的
注意:
不同的键值数据库对值会有不同的约束,特别是在值存储的大小上,不同数据库,甚至不同数据库里的不同数据集对象的约束是不一样的。例如redis中一个string的值,最大可以存储字节数为512M
键值对(key-value pair):
键和值的组合就构成了键值对,他们之间的关系是一对一
命名空间(namespace):
命名空间是由键值所构成的集合,通常是一类键值对数据构成一个集合。
在键值对的基础上增加命名空间,是为了在内存中访问该数据集时,该数据集具有唯一的名称,类似传统关系型数据库对应的表
PS:
可以把namespace看做是一个最小的键值数据库,当然键值数据库更多指的是多namespace。部分键值数据库也称之为桶,即键值数据库和桶是一个意思
三、基本数据操作方式
NoSQL的键值数据库有了存储结构和数据,就需要考虑对数据的读写删除的操作要求了,由于NoSQL数据库没有SQL概念,他们对数据操作的实现是通过PUT、GET、delete实现的
put命令:
用于写或者更新键值存储里指定地址的值,当指定地址有值时,更新值,没有值时,新增一个值
get命令:
用于读取键值存储里指定地址的值,如果没有值,返回一条错误提示信息
delete命令:
用于删除键值存储指定地址的键和值,如果键值存储里没有该键,就返回一条错误提示信息
键值存储的特点
优点
简单:
数据存储结构只有键和值,并成对出现,值理论上可以存储任意数据,并支持大数据存储,凡是具有类似关系的数据应用,可以考虑键值数据库,如热门网页排行
快速:
以内存为主的设计思路使键值数据库拥有了快速处理数据的优势
高效计算:
数据结构简单化,而且数据集之间关系的简单化(没有传统数据库中多表关联关系),基于内存的数据集计算,为大量用户访问情况下,提供高速计算并响应的应用提供了技术支持
分布式处理:
分布式处理能力使键值数据库具备了处理大数据的能力
缺点
对值进行多值查找功能很弱
键值数据库在设计之初就以键为主要对象进行各种数据操作,包括查找功能,对值直接进行操作的功能很弱
缺少约束,意味着更容易出错
键值数据库不用强制命令预先定义键和值所存储的数据类型,那么在具体业务使用过程中,原则上值里什么数据都可以存放,甚至放错了都不会报错。这在某些应用场景上很致命,例如商品价格,需要程序猿对业务代码进行编程约束,避免潜在问题,由于没有值的类型定义,当有多名程序猿编程的情况下,需要更加重视设计文档的建立,否则可能A把价格当做整型数据,B把价格看做字符串,C把价格看做浮点数,容易引起代码编写混乱,也给后续的软件系统的代码维护代码了麻烦
不容易建立复杂关系
键值数据库的数据集,不能像传统关系型数据库那样建立复杂的横向关系,键值数据库局限于两个数据集之间的有限计算,例如redis数据库里做交、并、补集运算