开发者社区> 问答> 正文

mongodb 如何设计包含收支明细的数据库?

•用一个集合还是分成两个集合?
•如果用一个集合,收和支里包含的不同类型的数据怎么处理?
•如果分成两个集合,要显示收支明细,怎么查询?

展开
收起
蛮大人123 2016-02-13 17:44:31 2424 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    直观的想法:
    •如果用一个collection的话,那么每个document里面需要有一个字段标识该document类型是收入明细还是支持明细;
    •如果用2个collection的话,显示收支明细的时候,就需要通过两次查询分别查询收入collection和支出collection,再合并显示;
    针对你问题中不是很具体的需求,再细致分析一下:
    •对于一个collection的话,每条收支记录都是一个document放到collection,至于不同类型的数据,document是free schema的,在数据存储上是完全没有问题滴;你纠结的只是针对收支不同类型的数据的如何处理展示,这需要你很好定义收支明细的数据结构和各字段组成。对于查询,一个collection就很容易,完全可以根据时间来查询,然后在结果中根据标识收支类型的字段来分别处理显示;
    •对于分成2个collection的话,收支不同类型的数据完全不是问题,因为你分开存储,此时的collection基本就是关系db中的2个不同table,各放各的数据,互不干扰;对于查询的话,就比较麻烦点,一般的话,需要先按照时间从mongodb中分2次拉出收入明细和支出明细,然后按照时间顺序把二者进行归并排序,此时排序的工作量从mongodb转移到应用端。
    二种方案各有各的利弊,如果你的数据量不是很大,建议采用第一种方案,一个collection存放,存取操作方便;如果数据量很大,可采取第二种方案,将压力转移给应用端,毕竟应用的扩展相比数据库的扩展还是方便些。
    个人意见建议采用第一种方案,用一个collection存放,对于数据量不大,没有压力;如果数据量很大的情况,可按照时间将不同时间段的收支明细分别存入多个collection,在前端展示的时候,按照时间段来展示。这样的话,随着时间增长,只需要水平增加collection,数据存取的代码都无需改动,在查询的时候,只是需要根据查询时间段简单切换不同的collection即可,简单且高效。

    2019-07-17 18:42:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Data as a Service - 数据即服务 -- MongoDB⾼级应⽤模式 立即下载
阿里云MongoDB云服务构建 立即下载
饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的 立即下载