NoSQL和数据组织

3
所以我正在编写一个应用程序,允许用户创建一种类型的测验。每个测验都可以不同,即它们会有独特的问题和答案。我从未使用过任何nosql数据库,我试图弄清楚nosql数据库(couch,mongo等)如何实际组织数据。这种数据存储似乎非常适合这种类型的应用程序(即没有定义可以问多少问题的表),但我仍然不确定nosql数据库实际上是如何工作的。
我倾向于更喜欢视觉学习者,请问是否有人能指向一些好的视觉资料或描述nosql数据库实际上如何组织它们所持有的数据?

2
这似乎是一个适合使用SQL解决方案的情况。每个表示对象(问题、答案、用户等)都有一个定义好的结构,非常适合使用表格来处理。不要仅仅因为某种最新技术潮流存在就盲目应用它。 - Polynomial
似乎你对 SQL 数据库的工作方式不是很熟悉,实际上使用 SQL 可以很容易地构建表格来适应任意数量的问题和每个问题的答案,而使用 MongoDB 则相对困难。我同意 Poly 的观点,选择一种技术然后将其应用于问题是一个坏主意,更好的方法是分析问题,然后选择最佳技术来解决它。 - PurplePilot
我非常赞同这些评论。实际上,我过去十年一直在使用rdb(mysql)。我认为它们非常适用于许多不同的事情。这更像是一个学习项目,我想看看事情是如何工作的,以便自己找出它们适合什么。这将是一个node项目,所以它似乎很容易适应,json对我很有吸引力。但关于你的评论,我完全同意。 - Greg
这些问题、答案和评论对我在我的问题中有所帮助,谢谢大家! - Sony Santos
1个回答

4
我将谈论MongoDB。MongoDB使用bson格式(二进制JSON)存储数据。您可以认为它以JSON格式存储数据。
MongoDB包含一个非常有用的功能,即能够嵌入文档。您可以在应用程序中使用此功能:
因此,您可以像这样在问题集合中嵌入答案:
questions {
   _id: 1,
    text: "What is your name",
   answers: [
    {
      order: 1,
      text: "Andrew"
    },
   {
      order: 1,
      text: "Greg"
    }
   ]
}

嵌入通常可以使您的数据库架构更简单,并且允许避免连接,数据总体上看起来更自然。例如,在SQL世界中,您没有其他选择,只能为问题和答案创建单独的表。

您可以使用的另一个好处是可扩展性。Mongodb被设计为完全可扩展,支持分片和副本集。

您可以开始阅读有关模式设计的更多信息here。此外,您还可以查看little monogdb book,其中仅有30页,但它应该帮助更深入地了解mongodb的工作原理。

只需选择一些NoSQL数据库并尝试玩耍,您就有一个相当简单的项目可以开始。我相信一旦尝试,您会喜欢它。


使用json的想法真的很吸引我。这将是一个node项目,所以它们似乎会非常配合。那么,“用户”表的等效物只是一个用户对象吗?像这样的用户:[{id: 1, name: foo},...]然后测验的对象只是测验:[{}, {}],每个条目都是与某些用户id相关联的唯一测验?在这种方式下,我看到这是关系型的,但我知道这些类型的数据库远离这个概念... - Greg
“而且大多数NoSQL数据库通常”都是文档格式。不,不,不。有些是键值对,有些是基于大表格(类似于电子表格),实际上这是NoSQL领域的一个重要区别,因为它们并不是同质的,你真的需要知道你要解决的问题,然后再开始编码,以便将数据存储适配到问题上。文档型或键值对或大表格,您还需要了解CAP定理并将其应用于您的问题,以便能够做出合理的决策。 - PurplePilot

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