我需要帮助在mongo中建模我的数据.我的大部分经验都是在relational DBs,我刚刚开始与mongo合作.我正在为不同的事件建模数据.
- 具有的每个"事件"都有相同的字段.
- 每个"事件"将有数以亿计到数百万的文档/行
- 活动是动态的,即根据需要创建新的活动.即
可能最重要的是,在处理事件(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模型?
任何 comments / idea 都是受欢迎的,因为我真的不知道哪一个最终会表现得更好,或者哪一个会给我带来更多麻烦.我环顾了四周(包括mongo的网站),真的找不到具体的答案.