本文分享自华为云社区《选择KV数据库最重要的是什么?》,作者:GaussDB 数据库 。

经常有客户提到KV数据库,但却偏偏“不要Redis”。比如有个做安全威胁分析平台的客户,他们明确表示自己对可靠性要求非常高,需要的不是开源Redis这种内存缓存库,而是KV数据库。

虽然最后我也没问清楚他们业务存啥(推测是这块业务数据比较机密),但确实业务本身对可靠性要求非常高,开源Redis自身的可靠性无法满足他们的要求,最终该用户选择使用GaussDB(for Redis)数据库,当前数据量已经是2TB规模,一直稳定运行中。

真正的KV数据库,业界有好几项开源的项目,云厂商也纷纷推出自家产品,比如华为云GaussDB(for Redis)。使用方在调研选型KV数据库的时候,由于要存储百GB甚至数十TB级的重要数据,首先关注的是数据库是否稳定可靠,同时懂行的客户一般也会聊到自建开源Redis的“不靠谱”问题,例如:

问题1:自建开源Redis有丢数据和数据不一致的风险

广告竞价和推荐等大数据业务将海量数据存放在KV数据库,开源Redis是将全量数据存在内存中,虽然有RDB和AOF的备份机制,但那只是普通的文本文件,可靠性很低,只能作为兜底手段,关键数据该丢还是会丢。

另外,开源Redis主备节点采用异步复制的机制,故障倒换的时候有可能出现明显的数据不一致,像是分布式锁这类场景就会很尴尬:

问题2:“Cache+DB”的业务架构复杂

电商和游戏等互联网业务采用Redis缓存+持久化数据库的架构,通过缓存加速来提升业务的使用体验,业务需要设计缓存的淘汰机制,还需要解决缓存与持久化数据库之间的数据一致性问题,业务架构复杂。

问题3:开源Redis分片故障不能提供服务,故障场景对业务影响比较大

金融、财经和电商等业务对可靠性要求极高,开源Redis单个数据分片存放在主备两个节点上,如果两个节点都出现故障,则整个分片的数据不可访问,应对极端故障场景的能力不足。

社区开源的项目一般都引入了RocksDB存储引擎(这东西深的很),其实能把上层KV业务变得稳定许多,通过持久化存储介质替代内存的方式来弥补开源Redis的不足。但它们无法完美解决性能、兼容性和扩容的问题,更无法保证数据库的稳定可靠,还需要投入专门的人力进行搭建维护、调优等……最终综合算下来,成本并不低。

云厂商的KV数据库由于进行了技术创新与优化,一般比较给力,以GaussDB(for Redis)为例,下面从以下几个角度解释如何把一款产品做到“靠谱”:

企业级特性1:采用内存+NVMe的存储方案,全量数据三副本持久化存储

GaussDB(for Redis)在存储池中有三副本落盘到NVMe存储池中,宕机不会丢数据,也不会存在主从同步的问题。因此,客户可以直接拿GaussDB(for Redis)当做持久化数据库使用,一库顶多库,业务架构变得简单,也减轻了多套数据库的运维成本。

企业级特性2:采用存算分离的架构,支持3AZ部署和N-1故障的超高可用

GaussDB(for Redis)支持3AZ部署计算节点,均匀分布在3个不同的可用区,如果遇到1个或2个可用区出现网络、制冷、电力等突发故障,剩余可用区的节点能接管故障节点的数据分片,还能继续支撑业务访问全量数据。

同样得益于存算分离的架构,GaussDB(for Redis)将全量数据落盘到分布式存储池,最多支撑N-1故障,哪怕只剩下一个节点正常,也能通过接管所有分片,继续支撑业务运行。

企业级特性3:双活解决方案支持极致稳定可靠,灵活组网

如果遇到大规模网络故障、电力故障、火灾或自然灾害,导致整个数据库实例不可用,甚至整个Region都不可用,GaussDB(for Redis)也在这些极端场景下保证业务的连续性。

GaussDB(for Redis)支持给两个跨region的实例建立双活关系,支持数据的同步,如果其中一个实例故障,另一个实例能接管业务,持续提供可靠的数据库服务。双活解决方案已在华为内部ERP中稳定部署运行,为ERP业务的持续运行提供强有力的保障。

总结

综上所述,GaussDB(for Redis)提供了全量数据三副本持久化存储,支持3AZ部署和N-1故障的超高可用,双活解决方案支持极致稳定可靠,灵活组网,稳定性和可靠性远超开源Redis,是一款真正能让企业核心业务放心上云的KV数据库。

所以,如果你的业务需要一款稳定可靠的KV数据库,可以试试GaussDB(for Redis)。

