我正在尝试在同一台服务器上运行 mongodb 副本集合。
要求是我们根据我们的存档策略删除数据库,但我们需要从该数据中保留一个集合作为备份在同一服务器上的单独数据库中。
我运行 copyCollection 但它会锁定整个 mongo 实例并阻止所有其他操作。
集合大小为 10 GB,因此复制需要相当长的时间,并且系统在一段时间内不可用。
请提出一种在不锁定整个实例的情况下实现此目的的方法。
viren's questions
有一个场景,我们在两个数据中心有 5 个成员副本集。
数据中心 1:3 个成员
数据中心 2:2 个成员
情况是,如果 DC 1 出现故障,DC 2 变为只读,但我们需要让它也准备好接受写入。
是否有可能使用一个额外的成员,如隐藏节点或两个仲裁器。
我们没有第三个数据中心。
谢谢
Virendra Agarwal
我们在 Mongo 3.2。我们使用 mongo 部署了我们的第一个应用程序,没有在数据库模式中进行用户身份验证。
现在我们想在数据库级别启用身份验证,但希望避免应用程序停机。
在 Mongo 中,我们是否可以在数据库级别启用此身份验证,以避免任何人通过控制台登录和运行命令。
应用程序不应占用时间。
我正在使用 Mongo 3.0 WiredTiger 设置测试我的数据库。使用wiredTIger 恢复我的数据库后,我运行了db.serverStatus。我在控制台输出中发现了以下内容。
"bytes currently in the cache" : 6009288998 (5.5 GB),
"maximum bytes configured" : 7516192768 (7 GB),
"bytes read into cache" : 18380155206 (17 GB),
"bytes written from cache" : 17020204785 (16 GB),
你能告诉他们这个输出是什么意思吗?
我的服务器中有 16 GB RAM。数据库配置如下:
MongoD instance 1
Databases 4
Original Data size with 2.6.4 : DB1- 25 GB, DB2- 19 GB, DB3- 5 GB, DB4- 3 GB
With wiredTiger : DB1- 3 GB, DB2- 1.9 GB, DB3- 0.9 GB, DB4- 0.5 GB
我一直在寻找更新性能,但似乎性能似乎下降了,当使用 23000 更新命令在 DB3 上运行批量更新时,我在 Mongostat 中看到了这一点
insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|aw netIn netOut conn time
*0 *0 *0 *0 0 2|0 0.6 80.0 0 7.7G 7.4G 0|0 1|1 137b 15k 6 11:21:27
*0 *0 *0 *0 0 3|0 0.9 79.9 0 7.7G 7.4G 0|0 1|1 195b 15k 6 11:21:28
*0 *0 *0 *0 0 1|0 1.2 80.0 0 7.7G 7.4G 0|0 1|1 79b 15k 6 11:21:29
*0 *0 *0 *0 0 1|0 1.4 80.0 0 7.7G 7.4G 0|0 1|1 79b 15k 6 11:21:30
*0 *0 *0 *0 0 2|0 1.7 79.9 0 7.7G 7.4G 0|0 1|1 133b 15k 6 11:21:31
*0 *0 *0 *0 0 1|0 2.0 80.0 0 7.7G 7.4G 0|0 1|1 79b 15k 6 11:21:32
*0 *0 *0 *0 0 3|0 2.2 80.0 0 7.7G 7.4G 0|0 1|1 195b 15k 6 11:21:33
*0 *0 *0 *0 0 1|0 2.4 80.0 0 7.7G 7.4G 0|0 1|1 79b 15k 6 11:21:34
*0 *0 *0 *0 0 1|0 2.6 80.0 0 7.7G 7.4G 0|0 1|1 79b 15k 6 11:21:35
*0 *0 *0 *0 0 2|0 2.9 80.0 0 7.7G 7.4G 0|0 1|1 133b 15k 6 11:21:36
insert query update delete getmore command % dirty % used flushes vsize res qr|qw ar|aw netIn netOut conn time
*0 *0 *0 *0 0 1|0 3.0 80.0 0 7.7G 7.4G 0|0 1|1 79b 15k 6 11:21:37
*0 *0 *0 *0 0 3|0 3.1 80.0 0 7.7G 7.4G 0|0 1|1 195b 15k 6 11:21:38
*0 *0 *0 *0 0 1|0 3.3 80.0 0 7.7G 7.4G 0|0 1|1 79b 15k 6 11:21:39
*0 *0 *0 *0 0 1|0 3.5 80.0 0 7.7G 7.4G 0|0 1|1 79b 15k 6 11:21:40
*0 *0 *0 *0 0 2|0 3.7 80.0 0 7.7G 7.4G 0|0 1|1 133b 15k 6 11:21:41
如果您看到dirty% 不断增加。同样在完成更新后,我没有改变 Db(没有读写)但我仍然得到 netIn 和 netOut 显示字节。
您能否检查一下行为并进行更多解释,因为 Mongo DB 文档部分没有详细显示任何内容或这些参数。
另外,我不确定索引压缩是否也降低了 RAM 需求。
我在我的数据库中使用 mongo 分片。我面临的情况是我删除了数据库中的一些收藏。但是为了回收空间,我需要运行修复选项,我无法在生产中使用 Mongos 运行它。因此,我的计划是通过将主服务器切换为副本服务器来在每个副本服务器上逐个运行修复,反之亦然,以便生产系统正常运行。这里我有两个困惑:
- 这是修复数据库的正确方法吗
- 我有一个像 1 TB 数据这样的大数据库,所以在这种情况下,修复选项可能需要一两天时间updated 在这种情况下会不会是一个错误。
- 从我的集群中删除一些旧数据库时,我停止了平衡器并在删除后重新启动它,但数据库仍然没有完全删除,它显示我使用了 2 或 3 GB 的内存空间。我检查了剩余的数据库,它没有显示其中的集合。
我有一份文件,说:
{
"_id" : ObjectId("538b7128cf16e3ea5a1ab23c"),
"pgDownloadTime" : NumberLong(9776),
"pgAccessTime" : NumberLong("1401647400058"),
"expiredTime" : NumberLong("1401647468678"),
"contentType" : 1,
"articleId" : "35909002",
}
我的查询将是:
db.pageTrendLog.findOne({"expiredTime" : {$lte : "pgDownloadTime"+"pgAccessTime"}});
我该如何编写这个查询?