菜鸟问一个mongodb的结构问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
refresh
V2EX    MongoDB

菜鸟问一个mongodb的结构问题

  •  
  •   refresh 2013-05-25 22:43:45 +08:00 5112 次点击
    这是一个创建于 4521 天前的主题,其中的信息可能已经有所发展或是发生改变。
    假如我要做一个todo的应用,并且有离线版本,离线用sqlite存储,客户端与服务器端同步。
    我是把一个用户的所有todo都放到一个document好呢,还是像传统的关系型数据那样一条一条记录好呢?

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

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

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

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

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

    @chemzqm 我希望服务器与客户端的代码是基本一致的,或者是80%是一致的,但如果数据结构不一致,可能这个目标就达不到了,或者要经过一些周折
    tangzx
        5
    tangzx  
       2013-05-26 22:55:41 +08:00
    “按查询业务的需求来决定你的数据结构”,这就是mongo。
    tangzx
        6
    tangzx  
       2013-05-26 22:56:31 +08:00
    如果查询业务仅“列出我的todo",就按第一种,如果需要大量数据分页,筛选,查看我同事的todo,之类的话就选第二种
    tangzx
        7
    tangzx  
       2013-05-26 22:57:20 +08:00
    todo无线增长不影响内嵌文档的效率,可以用$push操作符
    leafduo
        8
    leafduo  
       2013-05-27 00:04:41 +08:00
    最好是要分开,单独的 collection
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     884 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 20:44 PVG 04:44 LAX 13:44 JFK 16:44
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86