论坛之类的数据结构:NoSQL合适吗?

Forum like data structure: NoSQL appropriate?

我正在尝试保存具有 "forum like" 结构的数据:

这是简化的数据模型:

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

我有多个 forums/boards。他们可以有一些线程。一个线程可以包含 n 个帖子(我只对线程包含的 link s、图像和创建日期感兴趣,以便进行数据分析)。

我正在寻找以这种结构保存和读取数据的正确技术。

虽然我过去大量使用 SQL 数据库,但我也有一些 NoSQL 项目(主要是基于 MongoDB 的文档)。 我确信 MongoDB 非常适合在这种结构中存储数据(论坛是文档,而线程是子文档。Posts 是线程中的子文档)。但是阅读它们呢?我有以下用例:

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

请在下面找到我的解决方案草案。我已经考虑 MongoDB 用于以下设计。

Post Collection:-

"image" 应单独存储在 GridFS 中,因为 MongoDB collection 的最大大小为 16MB。您可以将图像的 ObjectId 存储在 Post collection.

{
    "_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 } )

为了通过链接访问数据,您可以在 "links" 字段上创建索引。

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

请注意,索引不是强制性的。您也可以 access/query 没有索引的数据。如果您需要更好的读取性能,您可以创建索引。

我看到应用程序使用 MongoDB 来处理与您类似的用例。对于上述用例(或访问模式),您可以继续使用 MongoDB。