1.2.1. /

GET /

访问 CouchDB 实例的根目录将返回有关该实例的元信息。响应是一个 JSON 结构,其中包含有关服务器的信息,包括欢迎消息和服务器的版本。

请求头:
  • Accept

    • application/json

    • text/plain

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

状态码:
  • 200 OK – 请求已成功完成

请求:

GET / HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 179
Content-Type: application/json
Date: Sat, 10 Aug 2013 06:33:33 GMT
Server: CouchDB (Erlang/OTP)

{
    "couchdb": "Welcome",
    "uuid": "85fb71bf700c17267fef77535820e371",
    "vendor": {
        "name": "The Apache Software Foundation",
        "version": "1.3.1"
    },
    "version": "1.3.1"
}

1.2.2. /_active_tasks

在版本 2.1.0 中变更: 由于调度复制器的工作方式,持续复制作业可能会定期停止,然后在稍后启动。当它们未运行时,它们不会出现在 _active_tasks 端点中

在版本 3.3 中变更: 为复制作业添加了 “bulk_get_attempts”“bulk_get_docs” 字段。

GET /_active_tasks

正在运行的任务列表,包括任务类型、名称、状态和进程 ID。结果是当前正在运行的任务的 JSON 数组,每个任务都用单个对象描述。根据操作类型,响应对象字段集可能不同。

请求头:
  • Accept

    • application/json

    • text/plain

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

响应 JSON 对象:
  • changes_done (数字) – 已处理的更改

  • database (字符串) – 源数据库

  • pid (字符串) – 进程 ID

  • progress (数字) – 当前进度百分比

  • started_on (数字) – 任务开始时间,以 Unix 时间戳表示

  • status (字符串) – 任务状态消息

  • task (字符串) – 任务名称

  • total_changes (数字) – 要处理的总更改

  • type (字符串) – 操作类型

  • updated_on (数字) – 最后一次操作更新的 Unix 时间戳

状态码:

请求:

GET /_active_tasks HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 1690
Content-Type: application/json
Date: Sat, 10 Aug 2013 06:37:31 GMT
Server: CouchDB (Erlang/OTP)

[
    {
        "changes_done": 64438,
        "database": "mailbox",
        "pid": "<0.12986.1>",
        "progress": 84,
        "started_on": 1376116576,
        "total_changes": 76215,
        "type": "database_compaction",
        "updated_on": 1376116619
    },
    {
        "changes_done": 14443,
        "database": "mailbox",
        "design_document": "c9753817b3ba7c674d92361f24f59b9f",
        "pid": "<0.10461.3>",
        "progress": 18,
        "started_on": 1376116621,
        "total_changes": 76215,
        "type": "indexer",
        "updated_on": 1376116650
    },
    {
        "changes_done": 5454,
        "database": "mailbox",
        "design_document": "_design/meta",
        "pid": "<0.6838.4>",
        "progress": 7,
        "started_on": 1376116632,
        "total_changes": 76215,
        "type": "indexer",
        "updated_on": 1376116651
    },
    {
        "checkpointed_source_seq": 68585,
        "continuous": false,
        "doc_id": null,
        "doc_write_failures": 0,
        "bulk_get_attempts": 4524,
        "bulk_get_docs": 4524,
        "docs_read": 4524,
        "docs_written": 4524,
        "missing_revisions_found": 4524,
        "pid": "<0.1538.5>",
        "progress": 44,
        "replication_id": "9bc1727d74d49d9e157e260bb8bbd1d5",
        "revisions_checked": 4524,
        "source": "mailbox",
        "source_seq": 154419,
        "started_on": 1376116644,
        "target": "http://mailsrv:5984/mailbox",
        "type": "replication",
        "updated_on": 1376116651
    }
]

1.2.3. /_all_dbs

GET /_all_dbs

返回 CouchDB 实例中的所有数据库列表。

请求头:
  • Accept

    • application/json

    • text/plain

查询参数:
  • descending (布尔值) – 按键降序返回数据库。默认值为 false

  • endkey (json) – 当达到指定键时,停止返回数据库。

  • end_key (json) – endkey 参数的别名

  • limit (数字) – 将返回的数据库数量限制为指定数量。

  • skip (数字) – 在开始返回结果之前,跳过此数量的数据库。默认值为 0

  • startkey (json) – 从指定键开始返回数据库。

  • start_key (json) – startkey 的别名。

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

状态码:
  • 200 OK – 请求已成功完成

请求:

GET /_all_dbs HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 52
Content-Type: application/json
Date: Sat, 10 Aug 2013 06:57:48 GMT
Server: CouchDB (Erlang/OTP)

[
   "_users",
   "contacts",
   "docs",
   "invoices",
   "locations"
]

1.2.4. /_dbs_info

版本 3.2 中新增。

GET /_dbs_info

返回 CouchDB 实例中所有数据库的信息列表。

请求头:
  • Accept

    • application/json

    • text/plain

查询参数:
  • descending (布尔值) – 按键降序返回数据库信息。默认值为 false

  • endkey (json) – 当达到指定键时,停止返回数据库信息。

  • end_key (json) – endkey 参数的别名

  • limit (数字) – 将返回的数据库信息数量限制为指定数量。

  • skip (数字) – 在开始返回结果之前,跳过此数量的数据库。默认值为 0

  • startkey (json) – 从指定键开始返回数据库信息。

  • start_key (json) – startkey 的别名。

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

状态码:
  • 200 OK – 请求已成功完成

请求:

GET /_dbs_info HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Thu, 18 Nov 2021 14:37:35 GMT
Server: CouchDB (Erlang OTP/23)

[
  {
    "key": "animals",
    "info": {
      "db_name": "animals",
      "update_seq": "52232",
      "sizes": {
        "file": 1178613587,
        "external": 1713103872,
        "active": 1162451555
      },
      "purge_seq": 0,
      "doc_del_count": 0,
      "doc_count": 52224,
      "disk_format_version": 6,
      "compact_running": false,
      "cluster": {
        "q": 8,
        "n": 3,
        "w": 2,
        "r": 2
      },
      "instance_start_time": "0"
    }
  }
]

版本 2.2 中新增。

POST /_dbs_info

返回 CouchDB 实例中指定数据库列表的信息。这使您能够在单个请求中请求有关多个数据库的信息,而不是多个 GET /{db} 请求。

请求头:
响应头:
请求 JSON 对象:
  • keys (数组) – 要请求的数据库名称数组

状态码:

请求:

POST /_dbs_info HTTP/1.1
Accept: application/json
Host: localhost:5984
Content-Type: application/json

{
    "keys": [
        "animals",
        "plants"
    ]
}

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Sat, 20 Dec 2017 06:57:48 GMT
Server: CouchDB (Erlang/OTP)

[
  {
    "key": "animals",
    "info": {
      "db_name": "animals",
      "update_seq": "52232",
      "sizes": {
        "file": 1178613587,
        "external": 1713103872,
        "active": 1162451555
      },
      "purge_seq": 0,
      "doc_del_count": 0,
      "doc_count": 52224,
      "disk_format_version": 6,
      "compact_running": false,
      "cluster": {
        "q": 8,
        "n": 3,
        "w": 2,
        "r": 2
      },
      "instance_start_time": "0"
    }
  },
  {
    "key": "plants",
    "info": {
      "db_name": "plants",
      "update_seq": "303",
      "sizes": {
        "file": 3872387,
        "external": 2339,
        "active": 67475
      },
      "purge_seq": 0,
      "doc_del_count": 0,
      "doc_count": 11,
      "disk_format_version": 6,
      "compact_running": false,
      "cluster": {
        "q": 8,
        "n": 3,
        "w": 2,
        "r": 2
      },
      "instance_start_time": "0"
    }
  }
]

注意

列表中支持的指定数据库数量可以通过修改配置文件中的 max_db_number_for_dbs_info_req 条目来限制。默认限制为 100。虽然可以增加限制,但会给服务器带来负载,因此建议使用 100 个数据库进行更多请求,而不是一次使用 1000 个数据库进行少量请求。

1.2.5. /_cluster_setup

版本 2.0 中新增。

GET /_cluster_setup

返回节点或集群的状态,根据集群设置向导。

请求头:
  • Accept

    • application/json

    • text/plain

查询参数:
  • ensure_dbs_exist (数组) – 要确保在节点/集群上存在的系统数据库列表。默认值为 ["_users","_replicator"]

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

响应 JSON 对象:
  • state (字符串) – 节点和/或集群的当前 state(见下文)

状态码:
  • 200 OK – 请求已成功完成

