为什么会有Aerospike?

Redis是一个纯内存型数据库,在基准测试中,机器资源为16C14G的GCE,读TPS能达到133000,写TPS约为130000,性能上没有多大问题。虽然高性能给业务处理带来了好处,但纯内存存储,对硬件资源的要求也很高,企业投入的成本也相应的增加。在硬件中,内存的价格远比磁盘贵,而且内存量越大越贵,因此,全内存的存储成本非常昂贵。为了节省成本,我们需要把一部分不经常用到的数据存储到硬盘上,但是又要求性能不能下降很多,这时候 Aerospike 数据库应运而生,它可以是内存+SSD(或者NVMePMEM)存储。

Redis与Aerospike一些对比

Redis Aerospike
运维 运维成本较高,扩容麻烦 部署和扩容都比较容易
性能 读写性能高 读性能高,写性能中高
成本 纯内存数据库,成本高 内存+ssd,成功较低
排序 支持 不支持
集群 简单集群管理 多个平等的节点,平摊存储所有数据,并互相备份。集群节点的备份和失效完全自动化处理,不影响用户请求。
事务 支持简单的事务 支持行事务

Aerospike优点:

Aerospike是一个高性能、可扩展、可靠性强的NoSQL解决方案,支持RAM和SSD作为存储介质,并专门针对SSD特殊优化,广泛应用于实时竞价等实时计算领域。官方保证99%的操作在1ms内完成,并提供集群数据自动Rebalance、集群感知客户端等功能,且支持超大规模数据集(100T级别)的存储。

作为KV存储,Aerospike提供多种数据类型,其操作方式和Redis比较类似。除基础功能之外,Aerospike还支持AMC控制台、API等多种监控方式,有集群QPS、健康度、负载等多项监控指标,对运维比较友好。支持集群内数据的自动Rebalance,和Redis集群方案相比,维护成本下降不少。

Aerospike缺点:

  • 只支持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要知道的约束条件

操作或对象 说明 描述
Batch Reads 结果中的记录大小限制 每条记录最大 10MB。
Bin 名称、长度和字符 - 最大值:15 个字节。
- Aerospike Server 4.2 之前的版本,最大:14 个单字节字符。
- 双字节字符显示为 ASCII。
- 名称只能包含不字母数字 _-$。
-null为保留字。
Bin 每个命名空间的 bin 数量 - 每个命名空间的最大 bin 名称:65535。
- 5.0 之前的版本,最大值:32767。
Cluster size 节点数 5.0+ 版本,最大:256。5.0 之前的版本到 3.14 版本:128 。对于运行心跳协议 v2 的 3.14 之前的企业版版本,限制由配置参数paxos-max-cluster-size定义。
对于社区版:
- 服务器版本 4.0 及更高版本,最大:8。
- 早于 4.0 的服务器版本,最大:31。
Cluster 数据量 对于社区版,最大:整个集群 5TB,每个节点划分为 640GB 的唯一数据:5TB ÷ 8 每个集群的最大节点数。每个节点的最大 640GB 仅根据节点的可用容量计算,而不是实际容量,并且可以包括必要服务器进程的系统开销。
Devices 每个节点每个命名空间的设备或文件数 - Aerospike 服务器版本 4.2 及更高版本,最大值:128 。
- 4.2 和 3.1.2.1 之间的版本,最大值:64。
- 低于 3.1.2.1 的版本,最大值:32。
Histogram 采样切片之间的间隔 对于 10 秒切片,最大值:86400 秒。
Generation 代数 在 AP 模式下更新 65536 次或在 SC 模式下更新 1024 次后,生成将返回 1。有关此元数据的主要用途之一的详细信息, 请参阅conflict-resolution-policy
Key 数据类型 键的数据类型可以是字符串、整数或字节(blob)。
Key 尺寸 请参阅常见问题解答 - Aeropsike 中记录主键的最大大小是多少
Namespace 名称、长度和字符 - 最大值:31 个字节。
- 双字节字符显示为 ASCII。
- 不得包含:or;字符。
-应避免使用保留字null
Namespace bins的数量 - 每个命名空间的最大 bin 名称:65,535。
- 5.0 之前的版本,最大值:32,767。
- 每个键的最大垃圾箱:32,767 个垃圾箱。
Namespace 命名空间数量 - 企业版,最大:32。
- 社区版服务器版本 4.0 及更高版本,最大:2。
Namespace 每个文件或磁盘的大小 最大:2TiB。
Namespace 贮存 最大值:每个命名空间 128 个设备。
Record 数字 最大值:
- 企业版:每个节点的每个命名空间 549,755,813,888 条记录(2^39 或 32TiB 的 RAM)。2^39 个记录数的值需要 Aerospike Server Enterprise Edition 版本 4.2.0.2 或更高版本,并且index-stage-size设置为 16G。
- 社区版:每个节点每个命名空间有 4,294,967,296 条记录。 实际数量受 RAM 和存储限制:
- 每个记录索引条目占用 64 个字节的索引条目。索引条目仅存储在 RAM 中。键本身不存储在索引中。
- 密钥的哈希(RIPE-MD 160 算法)存储在索引中。这个带有开销的散列正好占用 64 个字节。
Record 箱数 - 每条记录的最大箱数:32,767 个箱。
Record 一条记录只能属于一个集合。
Record 最大记录大小 记录大小是实际数据 + 元数据。摘要可以被认为是元数据,也可以作为元数据显式添加。 - 对于内存中的数据:128MiB。
- 对于存储在设备上的数据:最大记录大小限制为write-block-size的值,对于 Flash 设备,该值通常设置为 128KB。对于服务器 4.2 或更高版本,可以增加到 8 MiB。对于服务器 4.2 之前的版本,最大值:1 MiB。
复制因子 - 在可用和分区容错 (AP) 模式下,复制因子可以大于集群中的节点数。在这种情况下,复制因子会根据节点的数量动态调整。当添加一个新节点时,复制因子会再次动态调整为新的节点数。 - 在强一致性(SC)模式下,复制因子的限制是集群中的节点数。
二级索引 字节大小 如果 bin 的大小在以下范围内,则它有资格进行二级索引:
- String bin ≤ 2048 字节 - GeoJSON bin ≤ 1MB。
二级索引 每个命名空间的索引 最大值:256。
二级索引 名称、长度和字符 - 最大值:255 字节。
- 不得包含:or;字符。
-应避免使用保留字null
Set 名称长度和字符 - 最大值:63 个字节。
- 名称只能包含字母数字_-$。不强制执行此命名准则;但是,如果您不遵循它,某些 Aerospike 功能和工具可能无法正常运行。
-应避免使用保留字null
Set 套数 最大值:每个命名空间 1023 个集合。
XDR 数据中心数量 最大值:64。

Aerospike架构一览:https://www.aerospike.com/docs/architecture/index.html

Aerospike安装地址: https://www.aerospike.com/docs/operations/install/linux/other/index.html

Aerospike配置地址:https://www.aerospike.com/docs/operations/configure/index.html

Aerospike管理地址:https://www.aerospike.com/docs/operations/manage/index.html