我需要帮助在 mongo 中建模我的数据。我的大部分经验都是在关系数据库中,我刚开始使用 mongo。我正在为不同的事件建模数据。
- 每个“事件”都具有相同的字段。
- 每个“事件”将有数百到数百万个文档/行
- 事件是动态的,即会根据需要创建新的事件。即可能创建一个新的“2016 年夏季奥运会”活动。
可能最重要的是,在处理事件(CRUD 操作)时,用户必须指定事件名称。
到目前为止,我可以看到几种方法来做到这一点,并且我不想在以“错误”方式设置我的数据模型时犯下重大错误。
1) 一个包含所有事件数据的“事件”集合。“事件”名称的索引。查询看起来像:
db.events.find({event: 'Summer Olympics 2012');
{event: 'Summer Olympics 2012', attributes: [{name: 'joe smith', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'jane doe', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'john avery', .... }
{event: 'Summer Olympics 2012', attributes: [{name: 'ted williams', .... }
db.events.find({event: 'Summer Olympics 2013'})
{event: 'Summer Olympics 2013', attributes: [{name: 'steve smith', .... }
{event: 'Summer Olympics 2013', attributes: [{name: 'amy jones', .... }
2) 每个新事件的集合,带有集合以跟踪所有事件名称。事件名称不需要索引,因为每个事件都存储在不同的集合中。
// multiple collections, create new as needed
db.summer2012.find() // get summer 2012 docs
db.summer2016.find() // get summer 2016 docs
//'events' collection
db.events.find() // get all events that I would have collections for
{name: 'summer2012', title: 'Summer Olympics 2012'};
{name: 'summer2016', title: 'Summer Olympics 2016'};
对于#1,我有点担心,一旦我达到 100 个事件,每个事件都有数百万条记录,即使其中一个事件只有 500 个文档,每个“事件”的查找也会很慢。
对于#2,我是否通过每次都创建一个新集合来“绕过”mongo 模型并且出现一个事件?
欢迎提出任何意见/想法,因为我真的不知道哪一个最终会表现得更好,或者其中一个是否会给我带来更多麻烦。我环顾四周(包括mongo的网站),我真的找不到具体的答案。