gpt4 book ai didi

java - mongodb - 如何使用 mongodb java 客户端锁定集合

转载 作者:行者123 更新时间:2023-12-01 04:44:39 31 4
gpt4 key购买 nike

我需要在后台线程中同时更新整个集合,但读取操作可能会同时发生。当我对集合进行基准测试时,更新集合大约需要 3 秒。有没有办法在更新集合时锁定集合?我尝试创建一个新集合并将所有文档插入其中,并使用“dropToTarget=true”将其重命名为原始集合,但我不确定它在分片方面的安全性和稳定性如何。我读到 renameCollection 与分片不兼容。

如果有人能提出好主意,那就太好了。

谢谢。

最佳答案

您是否提出了两种可能的策略来更新您的集合,一种是内联并加锁,另一种是使用临时集合?

正如 mongodb 文档明确指出的那样,它不适用于分片集合 ( http://docs.mongodb.org/manual/reference/command/renameCollection/ )。根据我的理解,这意味着您要重命名的集合不会被分片,因为您需要在进行实际重命名之前删除其他集合,您很可能会丢失任何以前保留的分片(信息)。因此,您需要重新激活分片。我强烈反对使用两种收集方法,特别是当您对数据进行分片时。
您需要从分片集合中获取所有数据并将其集中存储,完成更新后,您需要重命名该集合并再次对其进行分片。这将为您的整个系统带来大量 I/O,特别是对于执行更新的客户端。

取决于您的系统架构(具有单入口点)。您可以轻松地持有一些全局标志,告诉您当前是否正在运行集合更新。禁止其他写操作。
对于 MongoDB 的多入口点,您可以尝试 $isolated,但这不适用于分片集合。而且我不确定它是否允许读取操作,文档不是很清楚。

更新过程中是否严格禁止写入任何数据?您执行什么类型的更新。他们能互相影响吗?或者是否可以进行并发写入?

关于java - mongodb - 如何使用 mongodb java 客户端锁定集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16028824/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com