菜鸟问一个mongodb的结构问题

2013-05-25 22:43:45 +08:00
 refresh
假如我要做一个todo的应用,并且有离线版本,离线用sqlite存储,客户端与服务器端同步。
我是把一个用户的所有todo都放到一个document好呢,还是像传统的关系型数据那样一条一条记录好呢?

第一种:
{id: ObjectId, todos: [title: String, date: Date]}
第二种:
{id: ObjectId, title: String, date: Date}

再复杂一点,TODO再加上记帐的功能,就样就会有统计的需要,例如本周/本月/本年的收支结余之类的。

请问哪种数据库的设计比较好?另外要考虑客户端的sqlite同步,如果服务器端是一个用户一个document,客户端的数据库不一样,同步的时候会比较麻烦,要写的代码会比较多。

虚心求解答,先谢谢各位
4539 次点击
所在节点    MongoDB
8 条回复
chemzqm
2013-05-25 23:53:38 +08:00
"如果服务器端是一个用户一个document,客户端的数据库不一样,同步的时候会比较麻烦,要写的代码会比较多",这话理解不能...
gaocheng
2013-05-26 01:54:37 +08:00
代码写的多总比弄个没有扩展性可言的数据库设计好的多
heroicYang
2013-05-26 10:07:48 +08:00
todos是无限增长的,所以建议不要使用内嵌文档。
refresh
2013-05-26 20:22:55 +08:00
@heroicYang todos是无限增长不错,但一个人的todo总是有限,平均一天10个todo就很了不起了,这样十年才多少。

@gaocheng 扩展性我觉得倒不成问题,主要是对性能会有影响吗,再者就是考虑客户端和服务器端用同一套代码,嗯,用node.js的方案

@chemzqm 我希望服务器与客户端的代码是基本一致的,或者是80%是一致的,但如果数据结构不一致,可能这个目标就达不到了,或者要经过一些周折
tangzx
2013-05-26 22:55:41 +08:00
“按查询业务的需求来决定你的数据结构”,这就是mongo。
tangzx
2013-05-26 22:56:31 +08:00
如果查询业务仅“列出我的todo",就按第一种,如果需要大量数据分页,筛选,查看我同事的todo,之类的话就选第二种
tangzx
2013-05-26 22:57:20 +08:00
todo无线增长不影响内嵌文档的效率,可以用$push操作符
leafduo
2013-05-27 00:04:41 +08:00
最好是要分开,单独的 collection

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/70154

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX