2016-08-19 47 views
0

我試圖挽救它具有「論壇狀」結構數據:論壇喜歡數據結構:NoSQL合適嗎?

這是簡化的數據模型:

+---------------+ 
|  Forum  | 
|    | 
| Name   | 
| Category  | 
| URL   | 
|    | 
+---------------+ 
     |1 
     |n 
+---------------+ 
|    | 
|  Thread | 
|    | 
| ID   | 
| Name   | 
| Author  | 
| Creation Date | 
| URL   | 
|    | 
+---------------+ 
     |1 
     |n 
+---------------+ 
|    | 
|  Post  | 
|    | 
| Creation Date | 
| Links   | 
| Images  | 
|    | 
+---------------+ 

我有多個論壇/板。他們可以有一些線程。一個線程可以包含n個帖子(我只是對線程包含的鏈接,圖像和創建日期感興趣,以便進行數據分析)。

我正在尋找正確的技術來保存和讀取這樣的結構中的數據。

雖然我過去大量使用SQL數據庫,但我也有一些NoSQL項目(主要是基於MongoDB的文檔)。 我確信MongoDB非常適合在這樣的結構中存儲數據(論壇是一個文檔,而線程是子文檔,帖子是線程中的子文檔)。但是讀他們呢?我有以下的使用情況:

  • 列表從一個論壇所有帖子與特定類別
  • 查找所有數據集在後一個特定的鏈接/文件

哪種技術是最適合的用例?

+0

註冊第二個項目符號,你的意思是來自帖子,來自論壇的URL和來自論壇的URL的鏈接?即使您提到的論壇,線程和發佈的層次結構,我認爲您的用例可以從Post中訪問數據。我的理解是否正確? – notionquest

+0

對不起,這並不明確:我的意思是在帖子中提到的Link。 – mosquito87

回答

0

請在下面找到我的草案解決方案。我已經考慮了MongoDB的下面的設計。

收集後: -

「圖像」應分別在GridFS的爲MongoDB中收集存儲有16MB的最大尺寸。您可以將圖像的ObjectId存儲在Post集合中。

{ 
    "_id" : ObjectId("57b6f7d78f19ac1e1fcec7b5"), 
    "createdate" : ISODate("2013-03-16T02:50:27.877Z"), 
    "links" : "google.com", 
    "image" : ObjectId("5143ddf3bcf1bf4ab37d9c6e"), 
    "thread" : [ 
     { 
      "id" : ObjectId("5143ddf3bcf1bf4ab37d9c6e"), 
      "name" : "Sam", 
      "author" : "Sam", 
      "createdate" : ISODate("2013-03-16T02:50:27.877Z"), 
      "url" : "https://www.wikipedia.org/" 
     } 
    ], 
    "forum" : [ 
     { 
      "name" : "Andy", 
      "category" : "technology", 
      "url" : "https://www.infoq.com/" 
     } 
    ] 
} 

爲了按類別訪問數據,您可以在「forum.category」字段中創建一個索引。

db.post.createIndex({ "forum.category": 1 }) 

爲了通過鏈接訪問數據,您可以在「鏈接」字段上創建索引。

db.organizer.createIndex({ "links": 1 }) 

請注意,指標不是強制性。您也可以訪問/查詢沒有索引的數據。如果您需要更好的讀取性能,您可以創建索引。

我見過使用MongoDB的應用程序與您的類似用例。您可以繼續使用MongoDB獲取上述用例(或訪問模式)。