浅析Oracle NoSQL Database

数据库 Oracle
本文中,作者对甲骨文最新发布的Oracle NoSQL Database从数据模型、分区与架构、操作、数据一致性等方面进行了分析。

近日Oracle提供了不久前公布的NoSQL数据库的下载,目前只有企业版,开源的社区版还没提供,也就是说还看不到源码。不过根据文档也能大致了解这个NoSQL数据库怎么样。快速看了看,总结如下。

一、数据模型

key包含一到多个major key component和零到多个minor key component,组合起来唯一标准一条记录。key component为Java String,按对应encoding排序。value则是字节流。key和value的大小都没有严格限制。

记录还有版本号,每次更新都产生唯一的新版本号。在put/delete/get操作时,都可以指定要版本号,其中get时用于指定要读的版本,而 put/delete指定版本号是指当记录的最新版本还是指定版本时才更新,用于实现原子Compare-and-Swap语义。版本号应该至少是在一个 partition内部是全局唯一的。

二、分区与架构

两层架构,客户端直接到存储节点。核心架构是Replication Node和Replication Group,一个Replication Group包含一个可写的Master Replication Node和多个只读的replica。master失败时会failover到某replica。现在发布的版本暂时还不能动态调整存储节点个数,以后会加。

数据按major key hash分区到partition。这样拥有相同的major key仅仅minor key不同的多条记录一定在同一partition,可以提供高效的多记录操作,且系统还支持原子性的操作这样的多条记录。一个Replication Group一般负责多个partition,一个存储节点一般负责一个Replication Node,如果调整存储节点个数,则以partition为单位来移动数据。为方便以后scale-out,应该一开始就多一些partition。

系统底层用的是Berkeley DB Java Edition,用Btree数据结构。缓存包含Berkeley DB的缓存和文件系统缓存,不用DIRECT_IO,文档建议Berkeley DB缓存用于容纳Btree的内部节点,叶节点用文件系统缓存。另外也提供单机版称为KVLite。

三、操作

Oracle NoSQL提供的操作比较丰富,主要包括:

1、用于插入或更新记录的put类操作,包括put/putIfAbsent/putIfPresent/putIfVersion,都要指定一个完整的Key。用途顾名思义就不说了,稍提一点是putIfVersion功能提供了Compare-and-Swap,在处理并发时很有用

2、用于删除记录的delete类操作,包括delete/deleteIfVersion/multiDelete。前两者要指定完整Key,用途顾名思义。说一下multiDelete,这个操作最多可以指定三个参数,一是必须指定完整的major key,二是可以指定一个由第一个minor key的上下限构成的KeyRange,三是可以指定是删除子节点/子孙节点/父节点和子节点/父节点和子孙节点等多种Depth模式。

3、用于读取记录的get类操作,包括get/multiGet/multiGetIterator/storeIterator。multiGet和 multiDelete一样可以指定KeyRange和Depth。multiGetIterator用于批量取一个完整major key下的大量记录,防止占内存过多,可以指定遍历方向,不保证数据是某时刻的一致视图。storeIterator用于遍历不完整major key下的大量记录,甚至遍历所有记录。

4、用于批量原子更新多条记录的execute操作。系统保证这批操作的原子性,限制是操作的记录必须都拥有相同的major key,且同一条记录不能操作多次。

四、数据一致性

Oracle NoSQL的数据一致性比较灵活精细。就读取而言,可以指定只从master读、不管replica是否落后都可以从replica读、只在 replica落后master时间在某阈值之内时才能从replica读、只在replica的版本号不小于某指定版本号时才读。指定版本号的读一致性可以用于实现read-your-own-write形式的一致性,即保证自己能读到自己刚写的数据。

就更新而言,可以指定两方面的策略。一是master要不要等各个replica的应答,这里可以选要所有replica应答、要大多数replica应答和不等replica应答等3 种。二是数据要不要持久化到磁盘,这里可以选不要(更新到内存就可以了)、写磁盘但不SYNC、写磁盘且要SYNC等3种。持久化策略可以指定 master和replica分别指定。根据文档看似乎没有用到2PC。

五、系统管理及其它

系统提供命令行或WEB界面的管理工具,管理比较方便。可以创建snapshot,snapshot只在partition内部一致,不保证全局一致。可以从snapshot恢复。提供将NoSQL Database数据导入到Hadoop功能。客户端驱动是jar包。

六、小结与评价

优点:

1、数据模型和操作强大。通过由多个key component来构成key并且设计操作时加以支持,Oracle NoSQL实际上不再是纯平面的Key-Value模型,而经常呈现为一种树形模型。多一个key component后缀的记录可以看作是子节点。系统提供了许多批量操作一个子树的功能,对比关系模式可以看出这解决了一部分JOIN问题,提高了开发效率。

2、数据一致性灵活精细。读取和更新都提供了很多一致性选项,可以实现不同的性能和一致性折衷。此外通过版本号,可以支持Compare-and-Swap、Read-your-own-write等语义,为实现并发正确性提供了便利。

3、支持多记录原子性操作。

当前版本最主要的问题是不能加存储节点,不过相信这个问题不久后会被解决。

原文出处:http://wangyuanzju.blog.163.com/blog/static/130292011919114541710/

【编辑推荐】

  1. Oracle发布NoSQL数据库
  2. 微软进军NoSQL 发布Trinity数据库
  3. 微软研究人员:NoSQL需要标准化
  4. MySQL中的NoSQL插件
  5. SQL与NoSQL——MySQL与NoSQL的融合
责任编辑:艾婧 来源: wangyuanzju的博客
相关推荐

2011-11-21 11:19:19

Oracle NoSQ

2009-07-15 10:43:37

MyEclipse D

2013-05-03 00:41:57

大数据NoSQL

2010-10-21 08:45:19

NoSQL

2010-04-13 17:10:59

Oracle Data

2011-10-09 09:38:03

OracleNoSQL

2010-04-14 14:14:42

Oracle用户解锁

2009-06-09 13:21:32

Oracle Data实现

2013-03-26 10:33:50

SaaSNoSQLOracle

2014-04-09 09:55:46

Oracle NoSQ

2014-06-12 08:48:38

Oracle数据库

2011-08-09 14:54:01

OracleDATABASE LI

2009-07-17 16:49:18

iBATIS XML配

2010-04-16 14:39:54

ORACLE锁

2010-04-16 12:57:20

Spatial数据加密

2011-10-13 16:01:22

F5Oracle DataOracle WebL

2011-11-03 16:57:42

NoSQL

2010-05-07 12:27:11

Oracle data

2010-04-16 16:12:51

jdbc分页

2009-07-22 08:54:32

Oracle恢复管理器
点赞
收藏

51CTO技术栈公众号