有没有一种方法可以在多个mongodb集合中均匀分布数据?

bsxbgnwa  于 2023-08-04  发布在  Go
关注(0)|答案(1)|浏览(70)

最近,我一直在使用Mongo,我有一个微服务架构。我有5个相同的微服务示例,我希望每个示例都从不同的Mongodb集合中读取。然而,这些集合中的每一个都应该包含相同的数据,这样当我将更多的数据插入到数据库中时,它将使用最少的资源插入到集合中。有没有一种方法可以配置mongo集合以这种方式进行数据插入?(关键是我没有使用分片,而是将文档分散在这些集合中)。

nbnkbykc

nbnkbykc1#

假设如下(如评论中所述):

  • 一旦服务访问了某个数据点,它就永远属于该服务
  • 如果一个服务终止,外部触发器将“重置”分布

我承诺采取以下方法:
答:我们需要为每个服务生成一个唯一的标识符,这可以从环境中注入,例如,一个指示服务编号的增量数字(这是我的建议)。或者一个更简单的方法,将需要集成是在服务的内存中生成一个guid
B.当你的服务需要获取一个数据点,而不是使用findOne来获取它,我们将使用findOneAndUpdate和以下查询:

const serviceUniqueIdentifier = uniqueValue;
db.collection.findOneAndUpdate(
  {
    ...documentQuery,
    $or: [
      {
        unique_identifier: {$exists: false}
      },
      {
        unique_identifier: serviceUniqueIdentifier
      }
    ]
  },
  {
    $set: {
      unique_identifier: serviceUniqueIdentifier,
      last_touched: new Date()
    }
  }
)

字符串
基本上,在任何你试图访问文档的地方,我们都应该使用这个查询,并更新它们的unique_identifier字段。因为Mongo的findOneAndUpdate是原子的,这确保了只有这个服务会使用这个数据点。
当你想“重置”系统时,你需要$unset所有的unique_identifier字段,如果你注入unique_identifier值,你可以保留现有的分布,如果你满意的话。
我不知道你的服务回显系统是如何工作的,但理论上所有的数据点都可以分配给一个服务。

相关问题