最近,我一直在使用Mongo,我有一个微服务架构。我有5个相同的微服务示例,我希望每个示例都从不同的Mongodb集合中读取。然而,这些集合中的每一个都应该包含相同的数据,这样当我将更多的数据插入到数据库中时,它将使用最少的资源插入到集合中。有没有一种方法可以配置mongo集合以这种方式进行数据插入?(关键是我没有使用分片,而是将文档分散在这些集合中)。
nbnkbykc1#
假设如下(如评论中所述):
我承诺采取以下方法:答:我们需要为每个服务生成一个唯一的标识符,这可以从环境中注入,例如,一个指示服务编号的增量数字(这是我的建议)。或者一个更简单的方法,将需要集成是在服务的内存中生成一个guid。B.当你的服务需要获取一个数据点,而不是使用findOne来获取它,我们将使用findOneAndUpdate和以下查询:
guid
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值,你可以保留现有的分布,如果你满意的话。我不知道你的服务回显系统是如何工作的,但理论上所有的数据点都可以分配给一个服务。
unique_identifier
$unset
1条答案
按热度按时间nbnkbykc1#
假设如下(如评论中所述):
我承诺采取以下方法:
答:我们需要为每个服务生成一个唯一的标识符,这可以从环境中注入,例如,一个指示服务编号的增量数字(这是我的建议)。或者一个更简单的方法,将需要集成是在服务的内存中生成一个
guid
。B.当你的服务需要获取一个数据点,而不是使用
findOne
来获取它,我们将使用findOneAndUpdate
和以下查询:字符串
基本上,在任何你试图访问文档的地方,我们都应该使用这个查询,并更新它们的
unique_identifier
字段。因为Mongo的findOneAndUpdate
是原子的,这确保了只有这个服务会使用这个数据点。当你想“重置”系统时,你需要
$unset
所有的unique_identifier
字段,如果你注入unique_identifier
值,你可以保留现有的分布,如果你满意的话。我不知道你的服务回显系统是如何工作的,但理论上所有的数据点都可以分配给一个服务。