1.3. 3.0.x分支¶
1.3.1. 升级说明¶
#2228 :默认的最大文档大小已减小到8MB。这意味着包含较大文档的数据库将无法在不进行修改的情况下正确地复制到couchdb3.0中。此更改是为了准备couchdb4.0对文档大小施加的预期硬上限。对于3.x,可以通过
[couchdb] max_document_size
配置设置。#2228 :默认的数据库碎片因子
q
默认情况下减少到2。这一点,再加上自动化的数据库重新配置(见下文),是新CouchDB数据库更好的起点。在couchdb2.x中,指定?q=#
如果需要,在创建数据库时更改值。可以通过配置更改默认值[cluster] q
设置。#1523 , #2092 , #2336 , #2475 :默认情况下,在端口5986上公开的“node local”HTTP接口已被删除。以前在该端口上可用的所有功能现在都可以在主集群接口(默认情况下,端口5984)上使用。示例:
GET /_node/{nodename}/_stats GET /_node/{nodename}/_system GET /_node/{nodename}/_all_dbs GET /_node/{nodename}/_uuids GET /_node/{nodename}/_config GET /_node/{nodename}/_config/couchdb/uuid POST /_node/{nodename}_config/_reload GET /_node/{nodename}/_nodes/_changes?include_docs=true PUT /_node/{nodename}/_dbs/{dbname} POST /_node/{nodename}/_restart GET /_node/{nodename}/{db-shard} GET /_node/{nodename}/{db-shard}/{doc} GET /_node/{nodename}/{db-shard}/{ddoc}/_info
……等等。已更新文档以反映此更改。
#2389 :CouchDB 3.0现在要求在启动时定义服务器管理员用户,或者将打印错误消息并退出。如果你没有,一定要 create an admin user . (管理团队现在结束了。)

