绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
couchbase介绍与实践(一)
2022-04-11 14:42:31

前言

couchbase的介绍网上少得令人发指,一些中文的文档基本都是好几年前2.0的版本了,目前couchbase的新版本是5.x,详细的文档在官网,不过是全英文的。记录和总结一下,方便使用。

couchbase的原理与特点

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

  • 速度快
    由于是放在内存中的数据库,所有的读写操作都是直接操作内存,因此速度非常快。

  • 高可用
    主要从两个方面,一个是它自带集群方案,支持多副本模式,另一个是它自带持久化方案,可以设置定时把数据异步写到文件系统上。

  • 配置使用方便
    安装后自带web管理台,可以在管理台上对集群、桶、索引、搜索等进行管理和操作,大量减轻运维的工作,使用简单。

couchbase与其他nosql数据库的区别

Hbase

优势

  1. 存储容量大,一个表可以容纳上亿行,上百万列;

  2. 可通过版本进行检索,能搜到所需的历史版本数据;

  3. 负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce);

  4. 在第3点的基础上可有效避免单点故障的发生。

缺点

  1. 基于Java语言实现及Hadoop架构意味着其API更适用于Java项目;

  2. node开发环境下所需依赖项较多、配置麻烦(或不知如何配置,如持久化配置),缺乏文档;

  3. 占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;

  4. API相比其它 NoSql 的相对笨拙。

适用场景

  1. bigtable类型的数据存储;

  2. 对数据有版本查询需求;

  3. 应对超大数据量要求扩展简单的需求。

Redis

优势

  1. 非常丰富的数据结构;

  2. Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断;

  3. 数据存在内存中,读写非常的高速,可以达到10w/s的频率。

缺点

  1. Redis3.0后才出来官方的集群方案,但仍存在一些架构上的问题(出处);

  2. 持久化功能体验不佳——通过快照方法实现的话,需要每隔一段时间将整个数据库的数据写到磁盘上,代价非常高;而aof方法只追踪变化的数据,类似于mysql的binlog方法,但追加log可能过大,同时所有操作均要重新执行一遍,恢复速度慢;

  3. 由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。

适用场景

适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。

MongoDB

优势

  1. 强大的自动化 shading 功能;

  2. 全索引支持,查询非常高效;

  3. 面向文档(BSON)存储,数据模式简单而强大。

  4. 支持动态查询,查询指令也使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。

  5. 支持 javascript 表达式查询,可在服务器端执行任意的 javascript函数。

缺点

  1. 单个文档大小限制为16M,32位系统上,不支持大于2.5G的数据;

  2. 对内存要求比较大,至少要保证热数据(索引,数据及系统其它开销)都能装进内存;

  3. 非事务机制,无法保证事件的原子性。

适用场景

  1. 适用于实时的插入、更新与查询的需求,并具备应用程序实时数据存储所需的复制及高度伸缩性;

  2. 非常适合文档化格式的存储及查询;

  3. 高伸缩性的场景:MongoDB 非常适合由数十或者数百台服务器组成的数据库。

  4. 对性能的关注超过对功能的要求。

Couchbase

优势

  1. 高并发性,高灵活性,高拓展性,容错性好;

  2. 以 vBucket 的概念实现更理想化的自动分片以及动态扩容;

缺点

  1. Couchbase 的存储方式为 Key/Value,但 Value 的类型很为单一,不支持数组。另外也不会自动创建doc id,需要为每一文档指定一个用于存储的 Document Indentifer;

  2. 各种组件拼接而成,都是c++实现,导致复杂度过高,遇到奇怪的性能问题排查比较困难,(中文)文档比较欠缺;

  3. 采用缓存全部key的策略,需要大量内存。节点宕机时 failover 过程有不可用时间,并且有部分数据丢失的可能,在高负载系统上有假死现象;

  4. 逐渐倾向于闭源,社区版本(免费,但不提供官方维护升级)和商业版本之间差距比较大。

适用场景

  1. 适合对读写速度要求较高,但服务器负荷和内存花销可遇见的需求;

  2. 需要支持 memcached 协议的需求。

couchbase安装

使用docker进行安装,简单方便。https://hub.docker.com/_/couchbase/

  1. docker pull couchbase
  2. docker run -d --name db -p 8091-8094:8091-8094 -p 11210:11210 couchbase
  3. 复制代码

安装完后访问http://localhost:8091登录控制台进行设置初始密码以及后台管理。

如果没有docker环境可以使用原生安装,安装方法链接如下 https://developer.couchbase.com/documentation/server/5.1/install/install-intro.html

N1QL查询

首先先说说什么是N1QL(妮口),N1QL实际上可以理解成NOSQL+JSON,一种语法类似于SQL的语言,可以在couchbase上执行,主要考虑是方便熟悉关系型数据库的开发人员快速上手。

与SQL类似,N1QL也分为DDL与DML语句,不同的是DDL语句是create indexes,modify indexes,drop indexes,这里index与关系型数据库中的表的概念有点像,也是必须创建对应的index才能进行增删改查。可是实际上还有更丰富的功能会在下面详细说。

N1QL执行的方式有两种

1、通过命令行,通过docker进入

  1. docker exec -it db sh
  2. 复制代码

执行cbq命令进入shell

  1. cd /opt/couchbase/bin
  2. ./cbq -u Administrator -p password -engine=http://127.0.0.1:8091/
  3. 复制代码

执行N1QL命令

  1. cbq> SELECT callsign FROM `travel-sample` LIMIT 5;
  2. 复制代码

2、通过控制台界面进行查询操作,比较简单

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Couchbase
创建时间:2022-04-11 10:08:07
Couchbase
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • LCR_
    专家
戳我,来吐槽~