返回的 state 指示当前节点或集群状态,并且是以下之一

  • cluster_disabled: 当前节点完全未配置。

  • single_node_disabled: 当前节点配置为单节点(独立)节点 ([cluster] n=1),但要么没有定义服务器级管理员用户,要么没有创建标准系统数据库。如果指定了 ensure_dbs_exist 查询参数,则提供的数据库列表将覆盖标准系统数据库的默认列表。

  • single_node_enabled: 当前节点配置为单节点(独立)节点,已定义服务器级管理员用户,并且已创建 ensure_dbs_exist 列表(显式或默认)中的数据库。

  • cluster_enabled: 当前节点具有 [cluster] n > 1,未绑定到 127.0.0.1 并且已定义服务器级管理员用户。但是,尚未创建完整的标准系统数据库集。如果指定了 ensure_dbs_exist 查询参数,则提供的数据库列表将覆盖标准系统数据库的默认列表。

  • cluster_finished: 当前节点具有 [cluster] n > 1,未绑定到 127.0.0.1,已定义服务器级管理员用户,并且已创建 ensure_dbs_exist 列表(显式或默认)中的数据库。

请求:

GET /_cluster_setup HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
X-CouchDB-Body-Time: 0
X-Couch-Request-ID: 5c058bdd37
Server: CouchDB/2.1.0-7f17678 (Erlang OTP/17)
Date: Sun, 30 Jul 2017 06:33:18 GMT
Content-Type: application/json
Content-Length: 29
Cache-Control: must-revalidate

{"state":"cluster_enabled"}
POST /_cluster_setup

将节点配置为单节点(独立)节点,作为集群的一部分,或完成集群。

请求头:
请求 JSON 对象:
  • action (string) –

    • enable_single_node: 将当前节点配置为单个独立的 CouchDB 服务器。

    • enable_cluster: 将本地或远程节点配置为一个节点,准备将其加入到新的 CouchDB 集群中。

    • add_node: 将指定的远程节点添加到此集群的节点列表中,将其加入到集群中。

    • finish_cluster: 通过创建标准系统数据库来完成集群。

  • bind_address (string) – 要绑定当前节点的 IP 地址。可以指定特殊值 0.0.0.0 以绑定到主机上的所有接口。(仅限 enable_cluster 和 enable_single_node)

  • username (string) – 要创建的服务器级管理员的用户名。(仅限 enable_cluster 和 enable_single_node),或远程服务器的管理员用户名(add_node)

  • password (string) – 要创建的服务器级管理员的密码。(仅限 enable_cluster 和 enable_single_node),或远程服务器的管理员用户名(add_node)

  • port (number) – 要绑定此节点的 TCP 端口(仅限 enable_cluster 和 enable_single_node)或要绑定远程节点的 TCP 端口(仅限 add_node)。

  • node_count (number) – 要加入到集群中的节点总数,包括此节点。用于确定集群的 n 值,最多为 3。(仅限 enable_cluster)

  • remote_node (string) – 要作为此集群的节点列表的一部分进行设置的远程节点的 IP 地址。(仅限 enable_cluster)

  • remote_current_user (string) – 远程节点上授权的服务器级管理员的用户名。(仅限 enable_cluster)

  • remote_current_password (string) – 远程节点上授权的服务器级管理员的密码。(仅限 enable_cluster)

  • host (string) – 要添加到集群的远程节点 IP。(仅限 add_node)

  • ensure_dbs_exist (数组) – 要确保在节点/集群上存在的系统数据库列表。默认值为 ["_users","_replicator"]

此处未包含示例请求/响应。有关工作示例,请参阅 集群设置 API.

1.2.6. /_db_updates

版本 1.4 中的新增功能。

GET /_db_updates

返回 CouchDB 实例中的所有数据库事件列表。使用此端点需要存在 _global_changes 数据库。

请求头:
  • Accept

    • application/json

    • text/plain

查询参数:
  • feed (string) –

    • normal: 返回所有历史 DB 更改,然后关闭连接。默认值。

    • longpoll: 在第一个事件后关闭连接。

    • continuous: 每个事件发送一行 JSON。保持套接字打开,直到 timeout

    • eventsource: 与 continuous 相似,但以 EventSource 格式发送事件。

  • timeout (number) – CouchDB 关闭连接之前的毫秒数。默认值为 60000

  • heartbeat (number) – 在结果中发送空行的毫秒数。仅适用于 longpollcontinuouseventsource 馈送。覆盖任何超时以使馈送无限期地保持活动状态。默认值为 60000。可以为 true 以使用默认值。

  • since (string) – 仅返回自指定序列 ID 之后的更新。如果指定了序列 ID 但不存在,则返回所有更改。可以是字符串 now 以开始仅显示新更新。

响应头:
响应 JSON 对象:
  • results (array) – 数据库事件数组。对于 longpollcontinuous 模式,整个响应是 results 数组的内容。

  • last_seq (string) – 报告的最后一个序列 ID。

状态码:

数据库更新的 results 字段

JSON 参数:
  • db_name (string) – 数据库名称。

  • type (string) – 数据库事件是 createdupdateddeleted 之一。

  • seq (json) – 事件的更新序列。

请求:

GET /_db_updates HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Sat, 18 Mar 2017 19:01:35 GMT
Etag: "C1KU98Y6H0LGM7EQQYL6VSL07"
Server: CouchDB/2.0.0 (Erlang OTP/17)
Transfer-Encoding: chunked
X-Couch-Request-ID: ad87efc7ff
X-CouchDB-Body-Time: 0

{
    "results":[
        {"db_name":"mailbox","type":"created","seq":"1-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZExFyjAnmJhkWaeaIquGIf2JAUgmWQPMiGRAZcaB5CaePxqEkBq6vGqyWMBkgwNQAqobD4h"},
        {"db_name":"mailbox","type":"deleted","seq":"2-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZEpFyjAnmJhkWaeaIquGIf2JAUgmWQPMiGRAZcaB5CaePxqEkBq6vGqyWMBkgwNQAqobD4hdQsg6vYTUncAou4-IXUPIOpA7ssCAIFHa60"},
    ],
    "last_seq": "2-g1AAAAFReJzLYWBg4MhgTmHgzcvPy09JdcjLz8gvLskBCjMlMiTJ____PyuDOZEpFyjAnmJhkWaeaIquGIf2JAUgmWQPMiGRAZcaB5CaePxqEkBq6vGqyWMBkgwNQAqobD4hdQsg6vYTUncAou4-IXUPIOpA7ssCAIFHa60"
}

1.2.7. /_membership

版本 2.0 中新增。

GET /_membership

显示作为 cluster_nodes 的集群的一部分的节点。字段 all_nodes 显示此节点知道的所有节点,包括集群的一部分的节点。此端点在设置集群时很有用,请参阅 节点管理

请求头:
  • Accept

    • application/json

    • text/plain

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

状态码:
  • 200 OK – 请求已成功完成

请求:

GET /_membership HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Type: application/json
Date: Sat, 11 Jul 2015 07:02:41 GMT
Server: CouchDB (Erlang/OTP)
Content-Length: 142

{
    "all_nodes": [
        "[email protected]",
        "[email protected]",
        "[email protected]"
    ],
    "cluster_nodes": [
        "[email protected]",
        "[email protected]",
        "[email protected]"
    ]
}

1.2.8. /_replicate

版本 3.3 中的更改: 在复制历史响应对象中添加了 “bulk_get_attempts”“bulk_get_docs” 字段。

POST /_replicate

请求、配置或停止复制操作。

请求头:
请求 JSON 对象:
  • cancel (boolean) – 取消复制

  • continuous (boolean) – 将复制配置为连续

  • create_target (boolean) – 创建目标数据库。需要目标服务器上的管理员权限。

  • create_target_params (object) – 包含在创建目标数据库时要使用的参数的对象。可以包括标准的 qn 参数。

  • winning_revs_only (boolean) – 仅复制获胜修订版。

  • doc_ids (array) – 要同步的文档 ID 数组。 doc_idsfilterselector 是互斥的。

  • filter (string) – 过滤器函数 的名称。 doc_idsfilterselector 是互斥的。

  • selector (json) – 用于过滤要同步的文档的 选择器。具有与复制文档中的 选择器对象 相同的行为。 doc_idsfilterselector 是互斥的。

  • source_proxy (string) – 要通过其进行源复制的代理服务器的地址(协议可以是“http”或“socks5”)

  • target_proxy (字符串) – 用于将数据复制到目标数据库的代理服务器地址(协议可以是“http”或“socks5”)。

  • source (字符串/对象) – 完整限定的源数据库 URL 或包含源数据库完整 URL 和其他参数(如标头)的对象。例如:‘http://example.com/source_db_name’ 或 {“url”:”url in here”, “headers”: {“header1”:”value1”, …}}。为了向后兼容,CouchDB 3.x 会自动将裸数据库名称转换为完整 URL,方法是在前面添加 CouchDB 正在监听的地址和端口。此行为在 3.x 中已弃用,将在 CouchDB 4.0 中移除。

  • target (字符串/对象) – 完整限定的目标数据库 URL 或包含目标数据库完整 URL 和其他参数(如标头)的对象。例如:‘http://example.com/target_db_name’ 或 {“url”:”url in here”, “headers”: {“header1”:”value1”, …}}。为了向后兼容,CouchDB 3.x 会自动将裸数据库名称转换为完整 URL,方法是在前面添加 CouchDB 正在监听的地址和端口。此行为在 3.x 中已弃用,将在 CouchDB 4.0 中移除。

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

