类似论坛的数据结构:NoSQL 是否合适?

3

我将尝试保存具有“论坛式”结构的数据:

这是简化后的数据模型:

+---------------+
|     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非常适合在这样的结构中存储数据(论坛是一个文档,主题帖是子文档,帖子是主题帖的子文档)。但是阅读数据怎么办?我有以下使用情况:

  • 列出具有特定类别的论坛中的所有帖子
  • 查找所有数据/文档中帖子中的特定链接

哪种技术最适合这些用例?


关于第二个要点,您是指来自帖子的链接、来自主题的URL和来自论坛的URL吗?尽管您提到的层次结构为论坛、主题和帖子,但我认为您的用例从帖子中访问数据。我的理解正确吗? - notionquest
抱歉,我表达不太清楚:我的意思是在帖子中提到的链接。 - mosquito87
1个回答

2
请看下面我的初步解决方案。我考虑了以下MongoDB设计。
帖子集合:-
由于MongoDB集合最大只能存储16MB,因此“image”应该单独存储在GridFS中。您可以在Post集合中存储图像的ObjectId。
{
    "_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来解决上述提到的用例(或访问模式)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接