【问题标题】:Can creating indexes on MongoDB collections in a replica set be done programmatically?可以以编程方式在副本集中的 MongoDB 集合上创建索引吗?
【发布时间】:2014-02-24 15:16:58
【问题描述】:

我已经在 MongoDB here 中看到了在副本集上创建索引的说明。它看起来相当复杂并且需要 mongo shell。有没有更简单的方法和/或可以使用 C# MongoDB 驱动程序来完成?

【问题讨论】:

  • 你自己做了最少的努力吗?即:在谷歌中输入“mongodb c# driver ensureIndex”?
  • 嗯,是的,因此是在 MongoDB 中使用副本集创建索引的文档的链接。我知道如何直接使用 mongodb,但副本集的说明似乎涉及更多。
  • 投反对票?严重地? Stackoverflow 已成为混蛋的游乐场。
  • 根本不清楚你要什么。在副本上构建索引与在独立上构建索引没有什么不同,除非您希望在长时间操作期间保持副本集可操作。不过,您没有提到这一点,复杂性是您的问题。并且没有 - 构建索引不需要 mongo shell。您链接的教程说 “使用 mongo shell 中的 ensureIndex() 或驱动程序中的类似方法创建新索引。”。它还描述了需要重新启动 mongod 并更改其配置的步骤,如果您的服务器关闭,您希望如何通过驱动程序执行此操作?
  • 所以你基本上回答了我的问题,如果你回答正确,我会这样标记。这比您的第一条评论更有帮助。所以不需要那么有争议。这是关于你现在所做的帮助。谢谢。

标签: c# .net mongodb mongodb-.net-driver


【解决方案1】:

正如您在docs 中看到的,初级和次级都有 4 个可能的阶段:

  • 在主节​​点的后台构建索引。
  • 构建索引
  • 停止一中学
  • 重启mongod程序

您可以使用驱动程序执行前两个操作,因为mongod 已启动。使用带有正确参数的EnsureIndex

对于接下来的两个,您不能使用驱动程序,但您仍然可以像在命令提示符中那样以编程方式进行操作:

var stop = Process.Start("mongod", "--shutdown");
var standalone =  Process.Start("mongod", "--port 47017");
var replicated = Process.Start("mongod", "--port 27017 --replSet rs0");

【讨论】:

    【解决方案2】:

    我建议使用此过程在副本集上构建索引。称之为“滚动索引构建”。例如假设你有 2+1 个副本集

    1. 从副本集中删除辅助节点并添加索引。建立索引后,您可以将其恢复并让它赶上主索引
    2. 取下主要并重复与 1 相同的过程。
    3. 您可以决定旧的主服务器是否需要再次成为主服务器,或者您可以将其他服务器作为主服务器。

    不要在主服务器的后台构建索引,因为它将在辅助服务器的前台构建(这可能会导致辅助服务器失效)。 2.6 中将更改此行为。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-13
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多