我们有一个复杂的结构,我们将其存储在mongo中,并对其进行了大量处理,并经常对其进行更新。
作为结构的一部分,有一个Map Map之类的东西
Map<Enum, Map<String, Object> data
这是保存在mongo中并进行更新的内容。
所以mongo中的结构类似于
"data" : {
"Category" : { // Value of the enum
"Test" : { // Name of the value to categorize data with
"count" : 2,
"values" : [
"value-1",
"value-2",
]
}
}
}
保持这种结构的动机是加快处理速度,因为我们需要大量查找才能将新数据添加到相同的Category
和Name
中,并且在mongo中进行了更新
现在很明显,当我们将来需要添加索引并进行复杂的查询时,这并不容易。
所以正在寻找将其更改为更可扩展的建议吗?
阅读此内容看起来就像一个结构,这种类型的东西会好得多
List<MyObject> data;
MyObject在哪里
Enum Category;
String Name;
int count;
List<String> values;
但是,由于我们要处理这些数据,因此在List中进行每次查找都比进行Map查找要慢得多。
有什么办法可以在mongo中使用数组类型的模式,但是我可以将Map保留在Java代码中以加快查找速度?
答案 0 :(得分:0)
在mongodb中保持为数组并在Java中映射的唯一方法是在服务器端将其从数组转换为映射。 在我的工作中,我们通常会遇到很多类似情况。
我也建议您简化存储在mongodb db中的文档。尝试将数组值转换为单个文档。它将涉及很多冗余,但是您将获得更多的概念,简化索引并增强查询能力。 同样,在文档中增加数组会损害写入性能,因为它将连续重写所有内容以释放空间,因为文档空间是连续的。
观察给定的文档结构,似乎只有保留的有价值的数据实际上是值数组中的值。
因此,只需将数组分解成单个文档即可。
{
value: 'value-1'
},
{
value: 'value-2'
},
{
value: 'value-3'
},
取决于您要针对它运行的查询,但是这样的结构将为您带来更多的性能提升和查询自由。
希望有帮助