Aerospike-内存和硬盘混合存储的kv数据库
2023-09-27 14:24:38 时间
为什么会有Aerospike?
Redis是一个纯内存型数据库,性能上没有多大问题。 但这又带来一个新问题,内存是很贵的,所以全内存的存储成本非常昂贵。为了节省成本,我们需要把一部分不经常用到的数据存储到硬盘上,
但是又要求性能不能下降很多,这时候 Aerospike 数据库应运而生,它可以是内存 + SSD 存储。
Aerospike 官网:http://www.aerospike.com/
github地址:https://github.com/aerospike
Redis与Aerospike一些对比
redis
|
Aerospike
|
|
运维
|
运维成本较高,扩容麻烦
|
部署和扩容都比较容易
|
性能
|
读写性能高
|
读性能高,写性能中高
|
使用成本
|
纯内存数据库,成本高
|
内存+ssd,成功较低
|
其他方面
|
内存浪费严重。 数据结构丰富,应用场景广泛
|
支持二级索引,满足常见需求。支持聚合
|
排序
|
支持排序
|
不支持排序
|
集群管理
|
简单集群管理
|
相当强大,多个平等的结点,平摊存储所有数据,并且互相备份。集群结点的失效及添加完全自动化处理,不影响用户请求
|
事务
|
支持简单事务
|
支持行事务
|
Aerospike支持的数据类型:
Aerospike supports numerous data types used for bin values, as arguments, and as UDF return values. Supported values are:
- integer
- string
- bytes
- double
- list
- map
- GeoJSON
- native-language serialized (blobs)
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架构一览:https://www.aerospike.com/docs/architecture/index.html
相关文章
- 【FFMPEG】从内存中获取H264数据并进行decode
- 第九章:自动内存管理
- 深入浅出 Java 中 JVM 内存管理
- JS 哪些操作会造成内存泄露,对应的解决方法
- android 建数据库 SQLite 存储sd 卡或者内存
- 深入Java核心 Java内存分配原理精讲
- Java基础——JVM内存结构
- JVM内存管理学习总结(一)
- Linuxc - 操作系统内存分配
- 使用ffmpeg解码 需要注意的内存泄漏问题
- JVM之对象创建流程及对象内存布局
- 阿里云内存数据库Tair新一代集群无感数据迁移
- 第30课:彻底解密Spark 2.1.X中Shuffle中JVM内存使用及配置内幕详情
- 指针知识梳理5-字符串与指针,程序内存总结
- Spring使用内存数据库
- Oracle数据库内存使用情况分析查看
- SpringBoot集成内存数据库Sqlite
- Mongodb内存数据库
- C#利用Linq从内存集合中获取数据后在ListBox与DataGridView中实现异步刷新区别(减少对数据库的访问次数)
- 启动期间的内存管理之引导分配器bootmem--Linux内存管理(十)
- [linux]测硬盘读写速度、内存读写速度