文章以及课程模型需要定义所属分类,该分类是多级的,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本身,它的內嵌文檔和普通文檔差別並不大,但是如果你索要增加的內嵌文檔是一個頻繁更改的,尤其是大小沒有什麼限制的話,還是用關聯比較合適!
分類定義為一個巢狀文件 即可,因為你不會經常去更新它。
用引用吧.