问题标签 [couchdb-2.0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
couchdb - CouchDB 2.0 中的 couch_peruser 不工作
我正在研究一个用例,每个用户都必须拥有他/她的私人couchdb
数据库。我在CouchDB Official Link中遇到了couch_peruser
配置标志。将此标志设置为 true 会为数据库中的每个用户创建一个私有数据库。CouchDB 2.0
_users
在安装CouchDB 2.0
和设置couch_peruser
标志后,我发现它不起作用。它不会为用户创建任何私有数据库。有谁知道是什么问题?
couchdb - 如何在 CouchDB 2.0 中创建 TEXT 索引?
我正在阅读这篇文章https://cloudant.com/blog/mango-json-vs-text-indexes我想在我的 CouchDB 中创建一个 TEXT 索引
在 Fauxton -> Mango Indexes 页面中,我发布了
...但收到 503 错误并显示以下消息:
我什至无法在他们的文档中找到任何相关信息,我现在真的很迷茫。
所以:
- 如何在 CouchDB 中创建 TEXT 索引?
- 我在哪里可以找到关于 CouchDB 中索引的体面介绍?
请帮忙,谢谢。
couchdb - 如何验证 CouchDB 2.0 集群设置
我只是将我的三个 CouchDB 实例设置为一个集群,这就是我在设置它时所做的:
将“-kernel inet-dist-listen-minimum/maxinum”从 9100 到 9200 添加到 vm.args 文件中。并关闭防火墙
使用相同的管理员和密码设置三个 couchdb 实例。
将 Fauxton 中 chttpd 和 httpd 部分的绑定地址更改为 0.0.0.0
选择一个 couchdb 实例设置为集群,然后添加两个节点(通过输入它们的 IP 地址)
全部完成
在这些步骤之后,我相信应该正确设置集群,但是,当我运行命令时
curl http://username:login@localhost/_membership
在三个虚拟机上,只有三个节点中的主节点显示它在集群中有三个成员(节点)。
这是在http://localhost:9000/_membership中时的样子(这是从我的计算机连接到端口 5984 的 ssh 隧道):
{"all_nodes":["couchdb@localhost"],"cluster_nodes":["couchdb@130.56.252.xxx","couchdb@130.56.252.xxx","couchdb@localhost"]}
这就是其他实例所显示的:
{"all_nodes":["couchdb@localhost"],"cluster_nodes":["couchdb@localhost"]}
所以现在我有两个问题:
我是否正确设置了集群?
如何判断我是否正确设置?
couchdb - _replicator 数据库不可扩展或我的设计需要调整
我认为重要的是我详细说明我来自哪里,以便您了解我的用例,请多多包涵。
背景:我希望将我的应用程序从 CouchDB 1 迁移到 2,并且这种迁移需要大量的工作。我只是想再次确认我没有重新发明轮子,并确保没有比我将在下面详细说明的更好的设计,特别是因为 CouchDB 2 似乎有一些很棒的新功能。
考虑以下允许学生以数字方式提交测验答案的应用程序的简化用例。每个学生都应该能够提交她/他的测验答案,老师应该能够查看所有答案。这种设计需要与 PouchDB 一起使用,因为 PouchDB 直接与 DB 对话,这为我们节省了大量时间,否则需要编写一套复杂的 API。
我选择的设计包括每个学生一个数据库和每个教师一个数据库,即每个用户一个数据库。只有数据库的所有者可以编辑她/他的数据库,这是通过 CouchDB 角色强制执行的。当学生提交答案时,它会通过 PouchDB 与她/他的数据库同步。然后将答案复制到教师的数据库中。这反过来又允许学生在应用程序中快速加载他们的答案,而教师可以为所有学生加载所有答案。当然,教师数据库中也有按班级、测验等对答案进行细分的视图,这样教师就不必一次为所有学生加载答案。如果我们没有教师数据库,那么教师将需要访问所有学生的数据库,并且必须与所有学生的数据库同步。
乍一看,_replicator 数据库似乎是将数据从学生数据库复制到单个教师数据库的明显方法。最大的问题是当你使用连续复制时,它会消耗一个文件句柄和一个数据库连接,这意味着你可以很快地耗尽数据库的资源。例如,如果我们的数据库中有 10,000 名学生,那么我们需要 10,000 个并发文件句柄和数据库连接来进行复制。考虑到这 10,000 名学生中的 100 名不太可能同时使用该应用程序,这非常疯狂。
相反,我开发了一个服务,它侦听 _db_updates 提要,然后仅在特定数据库发生更改时复制数据库。使用这种方法,我们只担心在发生更改时消耗资源,因此我们最终会获得大量空闲文件句柄和数据库连接。
我对 CouchDB 2 进行了简短的试验,似乎 _replicator 数据库与 CouchDB 1 中的资源一样贪婪。
这种针对学生和教师的每用户数据库设计是最佳解决方案还是有更好的解决方案?如果这是最好的解决方案,是否有更好的方法来复制不消耗那么多资源的数据?
database - 如何在 couchdb 中对数据进行分片
我刚刚完成了一个具有 3 个节点的 CouchDB 集群的设置。现在我正在尝试对我的数据进行分片以扩展数据库,这就是我创建具有 2 个分片和 2 个副本的数据库的方法:
使用命令创建数据库
收到了真实的消息。
在数据库“test”中创建 50 个文档
但是,当我检查所有三个节点时,我发现每个节点都有所有 50 个文档的完整副本。当我从节点 1 中删除一个文档时,该文档在所有三个节点的测试数据库中都被删除了。似乎集群工作正常,但不是我想要的方式。
在我看来,如果我将 shards 设置为 2,replicas 设置为 2,那么数据库将分为两部分,每个部分将保存在两个节点中。例如,我得到一个列表 [1,2,3,4]。我要将它存储在我刚刚创建的数据库中,有可能
node1 有:
node2有:
node3有:
但绝对不是 [1,2,3,4] [1,2,3,4] [1,2,3,4] 分别在三个节点。我对吗?
如果没有,为什么我的数据库没有对我的 50 个文档进行分区?我的目标是可扩展性和可靠性。似乎它根本没有扩展我的存储空间。
sharding - CouchDB 2.0 节点如何跨服务器拆分?
查看 CouchDB 2.0 前导博客文章之一(此处),其中提到了分片(q
)、副本(n
)和节点。
阅读 Couch 2.0 表明(至少对我而言)节点基本上是 Couch 的一个实例,它可以是分片或分片副本。那是对的吗?即,如果您有 8 个分片 ( q=8
) 和每个分片 ( ) 的 3 个副本n=3
,那么您有 24 个节点?
这些节点应该如何跨服务器拆分,它会自动执行此操作吗?如果你有 8 个分片,你应该有一个由 8 个服务器组成的集群吗?
couchdb - Couchdb 2.0 在外部网络上的 PUT 速度极慢,在本地速度很快
环境:ubuntu 14.04 LTS,Erlang 19.3-1,libmozjs185-dev libmozjs185-1.0 libicu-dev,Couchdb 2.0 从源代码构建
一切正常,除了通过网络将数据发布到 Couchdb 的速度约为 60Kb/秒,而任何其他网络操作都以接近 10MB/秒的速度运行(这是带有 SSD 磁盘的快速专用服务器)。
我只是用一个简单的 curl 进行测试(file.dat 是一个 5mb 的文件)
时间 curl -X PUT http://user:pass@myserver.com:port/test/doc1/file.dat -H "Content-Type: application/octet-stream" -d@test.dat
如果我将上述命令运行到服务器上的 localhost,则需要 0.1 秒,如果我远程运行命令,则需要 50 秒。
如果我使用 scp 远程复制相同的文件或将其发布到一个简单的 php 页面,它也会在 < 1 秒内快速运行。
所以我很难过。尝试了各种附件缓冲区设置和延迟提交,但没有改变。
我启用了调试日志记录,但没有错误或线索。
我在另一台服务器上安装了完全相同的软件(配置相同,但在不同的数据中心并在那里工作正常。)
任何想法表示赞赏。
couchdb - CouchDB 中节点之间的磁盘使用不平衡
我已经建立了一个 4 个节点的 CouchDB 集群来存储我检索到的推文
集群配置为有 8 个分片,每个文档保留 3 个副本
我没有添加任何视图或附加索引,Fauxton 中显示的数据库大小为4.3 GB
但是,CouchDB 在其中一个节点中占用了异常大的磁盘空间
在crake.couchdb.cloud
中,两个碎片40000000-5fffffff
和c0000000-dfffffff
比其他碎片大得多。
我曾经尝试删除那些大碎片crake.couchdb.cloud
并等待 CouchDB 本身重建。重建后磁盘使用量是平衡的,但是在我开始向数据库添加新文档后它又逐渐变得不平衡。
我正在MD5(tweet[id_str])
用作文档 ID。这可能是问题的原因吗?
我对此感到非常困惑,因为我认为即使我犯了任何错误,当数据在集群中复制时,它也应该占用 3 个不同节点的资源。
请帮忙,谢谢。
更新
后来我删除了所有的 VPS 实例,并用 3 个 CouchDB 节点重建了集群,即Avocet
,Bustard
和Crake
. 新的集群配置如下:
在重建之前,我将所有数据复制到另一个 CouchDB 实例,以便在完成后将它们传输回来。恢复后磁盘使用平衡。
另外,我在第 4 个节点上引入了一个 HAProxy,即Darter
作为负载均衡器。
所以这一次,我所有的 twitter 检索器都将他们的请求发送到平衡器。然而,磁盘使用再次变得不平衡,并且正是第三个节点Crake
占用了更多空间。
数据库大小仅4.2 GB
比Crake
这大 7 倍!
我现在完全一无所知...
更新 2
_dbs
来自所有节点的信息
couchdb - 如何计算 Mango 查询返回的文档
我有一个芒果查询:
我想知道满足此条件的文档数量。
我知道我们可以使用 map reduce 函数来实现这一点,但是有没有办法通过使用芒果查询来做到这一点,比如在查询本身中使用像“count”这样的键,就像我们对“sort”和“fields”所做的那样。
我正在通过休息客户端触发芒果查询,我希望文档的数量作为查询的响应。
json - 用于深度嵌套 JSON 的 Cloudant/Mango 选择器
假设我的一些文档具有以下结构:
是否有一个 Mango JSON 选择器可以在"i_look_for"
具有值时成功选择"this_tag"
?它在一个数组中(我知道它在数组中的位置)。我也对过滤结果感兴趣,所以我只得到 "tag_properties"
结果。
我已经尝试了很多东西,包括 $elemMatch,但大部分都返回“无效的 json”。
这甚至是 Mango 的用例还是我应该坚持观点?