1.5. 2.2.x分支

1.5.1. 升级说明

  • Erlang支持的最低版本现在是17,而不是R16B03。对erlang21的支持仍在进行中,将在将来的版本中提供。

  • CouchDB现在可以使用复制了 /_session 端点针对远程CouchDB实例进行身份验证时,提高了性能,因为不必对每个请求执行重新授权。由于这种性能改进,建议将PBKDF2的工作系数增加到默认值之外 10 现代违约,如 10000 . 这是通过本地ini文件设置完成的 [couch_httpd_auth] iterations = 10000 .

    not 如果一个旧版本的CouchDB定期复制到这个实例或集群,那么就要这样做,因为CouchDB<2.2.0必须对每个请求执行身份验证,复制性能将受到影响。

    未来的版本将使增加的迭代次数成为默认值。

  • #820#1032 :现在可以在 POST /{{db}}/_all_docs/queriesPOST /{{db}}/_design_docs/queriesPOST /{{db}}/_local_docs/queries 端点。另外,还有一个新的端点 POST /{{db}}/_design/{{ddoc}}/_view/{{view}}/queries 已引入以替换 ?queries 以前为对视图进行多个查询而提供的参数。旧的 ?queries 参数 现在已弃用,并将在CouchDB的未来版本中删除。

  • 在2.1.0中降低的最大http请求限制现在已经被重新提高到4GB的限制。 (#1446 ). 有关未来版本的前进方向的讨论可在中找到 #1200#1253 .

  • #1118 :数据库的最近最少使用(LRU)缓存现在只在数据库写入时更新,而不是在读取时更新。这在非常繁忙的集群上带来了显著的性能增强。要恢复以前的行为,本地ini文件可以包含块 [couchdb] update_lru_on_read = true .

  • #1153 :CouchDB replicator现在可以使用 /_session 端点,而不是完全依赖HTTP基本身份验证头。这可以极大地提高复制性能。我们鼓励您升级任何经常充当复制客户机的节点或集群,以使用此新功能,该功能在默认情况下是启用的 (#1462

  • #1283[couchdb] enable_database_recovery 功能,它只在响应 DELETE /{{db}} 电话,现在记录在 default.ini .

  • #1330 :CouchDB externals和OS守护程序现在已正式弃用,不再有文档记录。在CouchDB的未来版本(可能是3.0.0)中,对这些特性的支持将被完全删除。

  • #1436 :CouchDB代理身份验证现在使用适当的 chttpd_auth 模块,简化本地ini文件中的配置。虽然这不是向后兼容的中断更改,但最好更新本地ini文件以引用新的 {{chttpd_auth, proxy_authentication_handler}} 处理程序而不是 couch_httpd_auth 版本,as couch_httpd 正在完全弃用。

  • #1476#1477 :过时的 update_notification 功能,被替换为 /{{db}}/_changes feeds c.couchdb1.2已被完全删除。这个特性在2.0中从来没有在数据库中起作用,只适用于碎片,这使得它实际上毫无用处。

1.5.2. 2.2.2.0版

1.5.2.1. 特征

  • 大大改进了文档。亮点包括:

    • 完全重写了 sharding 文档。
    • 开发人员安装说明 (INSTALL.*.rst
    • 最初CouchDB Wiki的大部分内容都被导入到了官方文档中。(旧的CouchDB Wiki正在被弃用。)
  • 大大改进了Faxton的功能。亮点包括:

    • 代码编辑器中的搜索支持
    • 支持相对Faxton URL( i.e. ,不总是在 /_utils
    • 针对各种身份验证机制的复制设置增强功能
    • 修复了IE10、IE11和Edge(我们希望……)
    • 现在允许解决设计文档的冲突
  • #496COUCHDB-3287 :新的可插拔存储引擎框架已登陆CouchDB。这种内部重构使CouchDB能够使用不同的后端来存储基本数据库文件本身。重构包括将现有的“遗留”存储引擎完全迁移到新框架中。

  • #603 :在没有仲裁的集群上创建新数据库时,CouchDB现在将返回一个 202 Accepted 代码(如果可能),指示至少有一个节点已将数据库记录写入磁盘,当其他节点返回联机状态时,将对其进行更新。这取代了前者 500 内部错误。

  • #1136#1139 :在没有仲裁的群集中删除数据库时,CouchDB将不再抛出 500 错误状态,但是 202 只要至少有一个节点记录删除,或 200 当所有节点都响应时。这个修补程序与为 #603 .

  • #745 :CouchDB不再无法完成带有大附件的数据库的复制。此问题的修复包括几个相关的更改:

    • 在2.1.0中降低的最大http请求限制现在已经被重新提高到4GB的限制。 (#1446 ). 有关未来版本的前进方向的讨论可在中找到 #1200#1253 .
    • 对replicatorhttp客户机的一个更新,它改进了active socket记帐,没有它,CouchDB可以停止对主http接口的响应 (#1117
    • 复制器的http客户机不再在失败时执行无条件重试 (#1177
    • 删除了CouchDB在多部分附件处理过程中丢失其RPC工作进程的跟踪的路径。 (#1178
    • 当CouchDB传输 413 Payload Too Large 在附件上传时,它现在在关闭连接之前正确刷新接收套接字,以避免TCP重置,并给客户端更好的机会解析413响应。同时,replicatorhttp客户机在处理任何413响应后正确地关闭自己的套接字。 (#1234
    • A fabric 接收未解封附件的进程不能再孤立进程,这些进程将未处理的二进制文件保留在内存中,直到所有可用内存用尽。 (#1264
    • 当使用CouchDB的本机SSL响应程序(默认为6984端口)时,会话现在默认在300秒后超时,这是为了解决使用Erlang本机SSL库时BEAM VM中的RAM爆炸问题。 (#1321
  • #822 :新终点 /_dbs_info 已添加以返回有关指定数据库列表的信息。这个端点可以代替多个查询 /{{db}} .

  • #875#1030couch_peruser 安装现在可以指定默认值 q 每个peruser创建的数据库的值与集群的不同 q 价值观。在本地ini文件中的 [couch_peruser] q .

  • #876#1068couch_peruser 现在可以通过本地ini文件配置数据库前缀 [couch_peruser] database_prefix .

  • #887 :Replicator文档现在可以包含用于创建目标数据库的参数,例如 "create_target_params": {{"q": "1"}} . 这可以帮助数据库重新加固或放置。

  • #977 :使用时 COPY 要复制文档,如果新ID包含Unicode字符,CouchDB不再失败。

  • #1095 :识别环境变量 ARGS_FILESYSCONFIG_FILECOUCHDB_ARGS_FILECOUCHDB_SYSCONFIG_FILE 去哪里找超车 vm.argssys.config 启动时的文件。

  • #1101#1425 :Mango现在可以通过添加 conflicts: true 去选芒果。

  • #1126 :保存后进行查询时,复制文档不再包含敏感凭据信息(如基本身份验证标头)。

  • #1203

    • 压缩守护进程现在有一个休眠期,在此期间它等待在完成上一个压缩之后开始下一个压缩。此值在具有许多数据库的设置中很有用(例如 couch_peruser )或许多设计文档,这可能会导致CPU峰值每 check_interval 秒。可以通过在本地ini文件中调整设置 [compaction_daemon] snooze_period . 当前默认为3秒暂停。
    • 这个 check_interval 从300秒提高到3600秒。
    • A notice -有关关闭视图索引的级别日志已降级到 debug 水平。在一个有许多设计文档的场景中,这将在日志子系统上每 [compaction_daemon] check_interval 没有明显的好处。
  • #1309#1435 :CouchDB现在在顶层报告生成时的gitsha GET / 版本字符串,在新的 git_sha 钥匙。这可以用来帮助确保CouchDB的一个未修改的版本已经被构建并且正在任何给定的机器上运行。

  • COUCHDB-2971#1346 :CouchDB现在包含一个新的内置reduce函数 _approx_count_distinct ,它使用超日志算法来估计视图索引中不同键的数量。精度目前固定为2^11个可观察值,因此使用大约1.5KB的内存。

  • #1377 :CouchDB视图缩减的终结现在发生在协调器节点上。这简化了内置的 _stats 功能。

  • #1392 :在erlang19.0或更新版本下运行CouchDB时,现在可以将消息存储在进程堆之外。对于邮箱中可能有大量邮件的Erlang进程来说,这是非常有用的,并且现在为 couch_servercouch_log_serverddoc_cachemem3_shardsrexi_server 只要可能。

  • #1424 :CouchDB本机SSL/TLS服务器 httpsd 现在通过 [httpsd] server_options ini文件设置。

  • #1440 :CouchDB现在可以配置为防止非管理员访问 GET /_all_dbs 方法指定 [chttpd] admin_only_all_dbs = true 在本地ini文件中。这个 true 设置将在以后的版本中成为默认设置。

  • #1171#1445 :CouchDB现在可以配置为在编译时使用内部Erlang MD5散列函数,当外部环境(例如支持FIPS的CentOS)中不可用时,使用 configure 旗帜 --enable-md5 . 由于此实现速度较慢,因此在一般情况下不建议这样做。

1.5.2.2. 性能

  • #958 :修订生成算法已从 O(N^2)O(N) 通过深度优先搜索方法,然后通过仅在必要时调用词干处理操作进一步改进。通过设置选项可以禁用此新算法 [couchdb] stem_interactive_updates = false 如有必要。

  • #1246 :CouchDB现在对每个数据库请求只检查一次请求授权,从而提高任何需要授权的请求的性能。

1.5.2.3. 错误修正

  • #832#1064 :Couch日志记录统计信息的跟踪已添加回每个节点 /_node/<node-name>/_stats 端点。

  • #953#973 返回 404 Not FoundGET /_scheduler 不是 405 Method Not Allowed .

  • #955/{{db}}/_bulk_docs 端点现在正确响应为 400 Bad Request 如果 new_edits 参数不是布尔值。

  • #969 :CouchDB现在返回 offsetupdate_seqkeys 提供给 GETPOST /{{db}}/_all_docs?update_seq=true 端点。这影响了PouchDB的兼容性。

  • #984#1434 :CouchDB视图现在保留 update_seq 压缩后,防止可能昂贵的客户端视图在压缩后倒带。

  • #1012 :解决复制计划程序在尝试确定群集是否足够“稳定”以继续处理复制引入的文档更新时可能遇到的理论争用条件。

  • #1051 :尝试使用无效的密码字段(非字符串)创建CouchDB用户时,返回用户友好的错误消息。

  • #1059 :数据库特定的压缩配置未正常工作。如果需要的话,语法现在还支持碎片级的自定义压缩配置(可能不是这样)

  • #1097 :当尝试检查不是“真实”文件系统(如 /run 在Linux上)。

  • #1198 :Faxton在节点本地端口上不再可用(默认为5986)。节点本地端口仅用于特定的管理任务;删除Fauxton接口可防止将节点本地端口误认为正确的CouchDB端口(默认为5984)。

  • #1165validate_doc_update 视图函数可以再次直接在Erlang中实现(在启用可选的Erlang视图服务器之后)。

  • #1223couch_config 应用程序现在可以正确地处理非持久性整数和布尔值配置更改。

  • #1242couch_os_daemons 现在可以驻留在带有空格的目录中。

  • #1258 :CouchDB现在将成功登录用户,即使密码加密非常慢。

  • #1276 :重复出错作业的复制计划程序状态现在正确地反映了 crashing 在更多场景中陈述。

  • #1375 :如果CouchDB未通过授权但通过了身份验证,它将不再删除 user_ctx 不符合要求。

  • #1390 :视图的活动大小(在数据库信息响应中返回)的计算方式不再错误,有时可能会大于磁盘上的实际文件大小。

  • #1401 :CouchDB Erlang视图不再在 couch_native 处理意外事件 function_clause 错误。

  • #1419 :删除文件时,CouchDB现在正确地忽略配置标志 enable_database_recovery 压缩数据库时设置,而不是始终保留旧的、重命名的、未压缩的数据库文件。

  • #1439 :CouchDB安装向导现在可以正确验证bindu地址。它也不再通过将内部向导设置步骤的日志记录移动到 debugnotice 水平。

1.5.2.4. 芒果

  • #816#962#1038 :如果用户为指定值 use_index 对于选择器无效(不满足覆盖率要求或正确的排序字段),请尝试返回到有效索引或完全数据库扫描,而不是返回 400 . 如果我们后退,填充一个 warning 响应中的字段。芒果还尝试使用索引 $or 只能在存在某些值时选择字段。

  • #849 :当 {{"seq_indexed": true}} ,则返回不匹配错误。现在已经修复了。

  • #927#1310 :尝试错误排序时的错误消息现在实际上很有用。

  • #951 :使用时 GET /{{db}}/_index ,仅当索引设置为默认值以外的值时才对其使用部分筛选器选择器。

  • #961 :不加前缀 _design/ 用户指定的名称已经以开头的芒果索引名称 _design/ .

  • #988#989 :当指定 use_index 值的索引无效,请正确返回 400 Bad Request 显示请求的索引对于指定的请求无效。

  • #998 :修复 CVE 2017-12635 给芒果带来了突破性的变化 /{{db}}/_find ,它将计算选择器中所有JSON字段的所有实例。Mango现在经过测试,以确保它只考虑字段的最后一个实例,而忽略出现在它前面的实例。

  • #1014 :嵌套时正确推导选择器中的索引字段列表 $and 指定运算符。

  • #1023 :修复意外 500 错误,如果 startkeyendkey 在芒果中,选择器被颠倒了。

  • #1067 :防止 invalid_cast 崩溃时 couch_proc_manager 进程达到软限制,芒果空闲进程停止。

  • #1336 :内置字段 _idrev 将始终被任何索引覆盖,并且Mango现在正确地忽略它们在任何索引中的存在,这些索引为了选择器匹配目的而显式地包含它们。

  • #1376 :Mango现在适当地选择一些可用于查询的索引,即使没有将索引的所有列都添加到查询的排序字段列表中。

  • 与使用Mango作为全文索引的前端相关的多个修复(couch没有附带这个特性,但是它作为编译时插件提供了支持)。

1.5.2.5. 其他

2.2.0版本还包括以下小改进:

  • 开发人员可以在构建时启用curl库并通过指定新的 --dev 选择权 configure 脚本。

  • 这个 mochiweb dependency被升级到2.17.0版本,部分原因是为了解决这个难题 #745 问题。

  • 改进了与Erlang(20.x)新版本的兼容性

  • 改进了CouchDB维护人员和PMC成员的发布过程。

  • 多个测试套件改进,重点是增加覆盖率、速度和可靠性。

  • 对Travis CI和Jenkins CI设置的改进,重点是改进长期项目维护和自动化。

  • 对CouchDB deb/rpm打包和Docker存储库进行了相关改进,使部署更加容易。

  • #1007 移动 etc/default.ini 条目返回到 [replicator] 节(错误地移动到 [couch_peruser] 部分)

  • #1245 :提高了碎片打开错误的调试级别日志记录功能。

  • #1296 :CouchDB现在默认总是调用启用SMP的BEAM VM,即使在单处理器计算机上也是如此。Erlang的未来版本将完全删除非SMP BEAM VM。

  • 一匹小马!好吧,不,不是真的。如果你能做到这一点…谢谢你的阅读。