我试图了解 MongoDB 文档中数组和哈希的内部分配和放置(据我所知,这是通过数组实现的)。
在我们的领域中,我们的文档包含数千到数十万个键值对,其逻辑分组深度可达 5-6 级(想想嵌套散列)。
我们用一个点来表示键中的嵌套,例如 ,x.y.z
在插入 MongoDB 时会自动变成如下所示:
{
"_id" : "whatever",
"x" : {
"y" : {
"z" : 5
}
}
}
最常见的操作是增加一个值,我们使用 atomic 执行此操作$inc
,通常使用单个更新命令一次增加 1000+ 个值。随着时间的推移添加新密钥,但并不频繁,例如每天 100 次。
我想到另一种表示方法是不在名称中使用点,而是使用其他分隔符并创建一个平面文档,例如,
{
"_id" : "whatever",
"x-y-z" : 5
}
鉴于键值对的数量以及$inc
更新和新键插入方面的使用模式,我正在寻找关于两种方法之间权衡的指导:
磁盘空间开销
$inc
更新性能新键插入的性能