Aerospike-介绍

近期在做实时指标平台,我们的实时指标数据是存储在aerospike上的。下面就介绍下它的特性

aerospike总体来说是一个基于内存的并且具有高度可靠性的分布式计算系统

架构

客户端层

这一层包括带有AerospikeAPI的开源客户端库和能够感知数据在Aerospike集群中位置的追踪节点。

集群和数据分布层

这一层监控集群通讯并提供一些自动化功能,比如故障转移、数据复制和跨数据中心同步。

数据存储层

这一层负责在DRAM(动态随机存取存储器)和Flash(闪存)中存储数据。

数据模型

Namespaces

类似于database

Sets

类似于RDBMS的table。

Records

key

  • 唯一标识. 根据key的hash查询Records
  • key的类型:Integers, String, and bytes
  • 内部会hash成一个 160-bit(20-bytes) 的digest

metadata

  • generation,类似version
  • time-to-live (TTL)
  • last-update-time (LUT)

bins

  • 类型于RDBMS的列
  • 数据类型
    • integer: 8 bytes
    • string: 128 KB;
    • bytes
    • double: 8 bytes
    • CDTs (Complex Data Types)
      • list
      • map
    • GeoJSON (3.7.0+)
    • native-languages serialized(blobs)

特点

  1. 数据存放
    数据可以放内存,也可以放SSD。
    数据放内存时速度肯定会很快,但这和memcache一样,相比memcache性能并没有优势
    数据也可以放SSD,并做了特定优化,相比mysql会更快,但数据操作模型过于简单,可使用场景很少。也比mongo性能更好,但其要求SSD存储,这样容量较小,费用也较高,这时mongo是好选择

  2. 数据操作模型
    支持 按主键及二级索引筛选数据
    支持 聚合 (强大,一个卖点)
    不支持排序(通过聚合功能的lua脚本也可能可以实现,但并不现实)
    虽然支持类SQL语法操作,但可进行的操作非常简单,好于memcache, 稍好于mongo,比redis差些,跟mysql完全没法比,但其聚合功能还比较强大。

  3. 集群管理
    相当强大,多个平等的结点,平摊存储所有数据,并且互相备份。集群结点的失效及添加完全自动化处理,不影响用户请求。
    相比memcache,这是它强大的地方,也不会弱于其它nosql的集群管理。

  4. 聚合功能
    这里聚合的概念等同于mysql中的聚合。可以通过编写lua脚本,实现对数据的聚合,此时aerospike可以看作一个分布式的基于内存的map-reduce计算平台,相比普通的hadoop map-reduce,速度是很快的,当然,可处理的数据量相对较少。

  5. 事务
    支持行事务

坑点

  • 只支持batch read,不支持batch writes
  • 记录大小有限制: <= 1M => 有点小,不过对于我们的场景基本没问题
  • bin name长度: <= 14 Chars => 一般来说单字段不会超过,嵌套属性如果拼接就很容易超长
  • 没有内建的聚合函数(Aggregations: count, max, min, sum, group by, etc.),通过UDFs可以支持(queryAggregate),但是使用方式不友好,效率也不高
  • namespace 下的sets限制1024,二级索引限制256,唯一binname限制32K,一个namespace下最多4 billion记录
  • 范围查询只支持BETWEEN语句,没有小于,大于查询,并且RANGE结果只支持包含
  • 范围查询只支持整数类型,不支持浮点数
  • Query不支持分页(no cursor or pagination..)
  • Query不支持排序(no order by..)
  • 不支持动态创建namespace,只能通过修改配置文件、重启服务器
  • 只有清空set数据接口,但是并没有真正drop掉sets(会留下empty set,然后一个namespace下只有有1024个sets..)

为什么选用aerospike

与redis相比

  • redis单线程处理
  • redis集群部署比较复杂
  • redis有严重的磁盘碎片问题
  • 节点扩展不方便

与memcache相比

  • memcache不支持持久化
  • memcache只支持string类型数据
  • 不支持事务
  • memcache集群管理差

适用场景

  1. 替换memcache做缓存
    这是由于它有强大的集群管理功能,对非常重要不能宕机的缓存服务可以采用它,但代价就是需要更多的硬件服务器。

  2. 性能要求很高的实时聚合计算
    aerospike是一个分布式的基于内存的map-reduce服务,速度快。一般来说,原始数据变化较频繁,而对聚合计算实时要求较高的情景可以用它。

安装管理

安装
配置
管理

猜你喜欢

转载自blog.csdn.net/u012092620/article/details/79883598