Aerospike简介
- Aerospike是什么?
Aerospike(以下简称AS)是一个以分布式为核心基础,可基于行随机存取内存中索引、数据或SSD存储中数据的数据库。它主要用于百G、数T等大数据量并且在数万以上高并发情况下,对性能也有ms读取插入要求的场景。目前主要集中于互联网广告行业,如eXelate、BlueKai、MediaV、 InMobi、 applovin等。 -
特性
-
可预见的高性能
99% 的响应可在 1 毫秒内实现,99.9% 的响应可在 5 毫秒内实现。
-
混合架构
索引存储在 RAM 中,而数据存储在闪存/固态硬盘 (SSD) 上。
-
群集感知客户端软件
客户端知晓数据的存放位置,因此通常能够通过一次单跳检索到数据
-
无热点
使用复杂的哈希函数来确保数据均等地分布到所有可用节点,从而将需求平均分布到各资源上。
-
数据完整性
保持了高度的一致性,或者允许对跨越多个群集和数据中心的一致性进行调节。
-
线性扩展
能够根据需要安装到多个数据中心内分组为多个群集的多个节点上。添加节点,无需分片,无需人工干预
-
跨数据中心支持
不同数据中心内的群集能够自动协调,从而实现绝对的可靠性
-
提供API的语言
AS支持多种语言,诸如C/C++、 Java、 C#、 Python、 PHP、 Go、 Node.js、 Ruby、 Erlang、 libevent2 (C)、 Perl等等。
-
基本概念
-
namespace
策略容器,类似RDBMS中的schema,可以设置副本数、内存大小、有效时长、存储引擎、文件存储位置
-
Sets
类似RDBMS中的表
-
Records
类似RDBMS中的行,行级的失效时间(TTL)
-
Bin
类似RDBMS中的列,一行可以有多个bins
KEY操作命令
AS 数据类型
-
基础类型
-
Integer
64位有符号整型,[ −(2^63) to 2^63 − 1 ]
每个整型占用8字节存储
-
String
- String是以NULL-结尾的byte数组,可以达到128KB
-
Bytes
- Byte数组,可以存储任何二进制数据
-
-
复合类型
- List
- 排序的数据集合
- Map
- key-value对集合
- List和Map都支持类型嵌套
- List
- 大数据类型
- 说明
- 超过普通bin大小1M的限制
- 大数据类型允许在一个record bin中有一个非常大并且可以在AS中高效存储和访问的元素集合
- 存储的元素可以是Integer/String/Map/List
- Large Ordered List
- 按key排序的集合
- 提供的操作有
- add()/add_all()/update()/update_all()
- find()/exists()
- scan()/filter() (with and without filter)
- range() (with and without filter)
- remove()/remove_all()/remove_range()
- size()
- 说明
函数
- 仅支持用LUA写,在server端执行
- Record UDF
- 单记录操作
- Stream UDF
- 对分布于集群上的数据集进行过滤、转换、汇总
Secondary Index和汇总
- Secondary index
- 支持integer\string类型
- 支持等于和范围过滤
- 每个namespace支持256个secondary indexes
- 汇总
- 通过lua的类mapReduce实现
AS简单测试
对AS进行了grpc封装,下面的测试结果是只选了其中的一种查询进行测试。测试的查询相当于数据库里的查询:select t.cnname,t.code_id from data_type t where t.group_name=’EVENT’ and t.enname=’connect_success’;
测试环境:
116做RPC服务器,118做AS server、RPC客户端
116 CPU 24核, 118 CPU 32核
都是万兆网
- as with grpc
- as with thrift
-
As VS redis with thrift性能测试
- AS
次数=1000000 并发=300 tps=57793 #瓶颈在server的CPU, 使用率710%
次数=1000000 并发=500 tps=58036 -
Redis
次数=100000 并发=300 tps=28413
次数=100000 并发=500 tps=30370 #瓶颈在redis CPU
- AS
AS vs Redis
-
AS优势
数据可存储于内存、SSD
同步复制,无需手工配置,可做机架感知、跨数据中心复制,不会丢失数据
机群自动扩展,自动平衡数据
客户端感知集群,app不需要知道集群节点
二级索引、汇总
概念、处理方式与RDBMS接近
-
Redis优势
多种数据结构
完善的文档,广泛的使用
丰富的客户端
结构简单
PS:
1、在做as\redis性能测试时,在并发量不大时redis性能只到as的一半,而且并发量一大redis就经常出错,故没有两者的性能测试对比
2、as对结构的支持不好,一个稍复杂的功能在redis很简单就能实现的,在AS上就得写好多,而且有并发冲突的风险,除非稍复杂的都用LUA脚本写成函数
参考资料
Redis官网 http://redis.io/
Redis命令参考 http://redis.readthedocs.org/en/latest/index.html
AS官网 http://www.aerospike.com/
AS官网文档 http://www.aerospike.com/docs/