Key-Value Database调研之Riak篇

Riak是一个NoSQL数据库,采用了key-value的存储模式,主要Erlang语言实现,可分步可扩展。它将数据组织成Buckets、Keys、Values几个层次,其中Values(或者Objects)由唯一的主键来标识,而每个key/value对都存储在一个bucket里面。在本质上,Bucket在Riak里就是一个命名空间,它允许相同的主键名称存在于多个桶中,除此之外对于每个桶都可以进行各种不同参数的设置。Buckets和Keys是Riak中组织数据的唯一方式,这些数据通过bucke/key对来存储和引用。下面就从Riak的存储系统、集群、数据备份以及API等方面进行简单的介绍。
一、Riak的存储系统。
            Riak使用API和它的存储系统进行交互,而这些API允许Riak支持多不不同的后端(backend),这些后端可以根据需要添加到系统上去。Riak现在使用的后端包括Bitcask、dets、ets,Erlang's balanced trees以及直接写到文件系统,与此同时Riak也支持为每个bucket指定一种后端。在当前的版本中,Bitcask是Riak的默认后端。
二、Riak的集群。
            任何一个Riak的集群都是一个160位整型空间,这个空间被分成相同大小的分区。物理服务器在集群中被称为节点(node),在节点上运行着一定数目的虚拟节点(vnode),每个vnode在环上都会有一个分区。在任何时候,一个集群中活跃的vnode的数目都由物理节点的数目决定。作为一条规则,集群中每个node负责环中的1/(物理节点的个数)部分。你可以通过(分区的数目)/(节点的数目)来决定每个节点上虚拟节点的数目。例如一个环有32个分区,四个物理节点,则每个节点有8个虚拟节点。
Key-Value <wbr>Database调研之Riak篇
          根据CAP理论,Riak主要关注与A和P,这使得Riak也只能最终倒向了eventually consistent阵营,但是这里最终一致的窗口以millisecond计,所以足以满足大多数应用。在Riak的集群中所有节点都是一样的,每个节点都能够为任何请求服务,通过使用一直的哈希方法数据是被均匀地分布到整个集群中的。
三、Riak的数据备份。
          Riak通过设定一个称为“N value”的参数来控制维护多少个数据备份。每个节点都有一个这样的参数值,但可以被每个桶上的N value覆盖。Riak对象会从它们的父亲桶那里继承N value,相同集群中的所有节点都必须使用相同的N value。例如,当n_val=3时,存储一个数据到桶中时,这份数据就会备份到Riak环的三个分区上去。
Key-Value <wbr>Database调研之Riak篇
四、Riak的主要操作及API。
            Riak的主要操作包括Reading Data,Writing and Updating Data,Querying and MapReduce等,涉及API就是Riak的REST API,下面介绍一下这些API中的主要操作。
1、Bucket operations
        1)Read bucket information读取桶的属性以及主键
                    GET /riak/bucket 这个操作的选项包括props = [true | false] 指定是否返回桶属性,默认为true;keys   
                    = [true | false | stream]指定是否返回桶中存储的主键。
        2)Set bucket properties 设定桶属性
                    PUT /riak/bucket 选项有n_val、allow_mult、last_write_wins、precommit、postcommit等等。
2、Object/Key operations
        1)Read Object从桶中读取一个对象
                    GET /riak/bucket/key
        2)Store a new object without a key使用Riak随机赋值的主键来存储一个新对象
                    POST /riak/bucket
        3)Store a new or existing object with a key使用一个已知或用户定义的主键存储一个对象
                    PUT /riak/bucket/key
        4)Delete object从桶中删除一个对象
                    Delete /riak/bucket/key
3、Query operations
        1)Link-walking通过对象上的链接从由桶和主键指定的第一个对象开始找到并返回所有指定范围内的对象
                    GET /riak/bucket/key/[link specs+]
        2)MapReduce这是一种更加普遍的方法,通过制定输入构建一个map集合,然后通过reduce、link最终
        生成结果数据
                    POST /mapred
4、其他操作
    1)Ping检查服务器是否可用
          GET /ping
    2)Server status报告Riak节点的性能和配置
         GET /stats
注:参考资料来自此网站http://wiki.basho.com/display/RIAK/Riak
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值