内存数据库选型之 Redis 与VoltActiveData比较

本文对比了Redis和VoltActiveData两种内存数据库在Client接入、数据同步、事务支持、SQL标准化、热部署和双写一致性等方面的特性。Redis通过proxy接入,支持单节点事务,而VoltActiveData透明接入,支持ACID事务。Redis不支持SQL,VOLT使用标准SQL。Redis在版本迭代和双写一致性上需要业务层实现,VOLT则提供了内置解决方案。
摘要由CSDN通过智能技术生成

  依靠内存来存储数据的数据库管理系统,也称为内存数据库,成为解决高并发、低时延数据管理需求的技术路线。近年来,随着动态随机存储 器  (DRAM)  容量的上升和单位价格的下降,使大量数据在内存中的存储和处理成为可能,越来越多的内存数据库管理软件  (IMDB)  逐渐成熟。​

​  在金融、通信行业的业务场景中,内存数据库的运用越来越深入,不断有新的业务需求、性能要求被提上日程。面对丰富的IMDB产品,如何在 明确业务需求的基础上选择更适合自己的IMDB产品? 这里我们选择业界普遍使用的Redis与VoltActiveData(以下简称VOLT)做一个多方位的比较,希望能帮助大家更加了解不同IMDB产品的特性和差异点,能根据自己的业务特征做好技术方案选型。​


​ · Client接入DB集群方式比较  ​

​Redis​

常用方案如通过proxy来寻址分片,集群 扩缩容对业务层不透明。

​VOLT​

透明接入任意node,系统内部派发分 片事务。


​· 与源数据库的数据同步 ​

​> 导入​

​Mysql同步数据到Redis​

通过JedisCluster优化 - 管道(pipeline)模式导入,数据量大的情况下会造成内存溢出的情况,超百万数据要分批次执行。

​Mysql同步数据到VOLT​

执行连接mysql脚本可直接同步数据至VOLT。

​> 导出​

​Redis同步数据到Mysql​

通过异步队列方式将数据同步至MySQL:

​VOLT同步数据到Mysql​

执行连接mysql脚本可直接同步数据至VOLT:

​​Step1​​ 在VOLT中创建流:

​​Step2​​ 在存储过程中调用流:


​ · 事务支持   ​

​Redis事务​

Redis只支持单节点事务,集群模式下需要redis+lua脚本配合使用,  lua一般采用c/c++来编 写。

​VOLT事务​

VOLT 是一个完全符合 ACID 的关系型数据库,它使应用程序开发人员不必在自己的应用 程序中开发代码来执行事务和管理回滚。


​ · SQL标准化​

​Redis实现​

Redis属于NoSql系列的数据库,它的存储结构是Key-Value,它并不像关系数据库那样提供 任何的SQL,像排序、聚合函数、  sql语句无法通过sql查询实现。

例:  实现排序

只能通过有序集合(sorted set)组合score+时间的方法组合实现

​VOLT实现​

​VOLT使用标准SQL,包括 CREATE INDEX,CREATE TABLE,

CREATE VIEW ,SELECT, INSERT, UPDATE, DELETE操作等。学习成本和代码迁移成本很低,代码复用程度高,已经使用SQL 实现的应用,可以相对容易的迁移到VOLT。  

同时VOLT还支持用户自定义函数,通过  Java编写并导入数据库,   用户自定义函数能在SQL语句中使用。

例:  实现排序


​ · 热部署 ​

​Redis实现版本迭代​

在项目中编写代码实现功能,版本迭代需要重新部署服务器。

VOLT实现版本迭代​

VOLT通过编写存储过程实现,无需重启应用服务器,重新编译存储过程即可,  保证程序 的稳定性。

程序中只需调用存储过程:


​ · 双写一致性(数据库和缓存的同步)​

​Redis​

业务层需要实现机制来保证缓存和数据库的一致。这意味着:

  1. 开发者需要实现写缓存、写DB这两套接口
  2. 需要实现缓存miss处理机制
  3. 需要实现双写,保证数据库和缓存的一致性
  4. 键值的timeout设置维护​

​VOLT​

VOLT本身就是RDBMS,或者VOLT可以通过简单配置完成到源数据库的同步。

(可参见上文“VOLT同步数据到Mysql”)


Redis​

需要业务层加入实现机制才能保证不读到脏、过期数据。

比如“选择性读主”方案的实现流程为:

​VOLT​

DB内部机制保证,对业务层透明。

开箱即用,不需要运维人员选择主从读取方式。


​ · 业务场景实现比较​

​> 对象具有多属性的场景​

​Redis​

单对象多属性的业务场景非常基本。使用 redis存储多属性的情况下,需要业务层  开发两层转换(如使用Hash存储,需要  首先按照对象key查询得到dict,然后按  属性名查询到value)

​VOLT​

在一行内解决多属性的读写。

​> 多类型的对象属性关联查询的场景​

​Redis​

需要业务实现对象的属性解析,  并根据业

务需要完成比较匹配、组合属性等。

​VOLT​

有RDBMS的优势,使用SQL完成关联

查询,解放开发人员。

​> 键值自增自减原子操作​

​Redis​

用于分布式应用系统的共享计数器,非常 高效。

​VOLT​

使用表列作为计数器,能保证原子操 作并同样高效。


​总结​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值