论坛喜欢数据结构:NoSQL合适吗?

时间:2016-08-19 11:22:54

标签: mongodb couchdb 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非常适合在这样的结构中存储数据(论坛是一个文档,而线程是子文档。帖子是线程中的子文档)。但阅读它们呢?我有以下用例:

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

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

1 个答案:

答案 0 :(得分:2)

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

收集后:

“image”应单独存储在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来处理上述用例(或访问模式)。