分别解决每个问题:
不,那不再是真的了.较旧版本的MongoDB没有日记功能,但是当前版本没有日志功能,而且从第2版开始,默认情况下会激活它.但是,您应该SafeMode
在驱动程序级别使用a ,以确保驱动程序和数据库之间的通信成功.
嵌入式帖子和帖子可能不是最佳选择.我们已经构建了类似的东西,我们使用的是一个平面集合,其中每个帖子都存储了ParentId和ParentThreadId.嵌入有利有弊,但我们决定的论点是:
a)通常,我们只想在给定线程中获取站点范围内的最新注释或n个最新注释,这两个注释都无法使用嵌入式文档完成.
b)如果你有很多人同时写同一个主题,你需要注意并发性.这可以解决,但我们觉得使用不能真正干扰的不同物体会更安全,即使你犯了错误
c)正如Joe指出的那样,你必须在不同的系统中处理全文搜索.
如果您有大量更新,嵌入式文档就不太适合,因为容器(包含嵌入对象的集合项)将会增长.当它增长时,MongoDB将不得不重新分配它,这可能需要更长的时间并分割数据.
图3(a).对于朋友的状态更新,使用扇出策略是有道理的.我昨天回答了类似的问题.
不要使用自动增量数字.默认情况下,这是一个有缺陷的设计,因为它在分布式环境中并不能很好地工作.对于db,无论是存储int
值0x00000001
还是存储值都没有区别0xfa9ac7335
.保持数字小是没有意义的.我会选择Mongo ObjectId
或Guid
/ UUID
.前者还包含时间戳btw.
我没有使用过mongoose,但总的来说,有悲观和乐观锁的典型策略.