Couchbase6介绍及安装

1,134 阅读3分钟

Couchbase6介绍及安装

文章来源: 陶老师运维笔记- 微信公众号

Couchbase

1. Couchbase介绍

Couchbase,是MemBase与couchDb这两个NoSQL数据库的合并的产物,是一个分布式的面向文档的NoSQL数据库管理系统,即拥有CouchDB的简单和可靠以及Memcached的高性能。

内置了Memcached的所有服务,可以说是Memcached的升级版,分布式版本。Couchbase是高性能,高伸缩性和高可用的分布式缓存系统。

2. 概念

docs.couchbase.com/server/6.0/…

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下安装

安装方法链接如下

docs.couchbase.com/server/6.0/…

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安装

docs.couchbase.com/server/6.0/…

$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 初始化集群

docs.couchbase.com/server/6.0/…

安装完后可使用命令行或访问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 进行初始化。

初始化集群

create

Configure Couchbase Server:

image.png

Dashboard:

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

Dashboard

4. 简单使用

4.1 Load测试数据

可以load测试bucket beer-sample等。

load测试数据

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;

image.png

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,需要用反引号``引起来!

参考