精选几款主流 NoSQL 数据库的对比 doc资料Word文档下载推荐.docx
《精选几款主流 NoSQL 数据库的对比 doc资料Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《精选几款主流 NoSQL 数据库的对比 doc资料Word文档下载推荐.docx(42页珍藏版)》请在冰豆网上搜索。
⑴RDBMS方案:
其中Article表格式:
Author表格式:
⑵等价的HBase方案:
对于前端而言,这里的ColumnKeys和ColumnFamily可以看为这样的关系:
columId1={//id=1的行
article:
{//ColumnFamily-article
title:
XXX,//ColumnFamily-article下的key之一
content:
XXX,
tags:
XXX
},
author:
{//ColumnFamily-author
name:
nickname:
}
2
3
4
5
6
7
8
9
10
11
XXX,//ColumnFamily-article下的key之一content:
1.2性能
HStore存储是HBase存储的核心,它由两部分组成,一部分是MemStore,一部分是StoreFiles。
MemStore是SortedMemoryBuffer,用户写入的数据首先会放入MemStore,当MemStore满了以后会Flush成一个StoreFile(底层实现是HFile,当StoreFile文件数量增长到一定阈值,会触发Compact合并操作,将多个StoreFiles合并成一个StoreFile,合并过程中会进行版本合并和数据删除,因此可以看出HBase其实只有增加数据,所有的更新和删除操作都是在后续的compact过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了HBaseI/O的高性能。
1.3数据版本
Hbase还能直接检索到往昔版本的数据,这意味着我们更新数据时,旧数据并没有即时被清除,而是保留着:
Hbase中通过row+columns所指定的一个存贮单元称为cell。
每个cell都保存着同一份数据的多个版本——版本通过时间戳来索引。
时间戳的类型是64位整型。
时间戳可以由Hbase(在数据写入时自动赋值,此时时间戳是精确到毫秒的当前系统时间。
时间戳也可以由客户显式赋值。
如果应用程序要避免数据版本冲突,就必须自己生成具有唯一性的时间戳。
每个cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。
为了避免数据存在过多版本造成的的管理(包括存贮和索引负担,Hbase提供了两种数据版本回收方式。
一是保存数据的最后n个版本,二是保存最近一段时间内的版本(比如最近七天。
用户可以针对每个列族进行设置。
1.4CAP类别
属于CP类型(了解更多。
2.Node下的使用
HBase的相关操作可参考下表:
在node环境下,可通过node-hbase来实现相关访问和操作,注意该工具包依赖于PHYTHON2.X(3.X不支持和Coffee。
如果是在window系统下还需依赖.NETframwork2.0,64位系统可能无法直接通过安装包安装。
官方示例:
varassert=require('
assert'
;
varhbase=require('
hbase'
.table('
my_table'
//创建一个ColumnFamily
.create('
my_column_family'
function(err,success{
this.row('
my_row'
//定位到指定行
.put('
my_column_family:
my_column'
'
myvalue'
this.get('
function(err,cells{
this.exists(function(err,exists{
assert.ok(exists;
};
1
12
13
14
15
16
varhbase=require('
function(err,success{this.get('
数据检索:
client
node_table'
.scan({
startRow:
'
//起始行
maxVersions:
1//版本
},function(err,rows{
console.log(err,rows;
另有hbase-client也是一个不错的选择,具体API参照其文档。
3.优缺点
优势
1.存储容量大,一个表可以容纳上亿行,上百万列;
2.可通过版本进行检索,能搜到所需的版本数据;
3.负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS和海量数据分析的高性能(MapReduce;
4.在第3点的基础上可有效避免单点故障的发生。
缺点
1.基于Java语言实现及Hadoop架构意味着其API更适用于Java项目;
2.node开发环境下所需依赖项较多、配置麻烦(或不知如何配置,如持久化配置,缺乏文档;
3.占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;
4.API相比其它NoSql的相对笨拙。
适用场景
1.bigtable类型的数据存储;
2.对数据有版本查询需求;
3.应对超大数据量要求扩展简单的需求。
Redis
Redis是一个开源的使用ANSIC语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。
目前由VMware主持开发工作。
Redis通常被称为数据结构服务器,因为值(value可以是字符串(String,哈希
(Hash/Map,列表(list,集合(sets和有序集合(sortedsets五种类型,操作非常方便。
比如,如果你在做好友系统,查看自己的好友关系,如果采用其他的key-value系统,则必须把对应的好友拼接成字符串,然后在提取好友时,再把value进行解析,而redis
则相对简单,直接支持list的存储(采用双向链表或者压缩链表的存储方式。
我们来看下这五种数据类型。
⑴String
string是Redis最基本的类型,你可以理解成与Memcached一模一样的类型,一个key对应一个value。
string类型是二进制安全的。
意思是Redis的string可以包含任何数据。
比如
jpg图片或者序列化的对象。
string类型是Redis最基本的数据类型,一个键最大能存储512MB。
实例:
OK
"
zfpx"
在以上实例中我们使用了Redis的SET和GET命令。
键为name,对应的值为”zfpx”。
注意:
一个键最大能存储512MB。
⑵Hash
Redishash是一个键值对集合。
Redishash是一个string类型的field和value的映射表,hash特别适合用于
存储对象。
1"
username"
2"
3"
password"
4"
123"
以上实例中hash数据类型存储了包含用户脚本信息的用户对象。
实例中我们使用了RedisHMSET,HGETALL命令,user:
1为键值。
每个hash可以存储232–1键值对(40多亿。
⑶List
Redis列表是简单的字符串列表,按照插入顺序排序。
你可以添加一个元素导列表的头部(左边或者尾部(右边。
(integer1
(integer2
(integer3
zfpx3"
zfpx2"
zfpx1"
列表最多可存储232–1元素(4294967295,每个列表可存储40多亿