响应 JSON 对象:
  • history (数组) – 复制历史记录(见下文)。

  • ok (布尔值) – 复制状态。

  • replication_id_version (数字) – 复制协议版本。

  • session_id (字符串) – 唯一的会话 ID。

  • source_last_seq (数字) – 从源数据库读取的最后一个序列号。

状态码:

复制请求的规范由请求的 JSON 内容控制。JSON 应该是一个对象,包含定义源、目标和其他选项的字段。

复制历史记录 是一个包含以下结构对象的数组。

JSON 参数:
  • doc_write_failures (数字) – 文档写入失败次数。

  • docs_read (数字) – 读取的文档数量。

  • docs_written (数字) – 写入目标数据库的文档数量。

  • bulk_get_attempts (数字) – 使用 _bulk_get 获取文档修订版本的尝试次数。

  • bulk_get_docs (数字) – 使用 _bulk_get 成功获取的文档总数。

  • end_last_seq (数字) – 更改流中的最后一个序列号。

  • end_time (字符串) – 复制操作完成的日期/时间,采用 RFC 2822 格式。

  • missing_checked (数字) – 检查的缺失文档数量。

  • missing_found (数字) – 找到的缺失文档数量。

  • recorded_seq (数字) – 最后记录的序列号。

  • session_id (字符串) – 此复制操作的会话 ID。

  • start_last_seq (数字) – 更改流中的第一个序列号。

  • start_time (字符串) – 复制操作开始的日期/时间,采用 RFC 2822 格式。

注意

从 CouchDB 2.0.0 开始,复制 sourcetarget 参数都需要使用完整限定的 URL。

请求

POST /_replicate HTTP/1.1
Accept: application/json
Content-Length: 80
Content-Type: application/json
Host: localhost:5984

{
    "source": "http://127.0.0.1:5984/db_a",
    "target": "http://127.0.0.1:5984/db_b"
}

响应

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 692
Content-Type: application/json
Date: Sun, 11 Aug 2013 20:38:50 GMT
Server: CouchDB (Erlang/OTP)

{
    "history": [
        {
            "doc_write_failures": 0,
            "docs_read": 10,
            "bulk_get_attempts": 10,
            "bulk_get_docs": 10,
            "docs_written": 10,
            "end_last_seq": 28,
            "end_time": "Sun, 11 Aug 2013 20:38:50 GMT",
            "missing_checked": 10,
            "missing_found": 10,
            "recorded_seq": 28,
            "session_id": "142a35854a08e205c47174d91b1f9628",
            "start_last_seq": 1,
            "start_time": "Sun, 11 Aug 2013 20:38:50 GMT"
        },
        {
            "doc_write_failures": 0,
            "docs_read": 1,
            "bulk_get_attempts": 1,
            "bulk_get_docs": 1,
            "docs_written": 1,
            "end_last_seq": 1,
            "end_time": "Sat, 10 Aug 2013 15:41:54 GMT",
            "missing_checked": 1,
            "missing_found": 1,
            "recorded_seq": 1,
            "session_id": "6314f35c51de3ac408af79d6ee0c1a09",
            "start_last_seq": 0,
            "start_time": "Sat, 10 Aug 2013 15:41:54 GMT"
        }
    ],
    "ok": true,
    "replication_id_version": 3,
    "session_id": "142a35854a08e205c47174d91b1f9628",
    "source_last_seq": 28
}

1.2.8.1. 复制操作

复制的目的是在过程结束时,源数据库中的所有活动文档也存在于目标数据库中,并且源数据库中删除的所有文档也从目标数据库中删除(如果存在)。

复制可以描述为推复制或拉复制。

  • 拉复制 是指 source 是远程 CouchDB 实例,而 target 是本地数据库。

    如果源数据库具有永久 IP 地址,而目标(本地)数据库可能具有动态分配的 IP 地址(例如,通过 DHCP),则拉复制是最有用的解决方案。如果要从中央服务器复制到移动设备或其他设备,这一点尤其重要。

  • 推复制 是指 source 是本地数据库,而 target 是远程数据库。

1.2.8.2. 指定源数据库和目标数据库

如果要在以下两种情况之一中执行复制,则必须使用 CouchDB 数据库的 URL 规范。

  • 与远程数据库复制(即同一主机上的另一个 CouchDB 实例或不同主机上的实例)。

  • 与需要身份验证的数据库复制。

例如,要请求在本地于发送请求的 CouchDB 实例的数据库与远程数据库之间进行复制,可以使用以下请求。

POST http://couchdb:5984/_replicate HTTP/1.1
Content-Type: application/json
Accept: application/json

{
    "source" : "recipes",
    "target" : "http://coucdb-remote:5984/recipes",
}

在所有情况下,sourcetarget 规范中请求的数据库必须存在。如果不存在,则会在 JSON 对象中返回错误。

{
    "error" : "db_not_found"
    "reason" : "could not open http://couchdb-remote:5984/ol1ka/",
}

您可以通过将 create_target 字段添加到请求对象来创建目标数据库(前提是您的用户凭据允许这样做)。

POST http://couchdb:5984/_replicate HTTP/1.1
Content-Type: application/json
Accept: application/json

{
    "create_target" : true
    "source" : "recipes",
    "target" : "http://couchdb-remote:5984/recipes",
}

create_target 字段不会破坏性。如果数据库已存在,则复制将照常进行。

1.2.8.3. 单次复制

您可以请求复制数据库,以便两个数据库可以同步。默认情况下,复制过程只执行一次,并将两个数据库同步在一起。例如,您可以通过在请求 JSON 内容中提供 sourcetarget 字段来请求两个数据库之间的单次同步。

POST http://couchdb:5984/_replicate HTTP/1.1
Accept: application/json
Content-Type: application/json

{
    "source" : "recipes",
    "target" : "recipes-snapshot",
}

在上面的示例中,数据库 recipesrecipes-snapshot 将同步。这些数据库是本地于发出请求的 CouchDB 实例的。响应将是一个 JSON 结构,包含同步过程的成功(或失败)以及有关该过程的统计信息。

{
    "ok" : true,
    "history" : [
        {
            "docs_read" : 1000,
            "bulk_get_attempts": 1000,
            "bulk_get_docs": 1000,
            "session_id" : "52c2370f5027043d286daca4de247db0",
            "recorded_seq" : 1000,
            "end_last_seq" : 1000,
            "doc_write_failures" : 0,
            "start_time" : "Thu, 28 Oct 2010 10:24:13 GMT",
            "start_last_seq" : 0,
            "end_time" : "Thu, 28 Oct 2010 10:24:14 GMT",
            "missing_checked" : 0,
            "docs_written" : 1000,
            "missing_found" : 1000
        }
    ],
    "session_id" : "52c2370f5027043d286daca4de247db0",
    "source_last_seq" : 1000
}

1.2.8.4. 连续复制

使用前面提到的方法同步数据库只发生一次,即在发出复制请求时。要使目标数据库永久从源数据库复制,必须将请求中 JSON 对象的 continuous 字段设置为 true。

使用连续复制,源数据库中的更改将永久复制到目标数据库,直到您明确请求停止复制为止。

POST http://couchdb:5984/_replicate HTTP/1.1
Accept: application/json
Content-Type: application/json

{
    "continuous" : true
    "source" : "recipes",
    "target" : "http://couchdb-remote:5984/recipes",
}

只要两个实例之间存在网络连接,更改就会在两个数据库之间复制。

注意

要使两个数据库彼此同步,您需要双向设置复制;也就是说,您必须从 source 复制到 target,并且分别从 target 复制到 source

1.2.8.5. 取消连续复制

您可以通过将 cancel 字段添加到 JSON 请求对象并将值设置为 true 来取消连续复制。请注意,请求的结构必须与原始请求相同,才能使取消请求生效。例如,如果您请求了连续复制,则取消请求也必须包含 continuous 字段。

例如,复制请求

POST http://couchdb:5984/_replicate HTTP/1.1
Content-Type: application/json
Accept: application/json

{
    "source" : "recipes",
    "target" : "http://couchdb-remote:5984/recipes",
    "create_target" : true,
    "continuous" : true
}

必须使用以下请求取消。

POST http://couchdb:5984/_replicate HTTP/1.1
Accept: application/json
Content-Type: application/json

{
    "cancel" : true,
    "continuous" : true
    "create_target" : true,
    "source" : "recipes",
    "target" : "http://couchdb-remote:5984/recipes",
}

请求取消不存在的复制会导致 404 错误。

1.2.9. /_scheduler/jobs

GET /_scheduler/jobs

