我试图保存有"论坛的数据,例如"结构:
这是简化的数据模型:
+---------------+
| 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 :(得分: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来处理上述用例(或访问模式)。