我需要你的帮助来解决关于跨分区查询的问题,我有一个集合(mongo db api),它存储的记录的分区类型为 “applicationType”。当我知道我的应用类型时,它工作得很好,基本上满足了75%的用户,但是有一些战略客户希望我们提供基于制造商的数据,这不是分区的一部分。当我在没有应用类型的情况下进行查询时,查询的表现非常糟糕。
需要您的建议来解决这个问题。 以下是我们存储的集合样本,供您参考。
{
"_id" : ObjectId("5ad5d6b7529cd2007ba73bc8"),
"applicationType" : "Highbay",
"name" : "X",
"subSeries" : "X1",
"fullSeriesName" : "C1X",
"manufacturer": "cre"
...
...
...
}
,
{
"_id" : ObjectId("5ad5d6b7529cd2007ba73bc8"),
"applicationType" : "AreaLight",
"name" : "X",
"subSeries" : "X1", (mongo db
"fullSeriesName" : "C1X",
"manufacturer": "cre"
...
...
...
解决方案:
这是分区数据存储的常见模式。
Mongo用户的解决方案是使用 改变流 并使用不同的分区(shard)键将所有数据写入另一个集合中,或者预先计算你需要的任何值,以回答这些查询作为分区内的查询。
当你做 coll.watch 的时候,你需要一些计算来承载这个过程,还有一些其他的注意事项,这些在上面的链接中都有概述。
还有一点也是你需要衡量使用Change Streams的成本与只做跨分区查询的成本。一般来说,对于大批量的查询来说,这种解决方案更具成本效益。需要注意的是。