好吧,NoSQL现在是一个流行语,因此我一直在研究它。我尚未了解ColumnFamilies和SuperColumns等。但是我一直在研究如何映射数据。

阅读this文章和其他文章后,似乎数据以JSON之类的格式映射。

Users = {
    1: {
        username: "dave",
        password: "blahblah",
        dateReged: "1/1/1"
    },
    2: {
        username: "etc",
        password: "blahblah",
        dateReged: "2/1/1",
        comment: "this guy has a comment and dave doesns't"
    },
}

RDBMS格式为:
Table name: "Users"

id | username | password | dateReged | comment
---+----------+----------+-----------+--------
 1 |  dave    | blahblah |  1/1/1    |
---+----------+----------+-----------+--------
 2 |  etc     | blahblah |  2/1/1    | this guy has a comment and dave doesn't

假设我正确理解了上述示例,那么为什么我选择RDBMS设计而不是NoSQL设计?就个人而言,我宁愿使用JSON结构...这是否意味着我应该选择NoSQL而不是MySQL?

我想我要问的是“何时应该在RDBMS上选择NoSQL?”

附带一提,正如我已经说过的那样,我仍然没有完全理解如何实现Cassandra数据库。即,如何在新数据库中创建上述Users表?您可以指向的任何教程,文档等都很棒。从“从头开始”方面,我的googleing并没有出现太多...

最佳答案

如果您是Google,则可能处于NoSQL比RDBMS容易的位置。由于您并非如此,RDBMS为您提供的许多优点可能会有所用处。值得注意的是,在单个节点上,NoSQL与RDBMSes相比绝对没有优势。但是,RDBMS与NoSQL相比具有许多优势。这些是什么?

RDBMS使用某种非常深刻的魔术来理解其拥有的数据以及您所要求的数据,从而可以最有效的方式返回该数据。如果您不询问某些专栏,则rdbms不会花费任何精力来检索它。如果您对在两个表中具有相同字段的行(这是一个联接,顺便说一句)感兴趣,则RDBMS不必检查每一对行是否匹配,或者NoSQL db通常所做的只是给出给您一切,让您进行检查。使用RDBMS,通常可以构造实际上与所使用数据有关的查询,例如“如果日期是星期二”,并且如果索引支持(如果您大量进行该查询,则可以添加这样的查询)索引),您可以有效地获取这些行。

RDBMSes很好是另一个原因。在RDBMSes上,事务很容易,但是在NoSQL数据库上则很难实现。假设您正在实现博客引擎。假设帖子标题(出现在URL中)在所有帖子中都必须是唯一的。在RDBMS中,您可以轻松地确保不会意外出错。对于NoSQL数据库,如果它确实支持某种事务完整性,则通常处于分片级别,任何可能需要这种完整性的事物都必须位于同一分片上。由于任何一对用户都可能同时发布,因此每个用户的帖子必须位于同一碎片上才能获得相同的效果。好吧,那么NoSQL根本不会给您带来任何好处。

关于sql - 是什么使Cassandra(通常是NoSQL)成为RDBMS的更好解决方案?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3673125/

10-08 21:22