CC-BY-NC 2.0版: hehaden @ Flickr
#2576 :CouchDB 3.0现在需要对
/_all_dbs
端点。#2339 :默认情况下,所有数据库都以管理员身份创建。即默认的新数据库
_security
对象现在是:{ "members" : { "roles" : [ "_admin" ] }, "admins" : { "roles" : [ "_admin" ] } }
这可以在创建数据库后更改。
由于代码更改 #2324 ,无法从CouchDB 1.x透明地升级到3.x
couchup
实用程序已从CouchDB 3.0中删除 #2399 . 如果您要升级到coub.1,必须先使用coub.chd将索引从coub.1升级到coubcouchup
如果需要的话。然后可以升级到couchdb3.0。或者,您可以启动一个新的couchdb3.0安装并直接从1.x复制到3.0。#1833 , #2358 , #1871 , #1857 :CouchDB 3.0仅支持在以下Erlang/OTP版本下运行:
- 19.x-“软”支持。不再测试,但应该可以工作。
- 20.x-必须高于20.3.8.11(20.0、20.1、20.2版本均无效)
- 21.x-对于21.2,必须比21.2.3更新
- 22.x-对于22.0,必须高于22.0.5
#1804 :默认情况下,视图最多只能返回2**28(268435456)个结果。可以通过为视图和分区视图分别配置此限制
query_limit
和partition_query_limit
ini文件中的值[query_server_config]
部分。将群集中的所有节点升级到3.0后,添加
[rexi] use_kill_all = true
到local.ini
以节省一些集群内的网络带宽。
1.3.1.1. 不推荐的功能删除¶
CouchDB 2.x中不推荐使用的以下功能已在CouchDB 3.0中删除或替换:
- #2089 , #2128 , #2251 :复制目标的本地终结点(在CouchDB 2.x中从未按预期运行)已被完全删除。复制数据库时,请始终为源和目标指定完整的URL。此外,节点本地
_replicator
数据库不再自动创建。 - #2163 :
disk_size
和data_size
字段已从数据库信息对象返回GET /{{db}}/
. 它们在couchdb2.x中被弃用,并被sizes
对象,其中包含改进的file
,active
和external
尺寸指标。Faxton已经更新以匹配。 - #2173 :使用 POST 到
/{{db}}/_design/{{ddoc}}/_view/{{view}}
与?queries=
选项已被新的 queries 终结点。同样的道理也适用于 _all_docs, _design_docs, and _local_docs 端点。指定keys
对象当 POST -指向这些端点。 - #2248 :CouchDB外部 (
_external/
)已经被完全移除。 - #2208 :CouchDB不再支持
delayed_commits
配置文件中的选项。所有写入现在都是完全提交。这个/_ensure_full_commit
为了与旧的CouchDB复制器向后兼容,保留了API端点(作为no-op)。 - #2395 :中的安全对象
_users
默认情况下无法编辑数据库。配置文件中存在恢复此行为的设置。在couchdb4.0中,覆盖禁用设置的功能将被删除。
1.3.1.2. 不推荐使用的功能警告¶
以下功能在CouchDB 3.0中不推荐使用,并将在CouchDB 4.0中删除:
- 显示函数 (
/{{db}}/{{ddoc}}/_show
) - 列表函数 (
/{{db}}/{{ddoc}}/_list
) - 更新函数 (
/{{db}}/{{ddoc}}/_update
) - 虚拟主机和ini文件重写
- 重写函数 (
/{{db}}/{{ddoc}}/_rewrite
)
1.3.2. 版本3.0.1¶
1.3.2.1. 功能和增强功能¶
- Faxton更新到版本 v1.2.3 .
1.3.2.2. 错误修正¶
- #2441 :对大型二进制内容进行编码时出现内存泄漏。这应该可以解决CouchDB中长期存在的逐渐增加内存的错误。
- #2613 :同时尝试创建相同的新数据库不应再导致:code 500:错误。
- #2678 :的默认值
smoosh
压缩守护进程现在与所提供的一致default.ini
文件。 - #2680 :如果上有不兼容的OpenSSL版本,Windows CouchDB启动批处理文件将不再无法启动CouchDB
PATH
. - #2741 :在
couch_server
过程已经完成。 - #2745 :
require_valid_user
异常逻辑已更正。 - #2643 :
users_db_security_editable
设置现在位于default.ini
文件。 - #2654 :需要部分倒带的筛选更改订阅源不应再全部倒回到源的开头。
- #2655 :删除会话cookie时,CouchDB现在应该尊重操作员指定的cookie域(如果设置)。
- #2690 :在创建数据库后(当节点脱机或处于维护模式时)重新进入群集的节点应该更正确地处理创建该数据库的本地副本。
- #2805 :Mango运算符更正确地处理传递的空数组。
- #2716 , #2738 :
remsh
实用工具现在将尝试猜测本地安装的节点名和Erlang cookie。它也会尊重COUCHDB_ARGS_FILE
环境变量。 - #2797 :群集设置工作流现在使用正确的日志记录模块。
- #2818 :Mango现在使用了一种更安全的书签创建方法,可以防止意外地创建新的Erlang原子。
- #2756 :SpiderMonkey 60+将不再损坏UTF-8字符串,当各种JS函数应用于这些字符串时。
- 多个测试用例改进,包括更多的JS测试端口到Elixir。
1.3.3. 3.0.0版¶
1.3.3.1. 功能和增强功能¶
#1789 : User-defined partitioned databases .
这些特殊的数据库支持用户驱动将文档放入同一个切分范围。 JavaScript views 和 Mango indexes 对分区数据库也有特定的优化。
存在两个可调整的配置参数:
#1972 , #2012 : Automated shard splitting . 现在可以重新划分数据库 在线时 增加
q
乘以一个更大的数。这可以配置为在执行时需要特定的节点和范围参数。#1910 : Automatic background indexing ,内部称为
ken
. 二级查询(如二级查询)保证了无需外部搜索的子系统更新。许多配置参数可用。#1904 :完全重写 automatic compaction daemon ,内部称为
smoosh
. 此子系统自动触发数据库和视图的后台压缩作业,基于 configurable thresholds .#1889 , #2408 :新的IO队列子系统实现。这是 highly configurable and well-documented .
#2436, #2455: CouchDB now regression tests against, and officially supports, running on the
arm64v8
(aarch64
) andppc64le
(ppc64el
) machine architectures. Convenience binaries are generated on these architectures for Debian 10.x ("buster") packages, and for the Docker containers.#1875 , #2437 , #2423 :CouchDB现在支持针对SpiderMonkey 60或SpiderMonkey 1.8.5进行链接。SpiderMonkey 60增强了对ES5、ES6和ES2016+的支持。完整的兼容性信息可在 ECMAScript compatibility table :单击“显示过时平台”,然后在发动机类型列表中查找“FF 60 ESR”。
然而,我们发现在一些ARM 64位发行版上,SM 60段错误频繁出现,包括CentOS 8和Debian 10上的SM 60软件包。
因此,CouchDB的便利二进制文件 only link against SM 60 on the ``x86_64`` and ``ppc64le`` architectures . 这包括这些架构的Docker映像。
目前,CouchDB与SM 60连接在以下二进制分布中:
- Debian buster(10.x版)
- CentOS/RedHat 8.x版
- macOS(10.10+)
- Windows(7+)
- Docker(3.0.0)
- FreeBSD(当前)
我们希望在2020年4月发布时,用focusfossa(20.04lts)为Ubuntu添加sm60支持。
我们不太可能将sm60包向后移植到Debian、CentOS、RedHat或Ubuntu的旧版本。
Windows installer有许多改进,包括:
- 提示输入CouchDB 3.0所需的管理员用户/密码*在适当的情况下不会覆盖现有凭据
- 不再删除用户修改的配置文件,关闭 #1989 *也不会在安装时覆盖它们。
- 复选框以禁用Windows服务的安装
- Silent install support .
- “退出”对话框中指向这些联机发行说明的友好链接
- HiDPI的更高分辨率图标(500x500)
警告
Windows 8、8.1和10需要 .NET Framework v3.5 待安装。
- #2037 :Dreyfus是Lucene支持的搜索解决方案的CouchDB端,现在随CouchDB一起提供。当一个或多个Clouseau Java节点连接到集群时,可以在CouchDB中启用基于文本的索引。建议使用与CouchDB节点一样多的Clouseau节点。搜索在上的功能列表中公布
GET /
如果配置正确 (#2206 ) Configuration 和 installation documentation is available . - #2411 :
/_up
端点不再需要身份验证,即使在require_valid_user
是true
. - #2392 :一个新的
_metrics
可以将角色授予用户。这允许用户仅访问/_node/{{node}}/_stats
和/_node/{{node}}/_system
端点。 - #1912 :新的替代方案
systemd-journald logging
后端已添加,可以通过ini文件启用。新的后端不包括CouchDB的微秒级精确时间戳,并使用sd-daemon(3)
日志记录级别。 - #2296 , #1977 :如果配置文件设置
[couchdb]
single_node
设置为true
,如果系统数据库不存在,CouchDB将在启动时自动创建它们。 - #2338 , #2343 : POST 请求CouchDB视图和
/{{db}}/_all_docs
,/{{db}}/_local_docs
和/{{db}}/_design_docs
端点现在支持的功能与 GET . 参数作为JSON对象在主体中传递,而不是在使用时在URL中传递 POST . - #2292 :
_scheduler/docs
和_scheduler/info
端点现在返回正在运行和挂起的作业的详细复制统计信息。 - #2282 , #2272 , #2290 :CouchDB现在支持为
source
和target
在复制中通过source_proxy
和target_proxy
钥匙。这个 API documentation 已更新。 - #2240 :标题现在从
/{{db}}/_changes
即使没有可用的更改,也要立即发送。这样可以避免客户端阻塞。 - #2005 , #2006 :现在可以通过 new API endpoint
GET /_node/{{node-name}}
. - #1766 :请求超时,
all_docs
,附件、视图和分区视图请求都可以在[fabric]
第节。看到了吗default.ini
更多细节。 - #1963 :指标现在保存在分区和全局视图查询数以及发生的超时数上。
- #2452 , #2221 :新的配置字段
[couch_httpd_auth] same_site
已添加以设置CouchDB auth cookie的值SameSite
属性。可能需要将其设置为strict
与谷歌Chrome未来版本的兼容性。如果启用了CouchDB CORS支持,请将其设置为None
.
1.3.3.2. 性能¶
#2277 :
couch_server
过程已经高度优化,支持比以前更多的负载。#2360 :现在可以配置rexi接口的未确认消息限制。一个新的,更优化的默认值(5,从10降低)已经设置。这使得大型集群上的视图查询提高了约50%
q ≥ 8
.#2195 , #2207 :Metrics aggregation现在支持休眠或休眠的CouchDB系统,确保唤醒时不会触发数千个不必要的函数调用。
#1795 :避免打电话
fabric:update_docs
有空的单据列表。#2497 :安装向导不再自动创建
_global_changes
作为大多数用户不需要这个功能的数据库。这减少了CouchDB的总体负载。
1.3.3.3. 错误修正¶
#1752 , #2398 , #1803 :群集安装向导现在确保群集中所有节点的UUID和http机密保持一致。同步密码也可以在群集管理时使用。这可以防止在通过负载平衡器将Fauxton用作服务器管理员用户时注销。
#2388 :已进行兼容性更改,以支持与包含每个文档访问控制字段的未来数据库的复制。
#2379 :任何复制程序错误消息都将在响应中提供一个对象,或为null,但从不提供字符串。
#2138 :操作员手动更新数据库的碎片映射不会损坏其他数据库属性,例如分区值。
#1877 :
_purge
和_purged_infos_limit
端点现在被正确地限制为仅限服务器管理员。#1794 :数据库的最小清除序列值现在在没有群集的情况下收集
_all_docs
查找。#2351 :中的timeout case子句
fabric_db_info
已被规范化以匹配其他案例条款。#1897 :
/{{db}}/_bulk_docs
终结点现在正确捕获无效( i.e. ,非十六进制)_rev_
值,并返回:code 400:error。#2321 :CouchDB不再需要基本身份验证凭据来访问
/_session
登录的端点,即使在require_valid_user
启用。#2295 :如果内部文档处理器崩溃,CouchDB不再将作业标记为永久失败。
#2178 :视图压缩文件现在在视图清理时被删除。
#2179 :当CouchDB没有
_users
数据库现在不那么可怕了。#2153 :CouchDB不再返回
badmatch
查询时出错all_docs
通过了keys
数组。#2137 :如果搜索不可用,则返回:code 400:而不是:code 500:状态代码。
#2077 :任何失败
fsync(2)
现在正确地引发了调用,以避免由于重试而导致的数据损坏。#2027 :当通过无效的操作员干预创建重复的uuid时,处理epoch不匹配。
#2019 :如果在内部群集复制仍处于活动状态时删除并重新创建数据库,CouchDB将不再尝试连续删除该数据库。
#2003 , #2438 :CouchDB将不再自动重置索引文件,如果任何尝试读取其头失败(例如当couch_文件进程意外终止时)。CouchDB现在还可以处理视图文件缺少适当头的情况。
#1983 :改进数据库“外部”大小计算以更精确。
#1971 :使用弱比较方法正确比较etag以支持 W/ 某些负载平衡器配置添加的前缀。
#1901 :为文档更新指定的无效修订将不再导致
badarg
撞车。#1845 :
end_time
字段在/_replicate
现在正确地将时间转换为UTC。#1824 :
rexi
现在,当协调器进程被终止时,例如当ddoc缓存被刷新时,流工作线程将被清理。#1770 :数据库无效
_security
对象不再返回function_clause
错误和堆栈跟踪。#2412 :Mango execution stats现在可以正确统计读取的文档,这些文档在给定的碎片中没有匹配。
#2393 , #2143 :现在可以重写查询服务器环境变量
COUCHDB_QUERY_SERVER_JAVASCRIPT
andCOUCHDB_QUERY_SERVER_COFFEESCRIPT
without overwriting thecouchdb
/couchdb.cmd
启动脚本。#2444 , #2413 :Replicator错误消息现在得到了显著改进,减少了
function_clause
响应。#2454 :replication auth session plugin现在忽略它可能接收到的其他cookie而不记录错误。
#2458 :如果存在单个失败的节点或rexi worker错误,分区查询和dreyfus搜索函数不再失败。
#1783 :当给定空选择器或具有空数组的运算符时,芒果文本索引不再出错。
#2466 :如果索引文档修订版不再存在于主索引中,则芒果文本索引不再出错。
#2486 :
$lt
,$lte
,$gt
和$gte
在与文本索引搜索结合使用时,Mango运算符在内部被正确引用。#2493 :
couch_auth_cache
不再有失控的情况下,它会在_users
数据库。
1.3.3.4. 其他¶
3.0.0版本还包括以下小改进:
#2472 :CouchDB现在在启动时记录正确的集群URI(默认情况下:port
5984
)#2034 , #2416 现在可以通过fauxt指定安装路径
COUCHDB_FAUXTON_DOCROOT
环境变量。#2447 :复制统计信息在重新创建作业时保持不变,并在拆分批量文档批时正确处理。
#2410 , #2390 , #1913 :添加了许多用于Mango的指标,包括未编制索引的查询、无效索引查询、检查的符合和不符合群集仲裁的文档、查询时间等。
#1844 :添加了一个新的内部API来编写定制的Erlang请求级度量报告插件。
#2293 , #1095 :
-args_file
,-config
和-couch_ini
参数现在可以通过COUCHDB_INI_FILES
基于UNIX的系统上的环境变量。#2352 :
remsh
实用程序现在在中搜索Erlang cookieERL_FLAGS
以及vm.args
.#2324 :基于视图(从未完全功能)的所有记录道
_changes
源已从代码基中删除。#2337 :md5填充程序(引入以支持FIPS遵从性)现在在整个代码库中一致使用。
#2270 :负数和非整数
heartbeat
值现在返回:代码400:错误请求。#2268 :重新安排作业时,CouchDB现在停止足够的正在运行的作业,以便为挂起的作业腾出空间。
#2186 :CouchDB插件编写器有一个新字段,可以在该字段中存储端点凭据以供以后使用。
#2183 :
dev/run
现在支持一个--extra-args
用于在开发期间修改Erlang运行时环境的标志。#2105 :
dev/run
在群集安装过程中,由于意外的远程端连接关闭而不再失败。#2118 改善
couch_epi
在现代Erlang中使用map childspecs功能的进程替换机制。#2111 :当超过
MaxJobs
复制作业已经定义,CouchDB现在可以正确处理某些作业崩溃时的作业轮换。#2020 :修复结构流碎片替换中的完整环断言
#1925 :使用时docid的支持列表
couch_db:purge_docs/3
.#1642 :
io_priority
现在在视图更新和压缩过程中正确设置。#1865 :Purge现在支持单个请求中的文档ID>100。
#1861 :
vm.args
文件改进了注释。#1808 :为其他签入传递文档更新类型
before_doc_update
.#1835 :模块列表不再硬编码在中
.app
文件夹。#1826 :
couch_replicator_manager
垫片已完全拆下。#1820 :重新启动CouchDB后,JS和Elixir测试将等待30秒,等待其准备就绪,然后超时。
#1800 :
make elixir
使用指定的单个测试运行tests=
.#1805 :
dev/run
支架--with-haproxy
再一次。#1774 :
dev/run
现在支持3个以上的节点。#1779 :重构Elixir测试套件初始化。
#1769 :Elixir测试套件使用Credo进行静态分析。
#1776 :所有Python代码现在都使用 Python black .
#1786 :
dev/run
:不要创建不必要的dev/data/
目录。#2482 :冗余
get_ring_opts
呼叫已从中删除dreyfus_fabric_search
.#2506 :CouchDB的候选版本不再将RC标记传播到每个Erlang应用程序的版本字符串中。
#2511 : recon 已将Erlang诊断工具包添加到CouchDB的构建过程中,并以release+便利的二进制文件形式提供。
Faugston更新到v1.2.3,其中包括:
- 在运行查询时支持多个服务器生成的警告
- 分区数据库支持
- 搜索索引支持
- 删除对不推荐的dbinfo字段的引用
- 提高屏幕阅读器的可访问性
- 大量CSS修复
改进的测试用例:
- 很多很多测试竞态条件和bug都被删除了(PR列表太长了,不能包含在这里!)
- 更多的测试案例被移植到长生不老药中,包括:
- #2431 :
chttpd_purge_tests
已根据CI故障进行了改进。 - #2432 :解决薄片测试失败
t_invalid_view/1
. - #2363 :Elixir测试现在针对单个节点集群运行,与JavaScript测试套件的原始设计一致。这是一个永久的改变。
- #1893 :为大量doc测试添加“w:3”。
- #1939 , #1931 :多个修复程序可改进受限制的CI环境中的支持。
- #2346 :对
couch_compress
测验。 - #2314 :测试时不自动索引
update=false
在芒果。 - #2141 固定
couch_views
编码测试。 - #2123 :已为添加超时
fold_docs-with_different_keys
测试。 - #2114 :EUnit测试现在可以正确继承必要的环境变量。
- #2122 : :meck.unload() 现在每次测试后都会自动调用。
- #2098 固定
cpse_test_purge_replication
尤尼特试验。 - #2085 , #2086 :修复薄片
mem3_sync_event_listener
测试。 - #2084 :增加两个慢速btree测试的超时。
- #1960 , #1961 :修复
chttpd_socket_buffer_size_test
. - #1922 :为碎片分割功能添加的测试。
- #1869 :使用etag为doc reads添加了新的测试
If-None-Match
标题。 - #1831 :重新引入 cpse_test_purge_seqs 测试。
- #1790 :重组
couch_flag_config_tests
进入一个合适的套房。 - #1785 :使用
devclean
以保证Makefile的一致性。 - #2476 :用于测试,
Triq
已被替换为PropEr
作为可选的依赖项。
外部依赖项更新:
美洲驼!好吧,不,不是真的。如果你能做到这一点…谢谢你的阅读。