Couchbase6介绍及安装
文章来源: 陶老师运维笔记- 微信公众号

1. Couchbase介绍
Couchbase,是MemBase与couchDb这两个NoSQL数据库的合并的产物,是一个分布式的面向文档的NoSQL数据库管理系统,即拥有CouchDB的简单和可靠以及Memcached的高性能。
它内置了Memcached的所有服务,可以说是Memcached的升级版,分布式版本。Couchbase是高性能,高伸缩性和高可用的分布式缓存系统。
2. 概念
https://docs.couchbase.com/server/6.0/learn/data/document-data-model.html
2.1 Couchbase名词术语
| 项目 | 说明 |
|---|---|
| Data: | 要存储的数据,在Couchbase中一条数据就是一个k:v的item。 |
| Buckets: | 直译为桶,是couchbase中组织数据的一种方式,类似于关系数据库中的database。有三种 : 1)Couchbase类型:存储到内存和硬盘中。2)Ephemeral类型:只存储到内存中,Couchbase特有。3)Memcached类型:兼容Memcached协议,只存储到内存中。 |
| Services: | 不同类型的service支持不同的查询方式。例如Data Service可以允许通过key来获取value,Query Service可以允许通过类sql的查询语言来获取结果,并且这些Service是可以独立的部署在不同的节点上的。 |
| Indexes: | Index索引数据允许高速的访问数据。 |
| Server: | 一台couchbase节点被称之为Server |
| Cluster: | 多个Server节点组合成为一个Cluster。 |
| Rebalance: | data和index在集群内多个节点之间重新负载均衡的过程。任何集群配置的变动都最好做一次Rebalance,需要手动触发。 |
| Scaling: | 若某组件要承担较重,可进行横向扩容。 |
Services类别:
- Analytics:提供join,set,aggregation和group之类操作,这类操作常是大数据量复杂操作。
- Data:通过key来获取value
- Eventing:提供即时操作,近乎实时的对数据进行操作
- Query:提供类sql的查询
- Search:专门为全文搜索创建索引,全文搜索可以用于自然语言搜索
- Index:为Analytics和Query创建索引
2.2 Couchbase和RMDB对比
| Couchbase Server | Relational databases | 备注 |
|---|---|---|
| Buckets | Databases | - |
| Documents | Tables | - |
| Items (key-value or document) | Rows | - |
| Index | Index | - |
3. Couchbase安装
3.1 Linux下安装
安装方法链接如下
https://docs.couchbase.com/server/6.0/install/install-intro.html
Linux环境下可方便的使用yum安装Couchbase。
#linux安装
curl -O http://packages.couchbase.com/releases/couchbase-release/couchbase-release-1.0-5-x86_64.rpm
sudo rpm -i couchbase-release-1.0-5-x86_64.rpm
sudo yum update
sudo yum install couchbase-server
3.2 Docker安装
https://docs.couchbase.com/server/6.0/install/getting-started-docker.html
$docker search couchbase
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
couchbase Couchbase Server is a NoSQL document databas… 486 [OK]
couchbase/server Couchbase Server is the world’s most complet… 82 [OK]
$docker pull couchbase
#安装
$docker run -d --name couchbase-db1 -p 8091-8096:8091-8096 -p 11210-11211:11210-11211 couchbase
#
$docker logs couchbase-db1
Starting Couchbase Server -- Web UI available at http://<ip>:8091
and logs available in /opt/couchbase/var/lib/couchbase/logs
#查看容器内部ip,组成cluster会有用
docker inspect --format '{{ .NetworkSettings.IPAddress }}' couchbase-db1
172.17.0.2
3.3 初始化集群
https://docs.couchbase.com/server/6.0/manage/manage-nodes/create-cluster.html
安装完后可使用命令行或访问http://localhost:8091登录控制台进行设置初始密码以及后台管理。
1)命令行初始化:
#登录http://localhost:8091 进行初始化或者进容器操作
$docker exec -it couchbase-db1 sh
$cd /opt/couchbase/bin
#初始化示例,service包括query
$couchbase-cli cluster-init -c 127.0.0.1:8091 --cluster-name=cbase1 \
--cluster-username admin --cluster-password adminadmin \
--services data,index,query \
--cluster-ramsize 2048 --cluster-index-ramsize 256
#如下其它初始化参数查看
$ couchbase-cli cluster-init -h
$couchbase-cli cluster-init -c 127.0.0.1:8091 --cluster-username=admin --cluster-password=adminadmin --cluster-name=cbase1 --cluster-ramsize=4096
2)登录web管理后台初始化:
或者也可以登录http://localhost:8091 进行初始化。


Configure Couchbase Server:

Dashboard:
成功登录后,进行Couchbase6.0.x的管理后台,dashboard界面如图所示。

4. 简单使用
4.1 Load测试数据
可以load测试bucket beer-sample等。
4.2 执行N1QL命令
**N1QL实际上可以理解成NOSQL+JSON,一种语法类似于SQL的语言。**可以在couchbase上执行,主要考虑是方便熟悉关系型数据库的开发人员快速上手。
**与SQL类似,N1QL也分为DDL与DML语句,不同的是DDL语句是create indexes,modify indexes,drop indexes,这里index与关系型数据库中的表的概念有点像,也是必须创建对应的index才能进行增删改查。**可是实际上还有更丰富的功能会在下面详细说。
N1QL 命令执行
- 在Couchbase UI 的Query页面执行
- cbq命令查询
1) Couchbase UI 查询
可以在Couchbase UI 的Query页面执行以下指令.
$ SELECT 'Hello World' AS Greeting;
$ SELECT brewery_id, name FROM `beer-sample` WHERE brewery_id IS NOT MISSING AND type="beer" LIMIT 5;

2) cbq命令查询
$docker exec -it couchbase-db1 sh
$cd /opt/couchbase/bin
$./cbq -u admin -p adminadmin -engine=http://127.0.0.1:8091/
cbq> SELECT 'Hello World' AS Greeting;
{
"requestID": "c18bb9cc-9729-410c-b2e6-def48d86e1ae",
"signature": {
"Greeting": "string"
},
"results": [
{
"Greeting": "Hello World"
}
],
"status": "success",
"metrics": {
"elapsedTime": "1.119411ms",
"executionTime": "900.64µs",
"resultCount": 1,
"resultSize": 49
}
}
cbq>SELECT brewery_id, name FROM `beer-sample` WHERE brewery_id IS NOT MISSING AND type="beer" LIMIT 3;
{
"requestID": "14289a53-e707-4f93-ad21-d3164b74eb46",
"signature": {
"brewery_id": "json",
"name": "json"
},
"results": [
{
"brewery_id": "21st_amendment_brewery_cafe",
"name": "21A IPA"
},
{
"brewery_id": "21st_amendment_brewery_cafe",
"name": "563 Stout"
},
{
"brewery_id": "21st_amendment_brewery_cafe",
"name": "Amendment Pale Ale"
}
],
"status": "success",
"metrics": {
"elapsedTime": "7.59145ms",
"executionTime": "7.393078ms",
"resultCount": 3,
"resultSize": 307
}
}
注意: 非大写的bucket,需要用反引号``引起来!
参考
- https://docs.couchbase.com/server/6.0/getting-started/start-here.html
- https://docs.couchbase.com/server/6.0/install/getting-started-docker.html
- https://docs.couchbase.com/server/6.0/manage/manage-nodes/create-cluster.html
- https://query-tutorial.couchbase.com/tutorial/#1
- https://www.cnblogs.com/mydeepthink/p/10013368.html