复制作业列表。包括通过 /_replicate 端点创建的复制以及从复制文档创建的复制。不包括已完成或由于复制文档格式错误而无法启动的复制。每个作业描述将包含源和目标信息、复制 ID、最近事件的历史记录以及其他一些内容。

请求头:
响应头:
查询参数:
  • limit (数字) – 要返回的结果数量。

  • skip (数字) – 从开头开始跳过的结果数量,按复制 ID 排序。

响应 JSON 对象:
  • offset (数字) – 跳过的结果数量。

  • total_rows (数字) – 复制作业的总数。

  • id (字符串) – 复制 ID。

  • database (字符串) – 复制文档数据库。

  • doc_id (字符串) – 复制文档 ID。

  • history (列表) – 事件的时间戳历史记录,作为对象列表。

  • pid (字符串) – 复制进程 ID。

  • node (字符串) – 运行作业的集群节点。

  • source (字符串) – 复制源。

  • target (字符串) – 复制目标。

  • start_time (字符串) – 复制启动的时间戳。

状态码:

请求:

GET /_scheduler/jobs HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 1690
Content-Type: application/json
Date: Sat, 29 Apr 2017 05:05:16 GMT
Server: CouchDB (Erlang/OTP)

{
    "jobs": [
        {
            "database": "_replicator",
            "doc_id": "cdyno-0000001-0000003",
            "history": [
                {
                    "timestamp": "2017-04-29T05:01:37Z",
                    "type": "started"
                },
                {
                    "timestamp": "2017-04-29T05:01:37Z",
                    "type": "added"
                }
            ],
            "id": "8f5b1bd0be6f9166ccfd36fc8be8fc22+continuous",
            "info": {
                "changes_pending": 0,
                "checkpointed_source_seq": "113-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE01ygQLsZsYGqcamiZjKcRqRxwIkGRqA1H-oSbZgk1KMLCzTDE0wdWUBAF6HJIQ",
                "doc_write_failures": 0,
                "docs_read": 113,
                "docs_written": 113,
                "bulk_get_attempts": 113,
                "bulk_get_docs": 113,
                "missing_revisions_found": 113,
                "revisions_checked": 113,
                "source_seq": "113-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE01ygQLsZsYGqcamiZjKcRqRxwIkGRqA1H-oSbZgk1KMLCzTDE0wdWUBAF6HJIQ",
                "through_seq": "113-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE01ygQLsZsYGqcamiZjKcRqRxwIkGRqA1H-oSbZgk1KMLCzTDE0wdWUBAF6HJIQ"
            },
            "node": "[email protected]",
            "pid": "<0.1850.0>",
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "target": "http://adm:*****@localhost:15984/cdyno-0000003/",
            "user": null
        },
        {
            "database": "_replicator",
            "doc_id": "cdyno-0000001-0000002",
            "history": [
                {
                    "timestamp": "2017-04-29T05:01:37Z",
                    "type": "started"
                },
                {
                    "timestamp": "2017-04-29T05:01:37Z",
                    "type": "added"
                }
            ],
            "id": "e327d79214831ca4c11550b4a453c9ba+continuous",
            "info": {
                "changes_pending": null,
                "checkpointed_source_seq": 0,
                "doc_write_failures": 0,
                "docs_read": 12,
                "docs_written": 12,
                "bulk_get_attempts": 12,
                "bulk_get_docs": 12,
                "missing_revisions_found": 12,
                "revisions_checked": 12,
                "source_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg",
                "through_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg"
            },
            "node": "[email protected]",
            "pid": "<0.1757.0>",
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "target": "http://adm:*****@localhost:15984/cdyno-0000002/",
            "user": null
        }
    ],
    "offset": 0,
    "total_rows": 2
 }

1.2.10. /_scheduler/docs

在版本 2.1.0 中更改: 使用此端点监控基于文档的复制的状态。以前需要轮询文档和 _active_tasks 才能获得完整的状态摘要。

在版本 3.0.0 中更改: 在错误状态下,“info” 字段从字符串更改为对象。

版本 3.3 中的变更: “info” 对象中添加了 “bulk_get_attempts”“bulk_get_docs”

GET /_scheduler/docs

复制文档状态列表。包括所有文档的信息,即使是在 completedfailed 状态下。对于每个文档,它将返回文档 ID、数据库、复制 ID、源和目标以及其他信息。

请求头:
响应头:
查询参数:
  • limit (数字) – 要返回的结果数量。

  • skip (数字) – 从开头开始跳过的结果数量,如果按文档 ID 排序

响应 JSON 对象:
  • offset (数字) – 跳过的结果数量。

  • total_rows (数字) – 复制文档的总数。

  • id (字符串) – 复制 ID,如果状态为 completedfailed,则为 null

  • state (字符串) – 以下状态之一(有关描述,请参阅 复制状态):initializingrunningcompletedpendingcrashingerrorfailed

  • database (字符串) – 复制文档来源的数据库

  • doc_id (字符串) – 复制文档 ID。

  • node (字符串) – 运行作业的集群节点。

  • source (字符串) – 复制源。

  • target (字符串) – 复制目标。

  • start_time (字符串) – 复制启动的时间戳。

  • last_updated (字符串) – 最后一次状态更新的时间戳

  • info (对象) – 将包含有关状态的附加信息。对于错误,这将是一个包含 "error" 字段和字符串值的 对象。对于成功状态,请参见下文。

  • error_count (数字) – 连续错误计数。指示此复制崩溃的次数。复制将根据此数字以指数级回退进行重试。一旦复制成功,此计数将重置为 0。可用于了解特定复制为何没有进展。

状态码:

调度程序文档的 info 字段

JSON 参数:
  • revisions_checked (数字) – 自此复制开始以来已检查的修订次数。

  • missing_revisions_found (数字) – 在源中找到但在目标中缺失的修订次数。

  • docs_read (数字) – 从源读取的文档数量。

  • docs_written (数字) – 写入目标的文档数量。

  • bulk_get_attempts (数字) – 使用 _bulk_get 获取文档修订版本的尝试次数。

  • bulk_get_docs (数字) – 使用 _bulk_get 成功获取的文档总数。

  • changes_pending (数字) – 尚未复制的更改数量。

  • doc_write_failures (数字) – 无法写入目标的文档数量。

  • checkpointed_source_seq (对象) – 最后成功复制的源序列 ID。

请求:

GET /_scheduler/docs HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Content-Type: application/json
Date: Sat, 29 Apr 2017 05:10:08 GMT
Server: Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked

{
    "docs": [
        {
            "database": "_replicator",
            "doc_id": "cdyno-0000001-0000002",
            "error_count": 0,
            "id": "e327d79214831ca4c11550b4a453c9ba+continuous",
            "info": {
                "changes_pending": 15,
                "checkpointed_source_seq": "60-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYEyVygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSSpgk4yMkhITjS0wdWUBAENCJEg",
                "doc_write_failures": 0,
                "docs_read": 67,
                "bulk_get_attempts": 67,
                "bulk_get_docs": 67,
                "docs_written": 67,
                "missing_revisions_found": 67,
                "revisions_checked": 67,
                "source_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8",
                "through_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8"
            },
            "last_updated": "2017-04-29T05:01:37Z",
            "node": "[email protected]",
            "source_proxy": null,
            "target_proxy": null,
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "state": "running",
            "target": "http://adm:*****@localhost:15984/cdyno-0000002/"
        },
        {
            "database": "_replicator",
            "doc_id": "cdyno-0000001-0000003",
            "error_count": 0,
            "id": "8f5b1bd0be6f9166ccfd36fc8be8fc22+continuous",
            "info": {
                "changes_pending": null,
                "checkpointed_source_seq": 0,
                "doc_write_failures": 0,
                "bulk_get_attempts": 12,
                "bulk_get_docs": 12,
                "docs_read": 12,
                "docs_written": 12,
                "missing_revisions_found": 12,
                "revisions_checked": 12,
                "source_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg",
                "through_seq": "12-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE1lzgQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSexgk4yMkhITjS0wdWUBADfEJBg"
            },
            "last_updated": "2017-04-29T05:01:37Z",
            "node": "[email protected]",
            "source_proxy": null,
            "target_proxy": null,
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "state": "running",
            "target": "http://adm:*****@localhost:15984/cdyno-0000003/"
        }
    ],
    "offset": 0,
    "total_rows": 2
}
GET /_scheduler/docs/{replicator_db}

获取来自复制器数据库的复制文档信息。默认复制器数据库是 _replicator,但如果其他复制器数据库的名称以 /_replicator 结尾,则它们可能存在。

注意

为了方便起见,复制器数据库名称中的斜杠 (/) 不需要转义。因此,/_scheduler/docs/other/_replicator 是有效的,并且等效于 /_scheduler/docs/other%2f_replicator

请求头:
响应头:
查询参数:
  • limit (数字) – 要返回的结果数量。

  • skip (数字) – 从开头开始跳过的结果数量,如果按文档 ID 排序

