Aerospike技术结构

#系统概述 Aerospike是一个分布式,可扩展的NoSQL数据库。Aerospike由三层组成:客户端层,分布层,数据存储层。 ##客户端层 客户端层采用“智能客户端”理念,目前已经支持大部分语言,并且开源,包括如下功能:

  • 实现Aerospike API,现实client-server协议,直接与集群连接。
  • 追踪集群节点,知道数据存储在哪个节点上。当集群配置改变或节点增加删除,客户端能立即*知道。
  • 现实自己的连接池,发现节点错误并重新发送请求到数据备份的节点。
  • 直接发送请求到数据所在的节点,如果有需要可以重试或重新路由请求。 ##分布层 分布层能自动备份,同步数据,Aerospike是不存在中心Master节点的。包括一下三个模块:
  • 集群管理模块。主要基于Paxos算法实现,通过投票判断某个节点是不是当前集群里的节点。通过心跳机制来监视集群内节点的连接。
  • 当增加删除节点,集群中的节点被确定,每个节点利用分布式哈希算法,根据记录的主键把记录划分到"数据分片"里面。数据迁移模块平衡每个节点中的数据,确保每条数据被备份,而且可以配置备份的数量。
  • 事物处理模块负责请求读写,提供很多一致性和隔离性的保证。这个模块有如下责任:
  1. 同步/异步备份:写数据时,数据的变化会被发送到所以节点,所有节点改变后才提交数据并返回给客户端。
  2. 代理:当集群被重新配置,客户端可能短暂的失去数据,没有数据的节点可以透明的把数据发送到另一个节点。
  3. 副本解决方案:当一个集群从一个分片恢复事,副本解决方案可以可以解决不同拷贝之间的冲突。解决冲突可以被配置为"修改次数"或“过期时间” 当有了一个集群,你可以安装一个额外的数据中心,然后设置数据中心备份-这确保你的数据中心挂了后,另外一个可以不被代断或最小影响的重新服务。 ##数据存储层 Aerospike采用Key-Value对存储。数据被放到namespace里面,namespace相当于关系型数据库的database。在namespace里面,数据被划分到sets和records里面,sets相当于关系型数据库的table,records相当于table里面的行。每条记录有一个索引叫key,这是记录的唯一标示,还有一个或多个的bins(相当于数据库table里的列),bins里面存放数据值。
  • sets和bins不需要事先定义,可以在插入数据时自动添加。
  • values是强类型的,bins本身没有类型,所以不同records里,相同bin里面,values类型可以不同。 索引(主键和第二keys)被存储在内存中,values可以被存在内存或省钱的SSD中。每个namespace可以被单独配置,所以小数据可以放在内存中,大数据可以放在SSD中。
  • 一亿的keys仅仅花费6.4GB。虽然key的大小没有限制,但是有效的只有64bytes。
  • 采用低级别的接口读写SSD,从而绕开文件系统,以或得更高的性能。
  • 内部的智能碎片处理和过期记录删除进程确保有足够的内存空间。碎片处理程序跟踪没一跨里的活跃记录,回收最少使用的。
  • 删除程序移除过期的记录,回收内存。每个namespace可以配置记录过期时间,每个记录的年纪从最后一次修改开始及时,应用程序可以重写默认的过期时间,标志一个记录永远不被删除。 #数据管理 数据管理包括:
  • key-value操作,数据库内部操作,比如increment
  • 数据备份
  • 基于每行记录的超时删除策略
  • 无缝更新和改变集群大小
  • SSD优惠
  • 夸数据中心拷贝 Aerospike可以被扩展:
  • 复杂数据类型(list and map,可以嵌套)
  • 查询 string和integer可以被索引,数据在string和integer上安装范围搜索
  • 用户自动义函数
  • 聚合(aggregations) 数据集可以被用户自动有函数操作,然后返回聚合的数据。
  • 大数据类型,bins可以是大数据(1MB ~ 1GB)stack,list,或map,这些可以被优化存储。 ##主键 Primary Index Aerospike的主键依靠一个可靠的hash函数,把key分配到分片里(partitions),然后每个分片又被分布到节点上。 主键被hash为20byte(有的地方把这个hash值称为digest) ###主键Metadata 每个主键实体需要64bytes,和digest一块存储的还有:
  • 写次数,用来解决更新冲突
  • 过期时间
  • 存储地址,数据在内存和硬盘地址 ###Index持久 主键不会被存储到硬盘,只会在内存中。当重新启动aerospike,aerospike会扫描所以数据,然后建立索引。 ####快速重启 主键被拷贝到共享内存里面,当服务器重启时,带上这部分贡献内存。从而避免扫描数据。 ###单个bin integer类型优化 当namespace的 'single bin'配置被启用,如果bin是integer类型,那么key的存储地址会被重用来存储这个integer。 ###额外的索引 当在某个bin上建立索引时,更新该bin时会自动更新对应的索引。 索引只能建立在类型为string和integer的bin上。如果你有一个bins,里面的值类型既有string,又有integer,当你建立的index为string类型时会排除integer类型,相反的,建立integer类型的index,会排除string类型的。 特性: -存储在内存中 -建立在每个节点上,和主键搭配 -每个index只包含到本地节点记录的引用

转载于:https://my.oschina.net/chzhuo/blog/476282

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值