点击关注,第一时间了解华为云新鲜技术~

选择KV数据库最重要的是什么的更多相关文章

  1. 从零开始山寨Caffe·柒:KV数据库

    你说你会关系数据库?你说你会Hadoop? 忘掉它们吧,我们既不需要网络支持,也不需要复杂关系模式,只要读写够快就行.    ——论数据存储的本质 浅析数据库技术 内存数据库——STL的map容器 关 ...

  2. 【万字长文】使用 LSM Tree 思想实现一个 KV 数据库

    目录 设计思路 何为 LSM-Treee 参考资料 整体结构 内存表 WAL SSTable 的结构 SSTable 元素和索引的结构 SSTable Tree 内存中的 SSTable 数据查找过程 ...

  3. asp.net编译中出现 数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.mdf' 已存在。请选择其他数据库名称。

    关于asp.net编译中出现数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.mdf ...

  4. 数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.mdf' 已存在。请选择其他数据库

    关于asp.net编译中出现 数据库 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\DATA\test1.md ...

  5. 后端程序员之路 8、一种内存kv数据库的实现

    键值(Key-Value)存储数据库,这是一种NoSQL(非关系型数据库)模型,其数据按照键值对的形式进行组织.索引和存储.KV存储非常适合不涉及过多数据关系业务关系的业务数据,同时能有效减少读写磁盘 ...

  6. 【万字长文】使用 LSM-Tree 思想基于.Net 6.0 C# 实现 KV 数据库(案例版)

    文章有点长,耐心看完应该可以懂实际原理到底是啥子. 这是一个KV数据库的C#实现,目前用.NET 6.0实现的,目前算是属于雏形,骨架都已经完备,毕竟刚完工不到一星期. 当然,这个其实也算是NoSQL ...

  7. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  8. 如何选择NoSql数据库

    How to choose a No Sql database 介绍了一下怎么选择一个No Sql数据库,下面简单翻译一下重点. No Sql的数据库可以分为如下4类: Key-Value数据库 数据 ...

  9. Aerospike-内存和硬盘混合存储的kv数据库

    为什么会有Aerospike? Redis是一个纯内存型数据库,性能上没有多大问题. 但这又带来一个新问题,内存是很贵的,所以全内存的存储成本非常昂贵.为了节省成本,我们需要把一部分不经常用到的数据存 ...

  10. 选择ORACLE数据库字符集

    如何选择数据库的字符集是一个有争议的话题,字符集本身涉及的范围很广,它与应用程序.客户的本地环境.操作系统.服务器等关系很密切,因此要做出合适的 选择,需要明白这些因素之间的关系.另外对字符集的基本概 ...

随机推荐

  1. vue el-tree 单选实现

    <el-tree :props="props" ref="treeList" :load="loadNode" check-stric ...

  2. vim多行缩进

    1.首先设置vim缩进空格 vim /etc/vim/vimrc 或者vim /etc/vimrc,添加一下文字 set smartindent set shiftwidth=4 # 缩进四个空格 # ...

  3. Java流程控制1

    Scanner对象 java.util.Scanner 通过Scanner类来获取用户输入 next()和nextline()来获取输入的字符串,读取前我们一般需要使用hasnext()和hasnex ...

  4. ADB 命令 使用

    基本用法 命令语法 为命令指定目标设备 启动/停止 查看 adb 版本 以 root 权限运行 adbd 指定 adb server 的网络端口 设备连接管理 查询已连接设备/模拟器 USB 连接 无 ...

  5. 测试--MD5--加密

    CREATE TABLE `test`.`testmd5` ( `id` INT ( 4 ) NOT NULL, `name` VARCHAR ( 20 ) NOT NULL, `pwd` VARCH ...

  6. C++的weak_ptr

    在以前的文章中,我们讲过C++的shared_ptr,利用它可以实现基于引用计数的指针回收,从而防止出现内存泄露. 但是事实上,即使是采用了shared_ptr,在存在循环引用的情况下其实仍然有可能会 ...

  7. idea设置springboot项目热部署

    转自: https://www.cnblogs.com/zhukf/p/12672180.html 一.什么是热部署? 热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用. 二.什么是Sp ...

  8. 微信支付服务商api对接

    引入官方sdk <!--微信v3支付sdk {https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient}--> < ...

  9. mysql数据库备份(windows环境)

    备份:cmd输入指令,按照新数据库的字符集去备份,备份等待即可: 恢复:之前新建数据库,注意字符集问题,输入指令还原即可:

  10. Json对象转换模块(自编代码JsonObject.cs)

    namespace 信息采集系统.Common { /// <summary> /// Json类型对象,用于其它Json对象继承 /// </summary> /// < ...