响应 JSON 对象:
  • offset (数字) – 跳过的结果数量。

  • total_rows (数字) – 复制文档的总数。

  • id (字符串) – 复制 ID,如果状态为 completedfailed,则为 null

  • state (字符串) – 以下状态之一(有关描述,请参阅 复制状态):initializingrunningcompletedpendingcrashingerrorfailed

  • database (字符串) – 复制文档来源的数据库

  • doc_id (字符串) – 复制文档 ID。

  • node (字符串) – 运行作业的集群节点。

  • source (字符串) – 复制源。

  • target (字符串) – 复制目标。

  • start_time (字符串) – 复制启动的时间戳。

  • last_update (字符串) – 最后一次状态更新的时间戳

  • info (对象) – 将包含有关状态的附加信息。对于错误,这将是一个包含 "error" 字段和字符串值的 对象。对于成功状态,请参见下文。

  • error_count (数字) – 连续错误计数。指示此复制崩溃的次数。复制将根据此数字以指数级回退进行重试。一旦复制成功,此计数将重置为 0。可用于了解特定复制为何没有进展。

状态码:

调度程序文档的 info 字段

JSON 参数:
  • revisions_checked (数字) – 自此复制开始以来已检查的修订次数。

  • missing_revisions_found (数字) – 在源中找到但在目标中缺失的修订次数。

  • docs_read (数字) – 从源读取的文档数量。

  • docs_written (数字) – 写入目标的文档数量。

  • bulk_get_attempts (数字) – 使用 _bulk_get 获取文档修订版本的尝试次数。

  • bulk_get_docs (数字) – 使用 _bulk_get 成功获取的文档总数。

  • changes_pending (数字) – 尚未复制的更改数量。

  • doc_write_failures (数字) – 无法写入目标的文档数量。

  • checkpointed_source_seq (对象) – 最后成功复制的源序列 ID。

请求:

GET /_scheduler/docs/other/_replicator HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Content-Type: application/json
Date: Sat, 29 Apr 2017 05:10:08 GMT
Server: Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked

{
    "docs": [
        {
            "database": "other/_replicator",
            "doc_id": "cdyno-0000001-0000002",
            "error_count": 0,
            "id": "e327d79214831ca4c11550b4a453c9ba+continuous",
            "info": {
                "changes_pending": 0,
                "checkpointed_source_seq": "60-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYEyVygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSSpgk4yMkhITjS0wdWUBAENCJEg",
                "doc_write_failures": 0,
                "docs_read": 67,
                "bulk_get_attempts": 67,
                "bulk_get_docs": 67,
                "docs_written": 67,
                "missing_revisions_found": 67,
                "revisions_checked": 67,
                "source_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8",
                "through_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8"
            },
            "last_updated": "2017-04-29T05:01:37Z",
            "node": "[email protected]",
            "source_proxy": null,
            "target_proxy": null,
            "source": "http://myserver.com/foo",
            "start_time": "2017-04-29T05:01:37Z",
            "state": "running",
            "target": "http://adm:*****@localhost:15984/cdyno-0000002/"
        }
    ],
    "offset": 0,
    "total_rows": 1
}
GET /_scheduler/docs/{replicator_db}/{docid}

注意

为了方便起见,复制器数据库名称中的斜杠 (/) 不需要转义。因此,/_scheduler/docs/other/_replicator 是有效的,并且等效于 /_scheduler/docs/other%2f_replicator

请求头:
响应头:
响应 JSON 对象:
  • id (字符串) – 复制 ID,如果状态为 completedfailed,则为 null

  • state (字符串) – 以下状态之一(有关描述,请参阅 复制状态):initializingrunningcompletedpendingcrashingerrorfailed

  • database (字符串) – 复制文档来源的数据库

  • doc_id (字符串) – 复制文档 ID。

  • node (字符串) – 运行作业的集群节点。

  • source (字符串) – 复制源。

  • target (字符串) – 复制目标。

  • start_time (字符串) – 复制启动的时间戳。

  • last_update (字符串) – 最后一次状态更新的时间戳

  • info (对象) – 将包含有关状态的附加信息。对于错误,这将是一个包含 "error" 字段和字符串值的 对象。对于成功状态,请参见下文。

  • error_count (数字) – 连续错误计数。指示此复制崩溃的次数。复制将根据此数字以指数级回退进行重试。一旦复制成功,此计数将重置为 0。可用于了解特定复制为何没有进展。

状态码:

调度程序文档的 info 字段

JSON 参数:
  • revisions_checked (数字) – 自此复制开始以来已检查的修订次数。

  • missing_revisions_found (数字) – 在源中找到但在目标中缺失的修订次数。

  • docs_read (数字) – 从源读取的文档数量。

  • docs_written (数字) – 写入目标的文档数量。

  • bulk_get_attempts (数字) – 使用 _bulk_get 获取文档修订版本的尝试次数。

  • bulk_get_docs (数字) – 使用 _bulk_get 成功获取的文档总数。

  • changes_pending (数字) – 尚未复制的更改数量。

  • doc_write_failures (数字) – 无法写入目标的文档数量。

  • checkpointed_source_seq (对象) –

    最后

    成功复制的源序列 ID。

    请求:

GET /_scheduler/docs/other/_replicator/cdyno-0000001-0000002 HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Content-Type: application/json
Date: Sat, 29 Apr 2017 05:10:08 GMT
Server: Server: CouchDB (Erlang/OTP)
Transfer-Encoding: chunked

{
    "database": "other/_replicator",
    "doc_id": "cdyno-0000001-0000002",
    "error_count": 0,
    "id": "e327d79214831ca4c11550b4a453c9ba+continuous",
    "info": {
        "changes_pending": 0,
        "checkpointed_source_seq": "60-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYEyVygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSSpgk4yMkhITjS0wdWUBAENCJEg",
        "doc_write_failures": 0,
        "docs_read": 67,
        "bulk_get_attempts": 67,
        "bulk_get_docs": 67,
        "docs_written": 67,
        "missing_revisions_found": 67,
        "revisions_checked": 67,
        "source_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8",
        "through_seq": "67-g1AAAACTeJzLYWBgYMpgTmHgz8tPSTV0MDQy1zMAQsMckEQiQ1L9____szKYE2VygQLsBsZm5pZJJpjKcRqRxwIkGRqA1H-oSepgk4yMkhITjS0wdWUBAEVKJE8"
    },
    "last_updated": "2017-04-29T05:01:37Z",
    "node": "[email protected]",
    "source_proxy": null,
    "target_proxy": null,
    "source": "http://myserver.com/foo",
    "start_time": "2017-04-29T05:01:37Z",
    "state": "running",
    "target": "http://adm:*****@localhost:15984/cdyno-0000002/"
}

1.2.11. /_node/{node-name}

GET /_node/{node-name}

/_node/{node-name} 端点可用于确认处理请求的服务器的 Erlang 节点名称。当访问 /_node/_local 以检索此信息时,这最有用。反复检索 CouchDB 端点的此信息可能有助于确定 CouchDB 集群是否通过反向负载均衡器正确代理。

请求头:
  • Accept

    • application/json

    • text/plain

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

状态码:
  • 200 OK – 请求已成功完成

请求:

GET /_node/_local HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 27
Content-Type: application/json
Date: Tue, 28 Jan 2020 19:25:51 GMT
Server: CouchDB (Erlang OTP)
X-Couch-Request-ID: 5b8db6c677
X-CouchDB-Body-Time: 0

{"name":"[email protected]"}

1.2.12. /_node/{node-name}/_stats

GET /_node/{node-name}/_stats

_stats 资源返回一个 JSON 对象,其中包含正在运行的服务器的统计信息。该对象结构化了顶级部分,将一系列条目的统计信息整理在一起,每个单独的统计信息都易于识别,并且每个统计信息的内容都是自描述的。

统计信息在内部以 可配置的间隔 采样。在监控 _stats 端点时,您需要使用至少两倍于此的轮询频率才能观察到准确的结果。例如,如果 间隔 为 10 秒,则至少每 5 秒轮询一次 _stats

文字字符串 _local 充当本地节点名称的别名,因此对于所有统计信息 URL,{node-name} 可以替换为 _local,以与本地节点的统计信息进行交互。

请求头:
  • Accept

    • application/json

    • text/plain

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

状态码:
  • 200 OK – 请求已成功完成

请求:

GET /_node/_local/_stats/couchdb/request_time HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 187
Content-Type: application/json
Date: Sat, 10 Aug 2013 11:41:11 GMT
Server: CouchDB (Erlang/OTP)

{
  "value": {
    "min": 0,
    "max": 0,
    "arithmetic_mean": 0,
    "geometric_mean": 0,
    "harmonic_mean": 0,
    "median": 0,
    "variance": 0,
    "standard_deviation": 0,
    "skewness": 0,
    "kurtosis": 0,
    "percentile": [
      [
        50,
        0
      ],
      [
        75,
        0
      ],
      [
        90,
        0
      ],
      [
        95,
        0
      ],
      [
        99,
        0
      ],
      [
        999,
        0
      ]
    ],
    "histogram": [
      [
        0,
        0
      ]
    ],
    "n": 0
  },
  "type": "histogram",
  "desc": "length of a request inside CouchDB without MochiWeb"
}

