2016-08-19 53 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获取上述用例(或访问模式)。