gpt4 book ai didi

mongodb - 为类似的数据结构选择 MongoDB 集合结构

转载 作者:可可西里 更新时间:2023-11-01 09:37:39 25 4
gpt4 key购买 nike

在 MongoDB 中存储相似结构的更好方法是什么?为所有结构选择一个集合还是为每个结构选择一个集合?拥有一个/几个有什么好处?

例如,我必须存储一些日志,以供进一步分析。每个结构都有一个公共(public)部分,一些数据特定于某些统计类型,例如:

{ 
timestamp: ...,
client: { ... },
type: 'stats_for_item1',
data: {
id: ObjectId('xxx'),
field1: 1,
field2: 2
}
},
{
timestamp: ...,
client: { ... },
type: 'stats_for_item2',
data: {
id: ObjectId('zzz'),
field3: 3,
field4: {
field5: [5, 1]
}
}
}

如您所见,我们有公共(public)部分和 data 字段,item1item2 有几个不同的字段。

似乎只有 timestamptype 字段会被索引(当然还有 _id)。而且此类元素的数量有限,总共有 3 种元素类型。会有大量的写,和少量的读

那么,我的问题是,如何组织这样的结构?使用一个大集合 stats 并将所有内容存储在那里?不要创建几个集合 stats_item1stats_item2stats_item3。什么是最优的?有什么好处吗?从 mongo 的角度来看,对于分片/索引/查询/锁定/等?

最佳答案

我可能会保留一个收藏。如果您稍后确实获得了另一种统计类型,则不必围绕随后必须添加的新集合重新设计代码。您可以通过在“类型”上创建索引来专门搜索具有特定类型的项目,但您也可以搜索所有 项目,因为您将它们全部放在一个集合中,并在“时间戳”上建立索引”。 (请注意,MongoDB 还会向每个文档添加一个 _id 字段,并且还会向该文档添加一个索引)。

对于分片,您需要为每个集合选择一个键。我不知道您的写入/读取比率是多少以及您打算如何读取数据,但我怀疑您稍后会进行某种日志记录和一些分析。在那种情况下,也许“客户端”上的分片键最有意义。 timestamp 可能是一个糟糕的选择,因为它会强制所有写入到一个分片。

锁定一个或三个集合之间的区别并没有太大区别,因为现在 mongoDB 不对每个集合进行锁定(仅在 2.0 中对每个服务器实例进行锁生成,以及对每个数据库进行锁生成在即将到来的 2.2 中)。

干杯,

德里克

关于mongodb - 为类似的数据结构选择 MongoDB 集合结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9172834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com