分享好友 站长动态首页 网站导航

聊聊数据存储系统Couchbase与Redis

2022-03-31 09:46 · 头闻号数据库

背景

Redis 和Couchbase都是基于内存的数据存储系统。在它们各自的官方描述中,Couchbase是高性能,高伸缩性和高可用的分布式缓存系统;Redis是一个开源的内存数据结构存储系统。

Couchbase

介绍

2012年2月,CouchOne与Membase合并,Couchbase基于Membase与CouchDB开发了一款新产品。 Couchbase是一款开源的、分布式的、面向文档的NoSQL数据库,主要用于分布式缓存和数据存储领域,Membase 是 NoSQL 家族的一个新的重量级的成员,它是个键/值、持久化、可伸缩的解决方案,使用了memcached wire协议。CouchOne支持CouchDB。CouchDB是个文档数据库,提供了端到端的复制方法,这对于移动与分布在不同位置的数据中心来说是很有用的。Couchbase能够通过manage cache提供快速的亚毫米级别的k-v存储操作,并且提供快速的查询和其功能强大的能够指定SQL-like查询的查询引擎。Couchbase是一个较新的、发展迅速的nosql数据库技术。

特点

couchbase是一个非关系型数据库,它实际上是由couchdb+membase组成,所以它既能像couchdb那样存储json文档,也能像membase那样高速存储键值对。主要有以下几个特点:

数据模型

Couchbase 数据模型基于 JSON,它支持基本的数据类型,例如数字和字符串;和复杂类型,例如嵌入式文档和数组,单个document通常代表应用程序代码中对象的单个实例。一个document可能被认为等同于关系型数据库中的一行;每个document的属性都相当于一列。然而,Couchbase 提供了比关系数据库更大的灵活性,因为它可以存储具有不同模式的 JSON 文档。document可以包含嵌套结构,这允许开发人员表达多对多关系,而不需要引用或join表。

buckets

buckets是couchbase中组织数据的一种方式,类似于关系型数据库中的databse,一个集群最多可以创建30个buckets。每个存储buckets必须指定为以下三种类型之一。

同步协议

DCP (Database Change Protocol),DCP 协议是一个高效的二进制协议,它主要用于集群内的数据复制、索引复制、备份数据等等。主要概念有以下几点:

XDCR (Cross Data Center Replication),XDCR提供了多个有效vbucket的数据的复制,主要用于跨数据中心的多集群间的复制,可以跨版本复制。主要概念有以下几点:

服务

Couchbase 服务器提供以下服务:

Redis

介绍

Remote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统,它 是一个开源(BSD许可)的内存型数据存储系统,支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的AP以及丰富的数据结构,它可以用作数据库、缓存和消息中间件。并支持事务、发布订阅、lua脚本、lru驱动事件、过期机制、自动故障转移等多种功能,由于Redis 是用ANSI C编写的,可在大多数 POSIX 系统(如 Linux、*BSD 和 OS X)中运行,无需外部依赖。

特点

持久化

redis 提供了两种持久化的方式,分别是RDB(Redis Database)和AOF(Append only File)。

其实 RDB 和 AOF 两种方式也可以同时使用,在这种情况下,如果 redis 重启的话,则会优先采用 AOF 方式来进行数据恢复,这是因为 AOF 方式的数据恢复完整度更高。如果你没有数据持久化的需求,也完全可以关闭 RDB 和 AOF 方式,这样的话,redis 将变成一个纯内存数据库,就像 memcache 一样。

集群管理

Redis在3.0版本以后开始支持集群,经过中间几个版本的不断更新优化,最新的版本集群功能已经非常完善,Redis 集群是一个提供在多个Redis间节点间共享数据的程序集,集群节点共同构建了一个去中心化的网络,集群中的每个节点拥有平等的身份,节点各自保存各自的数据和集群状态。节点之间采用Gossip协议进行通信,保证了节点状态的信息同步。Redis 集群数据通过分区来进行管理,每个节点保存集群数据的一个子集。数据的分配采用一种叫做哈希槽(hash slot)的方式来分配,和传统的一致性哈希不太相同。Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽。为了使在部分节点失败或者大部分节点无法通信的情况下集群仍然可用,集群使用了主从复制模型。读取数据时,根据一致性哈希算法到对应的 master 节点获取数据,如果master 挂掉之后,会启动一个对应的 salve 节点来充当 master 。在redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并且性能和高可用性等各方面表现一般,特别是在主从切换的瞬间存在访问瞬断的情况,而且哨兵模式只有一个主节点对外提供服务,没法支持很高的并发,且单个主节点内存也不宜设置得过大,否则会导致持久化文件过大,影响数据恢复或主从同步的效率。

总结

其实不论是在大块数据还是大数据量的处理上,Couchbase都要优于Redis,很多平台都是采用Couchbase来管理数千万热数据。所以,如果缓存大多数情况下仅仅需要提供数据新增和查询操作,那Couchbase基于文档类型的存储结构能够始终如一地为提供亚毫秒的查询体验,对于预定义的数据类型你还可以通过创建索引进一步优化性能,这种情况下,Couchbase无疑是你更好的选择。

免责声明:本平台仅供信息发布交流之途,请谨慎判断信息真伪。如遇虚假诈骗信息,请立即举报

举报
反对 0
打赏 0
更多相关文章

评论

0

收藏

点赞