这些字段提供了当前值、最小值和最大值,以及统计平均值和数量的集合。每种情况下的数量没有定义,但以下描述提供了足够的细节来确定单位。

统计信息按“组”报告。统计信息分为以下顶级部分

  • couch_log: 日志记录子系统

  • couch_replicator: 复制调度程序和子系统

  • couchdb: 主要 CouchDB 数据库操作

  • fabric: 与集群相关的操作

  • global_changes: 全局更改提要

  • mem3: 与节点成员资格相关的统计信息

  • pread: CouchDB 与文件相关的异常

  • rexi: 与集群内部 RPC 相关的统计信息

统计信息的类型包含在 type 字段中,并且是以下之一

  • counter: 单调递增计数器,在重启时重置

  • histogram: 带有有意义细分的数值集合。范围限定为当前 收集间隔

  • gauge: 可以上下波动的单个数值

您还可以通过将统计信息部分和统计信息 ID 作为 URL 路径的一部分引用来访问单个统计信息。例如,要获取目标节点的 couchdb 部分中的 request_time 统计信息,您可以使用

GET /_node/_local/_stats/couchdb/request_time HTTP/1.1

这将返回一个完整的统计信息对象,与完整请求一样,但只包含请求的单个统计信息。

1.2.13. /_node/{node-name}/_prometheus

GET /_node/{node-name}/_prometheus

_prometheus 资源返回一个 text/plain 响应,该响应整合了我们的 /_node/{node-name}/_stats/_node/{node-name}/_system 端点。格式由 Prometheus 确定。格式版本为 2.0。

请求:

GET /_node/_local/_prometheus HTTP/1.1
Accept: text/plain
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 187
Content-Type: text/plain; version=2.0
Date: Sat, 10 May 2020 11:41:11 GMT
Server: CouchDB (Erlang/OTP)

# TYPE couchdb_couch_log_requests_total counter
couchdb_couch_log_requests_total{level="alert"} 0
couchdb_couch_log_requests_total{level="critical"} 0
couchdb_couch_log_requests_total{level="debug"} 0
couchdb_couch_log_requests_total{level="emergency"} 0
couchdb_couch_log_requests_total{level="error"} 0
couchdb_couch_log_requests_total{level="info"} 8
couchdb_couch_log_requests_total{level="notice"} 51
couchdb_couch_log_requests_total{level="warning"} 0
# TYPE couchdb_couch_replicator_changes_manager_deaths_total counter
couchdb_couch_replicator_changes_manager_deaths_total 0
# TYPE couchdb_couch_replicator_changes_queue_deaths_total counter
couchdb_couch_replicator_changes_queue_deaths_total 0
# TYPE couchdb_couch_replicator_changes_read_failures_total counter
couchdb_couch_replicator_changes_read_failures_total 0
# TYPE couchdb_couch_replicator_changes_reader_deaths_total counter
couchdb_couch_replicator_changes_reader_deaths_total 0
# TYPE couchdb_couch_replicator_checkpoints_failure_total counter
couchdb_couch_replicator_checkpoints_failure_total 0
# TYPE couchdb_couch_replicator_checkpoints_total counter
couchdb_couch_replicator_checkpoints_total 0
# TYPE couchdb_couch_replicator_cluster_is_stable gauge
couchdb_couch_replicator_cluster_is_stable 1
# TYPE couchdb_couch_replicator_connection_acquires_total counter
couchdb_couch_replicator_connection_acquires_total 0
# TYPE couchdb_couch_replicator_connection_closes_total counter
couchdb_couch_replicator_connection_closes_total 0
# TYPE couchdb_couch_replicator_connection_creates_total counter
couchdb_couch_replicator_connection_creates_total 0
# TYPE couchdb_couch_replicator_connection_owner_crashes_total counter
couchdb_couch_replicator_connection_owner_crashes_total 0
# TYPE couchdb_couch_replicator_connection_releases_total counter
couchdb_couch_replicator_connection_releases_total 0
# TYPE couchdb_couch_replicator_connection_worker_crashes_total counter
couchdb_couch_replicator_connection_worker_crashes_total 0
# TYPE couchdb_couch_replicator_db_scans_total counter
couchdb_couch_replicator_db_scans_total 1
# TYPE couchdb_couch_replicator_docs_completed_state_updates_total counter
couchdb_couch_replicator_docs_completed_state_updates_total 0
# TYPE couchdb_couch_replicator_docs_db_changes_total counter
couchdb_couch_replicator_docs_db_changes_total 0
# TYPE couchdb_couch_replicator_docs_dbs_created_total counter
couchdb_couch_replicator_docs_dbs_created_total 0
# TYPE couchdb_couch_replicator_docs_dbs_deleted_total counter
couchdb_couch_replicator_docs_dbs_deleted_total 0
# TYPE couchdb_couch_replicator_docs_dbs_found_total counter
couchdb_couch_replicator_docs_dbs_found_total 2
# TYPE couchdb_couch_replicator_docs_failed_state_updates_total counter
couchdb_couch_replicator_docs_failed_state_updates_total 0
# TYPE couchdb_couch_replicator_failed_starts_total counter
couchdb_couch_replicator_failed_starts_total 0
# TYPE couchdb_couch_replicator_jobs_adds_total counter
couchdb_couch_replicator_jobs_adds_total 0
# TYPE couchdb_couch_replicator_jobs_crashed gauge
couchdb_couch_replicator_jobs_crashed 0
# TYPE couchdb_couch_replicator_jobs_crashes_total counter
couchdb_couch_replicator_jobs_crashes_total 0
# TYPE couchdb_couch_replicator_jobs_duplicate_adds_total counter
couchdb_couch_replicator_jobs_duplicate_adds_total 0
# TYPE couchdb_couch_replicator_jobs_pending gauge
couchdb_couch_replicator_jobs_pending 0
# TYPE couchdb_couch_replicator_jobs_removes_total counter
couchdb_couch_replicator_jobs_removes_total 0
# TYPE couchdb_couch_replicator_jobs_running gauge
couchdb_couch_replicator_jobs_running 0
# TYPE couchdb_couch_replicator_jobs_starts_total counter
couchdb_couch_replicator_jobs_starts_total 0
# TYPE couchdb_couch_replicator_jobs_stops_total counter
couchdb_couch_replicator_jobs_stops_total 0
# TYPE couchdb_couch_replicator_jobs_total gauge
couchdb_couch_replicator_jobs_total 0
# TYPE couchdb_couch_replicator_requests_total counter
couchdb_couch_replicator_requests_total 0
# TYPE couchdb_couch_replicator_responses_failure_total counter
couchdb_couch_replicator_responses_failure_total 0
# TYPE couchdb_couch_replicator_responses_total counter
couchdb_couch_replicator_responses_total 0
# TYPE couchdb_couch_replicator_stream_responses_failure_total counter
couchdb_couch_replicator_stream_responses_failure_total 0
# TYPE couchdb_couch_replicator_stream_responses_total counter
couchdb_couch_replicator_stream_responses_total 0
# TYPE couchdb_couch_replicator_worker_deaths_total counter
couchdb_couch_replicator_worker_deaths_total 0
# TYPE couchdb_couch_replicator_workers_started_total counter
couchdb_couch_replicator_workers_started_total 0
# TYPE couchdb_auth_cache_requests_total counter
couchdb_auth_cache_requests_total 0
# TYPE couchdb_auth_cache_misses_total counter
couchdb_auth_cache_misses_total 0
# TYPE couchdb_collect_results_time_seconds summary
couchdb_collect_results_time_seconds{quantile="0.5"} 0.0
couchdb_collect_results_time_seconds{quantile="0.75"} 0.0
couchdb_collect_results_time_seconds{quantile="0.9"} 0.0
couchdb_collect_results_time_seconds{quantile="0.95"} 0.0
couchdb_collect_results_time_seconds{quantile="0.99"} 0.0
couchdb_collect_results_time_seconds{quantile="0.999"} 0.0
couchdb_collect_results_time_seconds_sum 0.0
couchdb_collect_results_time_seconds_count 0
# TYPE couchdb_couch_server_lru_skip_total counter
couchdb_couch_server_lru_skip_total 0
# TYPE couchdb_database_purges_total counter
couchdb_database_purges_total 0
# TYPE couchdb_database_reads_total counter
couchdb_database_reads_total 0
# TYPE couchdb_database_writes_total counter
couchdb_database_writes_total 0
# TYPE couchdb_db_open_time_seconds summary
couchdb_db_open_time_seconds{quantile="0.5"} 0.0
couchdb_db_open_time_seconds{quantile="0.75"} 0.0
couchdb_db_open_time_seconds{quantile="0.9"} 0.0
couchdb_db_open_time_seconds{quantile="0.95"} 0.0
couchdb_db_open_time_seconds{quantile="0.99"} 0.0
couchdb_db_open_time_seconds{quantile="0.999"} 0.0
couchdb_db_open_time_seconds_sum 0.0
couchdb_db_open_time_seconds_count 0
# TYPE couchdb_dbinfo_seconds summary
couchdb_dbinfo_seconds{quantile="0.5"} 0.0
couchdb_dbinfo_seconds{quantile="0.75"} 0.0
couchdb_dbinfo_seconds{quantile="0.9"} 0.0
couchdb_dbinfo_seconds{quantile="0.95"} 0.0
couchdb_dbinfo_seconds{quantile="0.99"} 0.0
couchdb_dbinfo_seconds{quantile="0.999"} 0.0
couchdb_dbinfo_seconds_sum 0.0
couchdb_dbinfo_seconds_count 0
# TYPE couchdb_document_inserts_total counter
couchdb_document_inserts_total 0
# TYPE couchdb_document_purges_failure_total counter
couchdb_document_purges_failure_total 0
# TYPE couchdb_document_purges_success_total counter
couchdb_document_purges_success_total 0
# TYPE couchdb_document_purges_total_total counter
couchdb_document_purges_total_total 0
# TYPE couchdb_document_writes_total counter
couchdb_document_writes_total 0
# TYPE couchdb_httpd_aborted_requests_total counter
couchdb_httpd_aborted_requests_total 0
# TYPE couchdb_httpd_all_docs_timeouts_total counter
couchdb_httpd_all_docs_timeouts_total 0
# TYPE couchdb_httpd_bulk_docs_seconds summary
couchdb_httpd_bulk_docs_seconds{quantile="0.5"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.75"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.9"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.95"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.99"} 0.0
couchdb_httpd_bulk_docs_seconds{quantile="0.999"} 0.0
couchdb_httpd_bulk_docs_seconds_sum 0.0
couchdb_httpd_bulk_docs_seconds_count 0
...remaining couchdb metrics from _stats and _system

