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/queries
,POST /{{db}}/_design_docs/queries
和POST /{{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
版本,ascouch_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(我们希望……)
- 现在允许解决设计文档的冲突
#496 , COUCHDB-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 , #1030 :
couch_peruser
安装现在可以指定默认值q
每个peruser创建的数据库的值与集群的不同q
价值观。在本地ini文件中的[couch_peruser] q
.#876 , #1068 :
couch_peruser
现在可以通过本地ini文件配置数据库前缀[couch_peruser] database_prefix
.#887 :Replicator文档现在可以包含用于创建目标数据库的参数,例如
"create_target_params": {{"q": "1"}}
. 这可以帮助数据库重新加固或放置。#977 :使用时
COPY
要复制文档,如果新ID包含Unicode字符,CouchDB不再失败。#1095 :识别环境变量
ARGS_FILE
,SYSCONFIG_FILE
,COUCHDB_ARGS_FILE
和COUCHDB_SYSCONFIG_FILE
去哪里找超车vm.args
和sys.config
启动时的文件。#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_server
,couch_log_server
,ddoc_cache
,mem3_shards
和rexi_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. 性能¶
1.5.2.3. 错误修正¶
#832 , #1064 :Couch日志记录统计信息的跟踪已添加回每个节点
/_node/<node-name>/_stats
端点。#953 , #973 返回
404 Not Found
在GET /_scheduler
不是405 Method Not Allowed
.#955 :
/{{db}}/_bulk_docs
端点现在正确响应为400 Bad Request
如果new_edits
参数不是布尔值。#969 :CouchDB现在返回
offset
和update_seq
当keys
提供给GET
或POST
/{{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)。
#1165 :
validate_doc_update
视图函数可以再次直接在Erlang中实现(在启用可选的Erlang视图服务器之后)。#1223 :
couch_config
应用程序现在可以正确地处理非持久性整数和布尔值配置更改。#1242 :
couch_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地址。它也不再通过将内部向导设置步骤的日志记录移动到
debug
从notice
水平。
1.5.2.4. 芒果¶
#816 , #962 , #1038 :如果用户为指定值
use_index
对于选择器无效(不满足覆盖率要求或正确的排序字段),请尝试返回到有效索引或完全数据库扫描,而不是返回400
. 如果我们后退,填充一个warning
响应中的字段。芒果还尝试使用索引$or
只能在存在某些值时选择字段。#849 :当
{{"seq_indexed": true}}
,则返回不匹配错误。现在已经修复了。#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
错误,如果startkey
和endkey
在芒果中,选择器被颠倒了。#1067 :防止
invalid_cast
崩溃时couch_proc_manager
进程达到软限制,芒果空闲进程停止。#1336 :内置字段
_id
和rev
将始终被任何索引覆盖,并且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。
一匹小马!好吧,不,不是真的。如果你能做到这一点…谢谢你的阅读。