前言
couchbase的介绍网上少得令人发指,一些中文的文档基本都是好几年前2.0的版本了,目前couchbase的新版本是5.x,详细的文档在官网,不过是全英文的。记录和总结一下,方便使用。
couchbase的原理与特点
couchbase是一个非关系型数据库,它实际上是由couchdb+membase组成,所以它既能像couchdb那样存储json文档,也能像membase那样高速存储键值对。主要有以下几个特点:
速度快
由于是放在内存中的数据库,所有的读写操作都是直接操作内存,因此速度非常快。高可用
主要从两个方面,一个是它自带集群方案,支持多副本模式,另一个是它自带持久化方案,可以设置定时把数据异步写到文件系统上。配置使用方便
安装后自带web管理台,可以在管理台上对集群、桶、索引、搜索等进行管理和操作,大量减轻运维的工作,使用简单。
couchbase与其他nosql数据库的区别
Hbase
优势
存储容量大,一个表可以容纳上亿行,上百万列;
可通过版本进行检索,能搜到所需的历史版本数据;
负载高时,可通过简单的添加机器来实现水平切分扩展,跟Hadoop的无缝集成保障了其数据可靠性(HDFS)和海量数据分析的高性能(MapReduce);
在第3点的基础上可有效避免单点故障的发生。
缺点
基于Java语言实现及Hadoop架构意味着其API更适用于Java项目;
node开发环境下所需依赖项较多、配置麻烦(或不知如何配置,如持久化配置),缺乏文档;
占用内存很大,且鉴于建立在为批量分析而优化的HDFS上,导致读取性能不高;
API相比其它 NoSql 的相对笨拙。
适用场景
bigtable类型的数据存储;
对数据有版本查询需求;
应对超大数据量要求扩展简单的需求。
Redis
优势
非常丰富的数据结构;
Redis提供了事务的功能,可以保证一串 命令的原子性,中间不会被任何操作打断;
数据存在内存中,读写非常的高速,可以达到10w/s的频率。
缺点
Redis3.0后才出来官方的集群方案,但仍存在一些架构上的问题(出处);
持久化功能体验不佳——通过快照方法实现的话,需要每隔一段时间将整个数据库的数据写到磁盘上,代价非常高;而aof方法只追踪变化的数据,类似于mysql的binlog方法,但追加log可能过大,同时所有操作均要重新执行一遍,恢复速度慢;
由于是内存数据库,所以,单台机器,存储的数据量,跟机器本身的内存大小。虽然redis本身有key过期策略,但是还是需要提前预估和节约内存。如果内存增长过快,需要定期删除数据。
适用场景
适用于数据变化快且数据库大小可遇见(适合内存容量)的应用程序。
MongoDB
优势
强大的自动化 shading 功能;
全索引支持,查询非常高效;
面向文档(BSON)存储,数据模式简单而强大。
支持动态查询,查询指令也使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
支持 javascript 表达式查询,可在服务器端执行任意的 javascript函数。
缺点
单个文档大小限制为16M,32位系统上,不支持大于2.5G的数据;
对内存要求比较大,至少要保证热数据(索引,数据及系统其它开销)都能装进内存;
非事务机制,无法保证事件的原子性。
适用场景
适用于实时的插入、更新与查询的需求,并具备应用程序实时数据存储所需的复制及高度伸缩性;
非常适合文档化格式的存储及查询;
高伸缩性的场景:MongoDB 非常适合由数十或者数百台服务器组成的数据库。
对性能的关注超过对功能的要求。
Couchbase
优势
高并发性,高灵活性,高拓展性,容错性好;
以 vBucket 的概念实现更理想化的自动分片以及动态扩容;
缺点
Couchbase 的存储方式为 Key/Value,但 Value 的类型很为单一,不支持数组。另外也不会自动创建doc id,需要为每一文档指定一个用于存储的 Document Indentifer;
各种组件拼接而成,都是c++实现,导致复杂度过高,遇到奇怪的性能问题排查比较困难,(中文)文档比较欠缺;
采用缓存全部key的策略,需要大量内存。节点宕机时 failover 过程有不可用时间,并且有部分数据丢失的可能,在高负载系统上有假死现象;
逐渐倾向于闭源,社区版本(免费,但不提供官方维护升级)和商业版本之间差距比较大。
适用场景
适合对读写速度要求较高,但服务器负荷和内存花销可遇见的需求;
需要支持 memcached 协议的需求。
couchbase安装
使用docker进行安装,简单方便。https://hub.docker.com/_/couchbase/
- docker pull couchbase
- docker run -d --name db -p 8091-8094:8091-8094 -p 11210:11210 couchbase
- 复制代码
安装完后访问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进入
- docker exec -it db sh
- 复制代码
执行cbq命令进入shell
- cd /opt/couchbase/bin
- ./cbq -u Administrator -p password -engine=http://127.0.0.1:8091/
- 复制代码
执行N1QL命令
- cbq> SELECT callsign FROM `travel-sample` LIMIT 5;
- 复制代码
2、通过控制台界面进行查询操作,比较简单