如果指定了额外的端口配置选项,则客户端可以使用该端口调用此 API,该端口不需要身份验证。此选项默认情况下为 false(关闭)。当选项为 true(打开)时,3 节点集群的默认端口为 179862798637986。有关详细信息,请参阅 Prometheus 端点的配置

GET /_node/_local/_prometheus HTTP/1.1
Accept: text/plain
Host: localhost:17986

1.2.14. /_node/{node-name}/_system

GET /_node/{node-name}/_system

_system 资源返回一个 JSON 对象,其中包含正在运行的服务器的各种系统级统计信息。该对象结构化了顶级部分,将一系列条目的统计信息整理在一起,每个单独的统计信息都易于识别,并且每个统计信息的内容都是自描述的。

文字字符串 _local 充当本地节点名称的别名,因此对于所有统计信息 URL,{node-name} 可以替换为 _local,以与本地节点的统计信息进行交互。

请求头:
  • Accept

    • application/json

    • text/plain

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

状态码:
  • 200 OK – 请求已成功完成

请求:

GET /_node/_local/_system HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 187
Content-Type: application/json
Date: Sat, 10 Aug 2013 11:41:11 GMT
Server: CouchDB (Erlang/OTP)

{
  "uptime": 259,
  "memory": {}
}

这些统计信息通常仅供 CouchDB 开发人员使用。

1.2.15. /_node/{node-name}/_restart

POST /_node/{node-name}/_restart

此 API 仅用于促进集成测试,不建议在生产环境中使用。

状态码:
  • 200 OK – 请求已成功完成

1.2.16. /_node/{node-name}/_versions

GET /_node/{node-name}/_versions

_versions 资源返回一个 JSON 对象,其中包含正在运行的服务器的各种系统级信息。

字面字符串 _local 用作本地节点名称的别名,因此对于所有统计信息 URL,{node-name} 可以替换为 _local,以与本地节点的信息进行交互。

请求头:
  • Accept

    • application/json

    • text/plain

响应头:
状态码:
  • 200 OK – 请求已成功完成

请求:

GET /_node/_local/_versions HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 368
Content-Type: application/json
Date: Sat, 03 Sep 2022 08:12:12 GMT
Server: CouchDB/3.2.2-ea382cf (Erlang OTP/25)

{
    "javascript_engine": {
        "version": "91",
        "name": "spidermonkey"
    },
    "erlang": {
        "version": "25.0.4",
        "supported_hashes": [
            "sha",
            "sha224",
            "sha256",
        ]
    },
    "collation_driver": {
        "name": "libicu",
        "library_version": "70.1",
        "collator_version": "153.112",
        "collation_algorithm_version": "14"
    }
}

1.2.17. /_search_analyze

警告

搜索端点需要一个连接到每个集群节点的正在运行的搜索插件。有关详细信息,请参阅 搜索插件安装

版本 3.0 中的新增功能。

POST /_search_analyze

测试 Lucene 分析器标记化对示例文本的结果。

参数:
  • field – 分析器类型

  • text – 要测试的分析器标记

状态码:

请求:

POST /_search_analyze HTTP/1.1
Host: localhost:5984
Content-Type: application/json

{"analyzer":"english", "text":"running"}

响应:

{
    "tokens": [
        "run"
    ]
}

1.2.18. /_utils

GET /_utils

访问 CouchDB 的内置 Fauxton 管理界面。

响应头:
  • 位置 – 新的 URI 位置

状态码:
GET /_utils/
响应头:
状态码:
  • 200 OK – 请求已成功完成

1.2.19. /_up

版本 2.0 中新增。

GET /_up

确认服务器已启动、正在运行并准备好响应请求。如果 maintenance_modetruenolb,则端点将返回 404 响应。

响应头:
状态码:

响应:

HTTP/1.1 200 OK
Cache-Control: must-revalidate
Content-Length: 16
Content-Type: application/json
Date: Sat, 17 Mar 2018 04:46:26 GMT
Server: CouchDB/2.2.0-f999071ec (Erlang OTP/19)
X-Couch-Request-ID: c57a3b2787
X-CouchDB-Body-Time: 0

{"status":"ok"}

1.2.20. /_uuids

版本 2.0.0 中的更改。

GET /_uuids

从 CouchDB 实例请求一个或多个通用唯一标识符 (UUID)。响应是一个 JSON 对象,提供 UUID 列表。

请求头:
  • Accept

    • application/json

    • text/plain

查询参数:
  • count (number) – 要返回的 UUID 数量。默认值为 1

响应头:
  • Content-Type

    • application/json

    • text/plain; charset=utf-8

  • ETag – 响应哈希

状态码:

请求:

GET /_uuids?count=10 HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Content-Length: 362
Content-Type: application/json
Date: Sat, 10 Aug 2013 11:46:25 GMT
ETag: "DGRWWQFLUDWN5MRKSLKQ425XV"
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Pragma: no-cache
Server: CouchDB (Erlang/OTP)

{
    "uuids": [
        "75480ca477454894678e22eec6002413",
        "75480ca477454894678e22eec600250b",
        "75480ca477454894678e22eec6002c41",
        "75480ca477454894678e22eec6003b90",
        "75480ca477454894678e22eec6003fca",
        "75480ca477454894678e22eec6004bef",
        "75480ca477454894678e22eec600528f",
        "75480ca477454894678e22eec6005e0b",
        "75480ca477454894678e22eec6006158",
        "75480ca477454894678e22eec6006161"
    ]
}

UUID 类型由 CouchDB 配置中的 UUID algorithm 设置决定。

UUID 类型可以通过 配置 API 随时更改。例如,可以通过发送以下 HTTP 请求将 UUID 类型更改为 random

