文章以及课程模型需要定义所属分类,该分类是多级的,MongoDB中怎么设计比较合理?如果直接定义在文档里,担心一致性的问题!
小伙看你根骨奇佳,潜力无限,来学PHP伐。
MongoDB 中的集合或嵌入式文档 是也乎,相关的专门思考
我是这么做的:
{ 'name': '苹果', 'category1': '生鲜', 'category2': '水果' }
很容易查询和分级
如果内嵌文档 create/delete/update/ 操作较频繁的话,而且取数据时还有排序的要求,最多至三级比较好,不要内嵌太深。 我现在因为一些 collection 内嵌得太多,导致很多操作相当不方便,所以又得花很多功夫来把它们 extract 出来。 当然,如果你只是为了一次性存数据,对数据的操作以读为主,就不用考虑这么多。 像你提出来的课程文章分类,如果我没理解错需求的话,可不可以这样:
create/delete/update/
collection
extract
"_id": "name" : "category" : [ { "_id" : "name" : "degree" : }, { "_id" : "name" : "degree" : }, ]
degree表示课程类别中的级数,这样一个文章在课程内的类别在读的时候按照 degree 来读取。例如,一篇文章为《牛顿第二定律》,它的课程分类为(物理->力)。那么就存为:
degree
"_id": "name" : "category" : [ { "_id" : "name" : '物理' "degree" : 1 }, { "_id" : "name" : '力' "degree" : 2 }, ]
读数据的时候按 category 的 degree 来 sort 即可。
category
sort
这里其实还是一个设计权衡,和mongdb并没有什么太大关系,即便是mysql,一样需要思考这个问题! 个人感觉还是得从业务出发,思考一下所要分析的业务数据是否满足限制条件,例如说是否要求实时一致性还是满足最终一致性即可。
另一个层面,对于mongdb本身,它的内嵌文档和普通文档差别并不大,但是如果你索要增加的内嵌文档是一个频繁更改的,尤其是大小没有什么限制的话,还是用关联比较合适!
分类定义为一个嵌套文档 即可,因为你不会经常去更新它。
用引用吧.
MongoDB 中的集合或嵌入式文档
是也乎,相关的专门思考
我是这么做的:
很容易查询和分级
如果内嵌文档
create/delete/update/
操作较频繁的话,而且取数据时还有排序的要求,最多至三级比较好,不要内嵌太深。我现在因为一些
collection
内嵌得太多,导致很多操作相当不方便,所以又得花很多功夫来把它们extract
出来。当然,如果你只是为了一次性存数据,对数据的操作以读为主,就不用考虑这么多。
像你提出来的课程文章分类,如果我没理解错需求的话,可不可以这样:
degree
表示课程类别中的级数,这样一个文章在课程内的类别在读的时候按照degree
来读取。例如,一篇文章为《牛顿第二定律》,它的课程分类为(物理->力)。那么就存为:读数据的时候按
category
的degree
来sort
即可。这里其实还是一个设计权衡,和mongdb并没有什么太大关系,即便是mysql,一样需要思考这个问题!
个人感觉还是得从业务出发,思考一下所要分析的业务数据是否满足限制条件,例如说是否要求实时一致性还是满足最终一致性即可。
另一个层面,对于mongdb本身,它的内嵌文档和普通文档差别并不大,但是如果你索要增加的内嵌文档是一个频繁更改的,尤其是大小没有什么限制的话,还是用关联比较合适!
分类定义为一个嵌套文档 即可,因为你不会经常去更新它。
用引用吧.