PUT http://couchdb:5984/_node/nonode@nohost/_config/uuids/algorithm HTTP/1.1
Content-Type: application/json
Accept: */*

"random"

您可以通过获取 UUID 列表来验证更改

{
    "uuids" : [
        "031aad7b469956cf2826fcb2a9260492",
        "6ec875e15e6b385120938df18ee8e496",
        "cff9e881516483911aa2f0e98949092d",
        "b89d37509d39dd712546f9510d4a9271",
        "2e0dbf7f6c4ad716f21938a016e4e59f"
    ]
}

1.2.21. /favicon.ico

GET /favicon.ico

用于 favicon.ico 网站图标的二进制内容。

响应头:
状态码:

1.2.22. /_reshard

版本 2.4 中的新增功能。

GET /_reshard

返回已完成、失败、正在运行、已停止和总作业的数量,以及集群上重新分片的狀態。

请求头:
响应头:
响应 JSON 对象:
  • state (string) – stoppedrunning

  • state_reason (string) – null 或描述与状态关联的附加信息或原因的字符串

  • completed (number) – 已完成的重新分片作业数量

  • failed (number) – 失败的重新分片作业数量

  • running (number) – 正在运行的重新分片作业数量

  • stopped (number) – 已停止的重新分片作业数量

  • total (number) – 重新分片作业的总数

状态码:

请求:

GET /_reshard HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "completed": 21,
    "failed": 0,
    "running": 3,
    "state": "running",
    "state_reason": null,
    "stopped": 0,
    "total": 24
}
GET /_reshard/state

返回重新分片的狀態以及有关狀態的可选信息。

请求头:
响应头:
响应 JSON 对象:
  • state (string) – stoppedrunning

  • state_reason (string) – 与狀態关联的附加信息或原因

状态码:

请求:

GET /_reshard/state HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "reason": null,
    "state": "running"
}
PUT /_reshard/state

更改集群上的重新分片狀態。狀態为 stoppedrunning。这将在集群的所有节点上启动和停止全局重新分片。如果有任何正在运行的作业,它们将在狀態更改为 stopped 时停止。当狀態更改回 running 时,这些作业将继续运行。

请求头:
响应头:
请求 JSON 对象:
  • state (string) – stoppedrunning

  • state_reason (string) – 描述与狀態关联的附加信息或原因的可选字符串

响应 JSON 对象:
  • ok (boolean) – true

状态码:

请求:

PUT /_reshard/state HTTP/1.1
Accept: application/json
Host: localhost:5984

{
    "state": "stopped",
    "reason": "Rebalancing in progress"
}

响应:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "ok": true
}
GET /_reshard/jobs

注意

响应的形状以及 total_rowsoffset 字段(尤其是)旨在与 _scheduler/jobs 端点保持一致。

请求头:
响应头:
响应 JSON 对象:
  • jobs (list) – json 对象数组,每个重新分片作业一个。有关每个作业的字段,请参阅 /_reshard/job/{jobid} 端点。

  • offset (number) – 作业对象列表中的偏移量。当前硬编码为 0

  • total_rows (number) – 集群上重新分片作业的总数。

状态码:

请求:

GET /_reshard/jobs HTTP/1.1
Accept: application/json

响应:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "jobs": [
        {
            "history": [
                {
                    "detail": null,
                    "timestamp": "2019-03-28T15:28:02Z",
                    "type": "new"
                },
                {
                    "detail": "initial_copy",
                    "timestamp": "2019-03-28T15:28:02Z",
                    "type": "running"
                }
            ],
            "id": "001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a",
            "job_state": "completed",
            "node": "[email protected]",
            "source": "shards/00000000-1fffffff/d1.1553786862",
            "split_state": "completed",
            "start_time": "2019-03-28T15:28:02Z",
            "state_info": {},
            "target": [
                "shards/00000000-0fffffff/d1.1553786862",
                "shards/10000000-1fffffff/d1.1553786862"
            ],
            "type": "split",
            "update_time": "2019-03-28T15:28:08Z"
        }
    ],
    "offset": 0,
    "total_rows": 24
}
GET /_reshard/jobs/{jobid}

获取有关由 jobid 标识的重新分片作业的信息。

请求头:
响应头:
响应 JSON 对象:
  • id (string) – 作业 ID。

  • type (string) – 目前仅实现了 split

  • job_state (string) – 作业的运行狀態。可以是 newrunningstoppedcompletedfailed 之一。

  • split_state (string) – 特定于分片拆分的狀態详细信息。它指示分片拆分进展到何种程度,可以是 newinitial_copytopoff1build_indicestopoff2copy_local_docsupdate_shardmapwait_source_closetopoff3source_deletecompleted 之一。

  • state_info (object) – 与当前狀態关联的可选附加信息。

  • source (string) – 对于 split 作业,这将是源分片。

  • target (list) – 对于 split 作业,这将是两个或多个目标分片的列表。

  • history (list) – 记录作业狀態转换历史记录的 json 对象列表。

状态码:

请求:

GET /_reshard/jobs/001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a HTTP/1.1
Accept: application/json

响应:

HTTP/1.1 200 OK
Content-Type: application/json

{

    "id": "001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a",
    "job_state": "completed",
    "node": "[email protected]",
    "source": "shards/00000000-1fffffff/d1.1553786862",
    "split_state": "completed",
    "start_time": "2019-03-28T15:28:02Z",
    "state_info": {},
    "target": [
        "shards/00000000-0fffffff/d1.1553786862",
        "shards/10000000-1fffffff/d1.1553786862"
    ],
    "type": "split",
    "update_time": "2019-03-28T15:28:08Z",
    "history": [
        {
            "detail": null,
            "timestamp": "2019-03-28T15:28:02Z",
            "type": "new"
        },
        {
            "detail": "initial_copy",
            "timestamp": "2019-03-28T15:28:02Z",
            "type": "running"
        }
    ]
}
POST /_reshard/jobs

根据请求中指定的字段,将创建一个或多个重新分片作业。响应是一个 json 数组结果。每个结果对象代表特定节点和范围的单个重新分片作业。一些响应可能成功,而另一些可能失败。成功的結果将具有 "ok": true 键和值,而失败的作业将具有 "error": "{error_message}" 键和值。

请求头:
响应头:
请求 JSON 对象:
  • 类型 (字符串) – 作业类型。目前仅接受 "split"

  • db (字符串) – 要拆分的数据库。这与 "shard" 字段互斥。

  • node (字符串) – 在特定节点上拆分分片。这是一个可选参数。该值应为 _membership 端点返回的节点之一。

  • range (字符串) – 在给定范围内拆分分片副本。范围格式为 hhhhhhhh-hhhhhhhh,其中 h 是十六进制数字。使用此格式是因为这是文件系统中表示范围的方式。此参数是可选的,并且与 "shard" 字段互斥。

  • shard (字符串) – 拆分特定分片。分片应指定为 "shards/{range}/{db}.{suffix}"。其中 range 具有 hhhhhhhh-hhhhhhhh 格式,db 是数据库名称,suffix 是分片(时间戳)创建后缀。

  • error (字符串) – 如果无法创建作业,则显示错误消息。

  • node – 创建作业并正在运行的集群节点。

响应 JSON 对象:
  • ok (布尔值) – 如果作业创建成功,则为 true

状态码:

请求:

POST /_reshard/jobs HTTP/1.1
Accept: application/json
Content-Type: application/json

{
   "db": "db3",
   "range": "80000000-ffffffff",
   "type": "split"
}

响应:

HTTP/1.1 201 Created
Content-Type: application/json

[
    {
        "id": "001-30d7848a6feeb826d5e3ea5bb7773d672af226fd34fd84a8fb1ca736285df557",
        "node": "[email protected]",
        "ok": true,
        "shard": "shards/80000000-ffffffff/db3.1554148353"
    },
    {
        "id": "001-c2d734360b4cb3ff8b3feaccb2d787bf81ce2e773489eddd985ddd01d9de8e01",
        "node": "[email protected]",
        "ok": true,
        "shard": "shards/80000000-ffffffff/db3.1554148353"
    }
]
DELETE /_reshard/jobs/{jobid}

如果作业正在运行,请停止作业,然后将其删除。

响应 JSON 对象:
  • ok (布尔值) – 如果作业成功删除,则为 true

状态码:

请求:

DELETE /_reshard/jobs/001-171d1211418996ff47bd610b1d1257fc4ca2628868def4a05e63e8f8fe50694a HTTP/1.1

响应:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "ok": true
}
GET /_reshard/jobs/{jobid}/state

返回由 jobid 标识的重新分片作业的运行状态。

请求头:
响应头:
请求 JSON 对象:
  • state (字符串) – newrunningstoppedcompletedfailed 之一。

  • state_reason (字符串) – 与状态关联的附加信息

状态码:

请求:

GET /_reshard/jobs/001-b3da04f969bbd682faaab5a6c373705cbcca23f732c386bb1a608cfbcfe9faff/state HTTP/1.1
Accept: application/json
Host: localhost:5984

响应:

HTTP/1.1 200 OK
Content-Type: application/json

{
    "reason": null,
    "state": "running"
}
PUT /_reshard/jobs/{jobid}/state

更改由 jobid 标识的特定重新分片作业的状态。状态可以从 stopped 更改为 running,或从 running 更改为 stopped。如果通过此 API 停止单个作业,即使全局重新分片状态从 stopped 切换到 running,该作业也将保持 stopped 状态。如果作业已完成,其状态将保持 completed 状态。

请求头:
响应头:
请求 JSON 对象:
  • state (string) – stoppedrunning

  • state_reason (string) – 描述与狀態关联的附加信息或原因的可选字符串

响应 JSON 对象:
  • ok (boolean) – true

状态码:

请求:

PUT /_reshard/state/001-b3da04f969bbd682faaab5a6c373705cbcca23f732c386bb1a608cfbcfe9faff/state HTTP/1.1
Accept: application/json
Host: localhost:5984

{
    "state": "stopped",
    "reason": "Rebalancing in progress"
}

响应:

HTTP/1.1 200 OK
Content-Type: application/json

{
     "ok": true
}