是什么让 Cassandra(以及一般的 NoSQL)成为 RDBMS 的更好解决方案?

2024-02-08

嗯,NoSQL 现在是一个流行词,所以我一直在研究它。我还没有弄清楚 ColumnFamilies 和 SuperColumns 等...但我一直在研究数据是如何映射的。

看完之后this http://arin.me/blog/wtf-is-a-supercolumn-cassandra-data-model文章和其他人,数据似乎以类似 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?

我想我要问的是“我什么时候应该选择 NoSQL 而不是 RDBMS?”

顺便说一句,正如我所说,我仍然没有完全理解如何实施 Cassandra 数据库。即,我该如何create上面的用户表在一个新的数据库中?您可以指出的任何教程、文档等都会很棒。我的谷歌搜索并没有出现太多“从头开始”的信息......


如果您是 google,那么您可能会发现 NoSQL 比 RDBMS 对您来说更容易。既然您不是,那么 RDBMS 为您提供的许多优势可能会有一些用处。值得注意的是,在单个节点上,NoSQL 绝对没有优于 RDBMS 的优势。不过,与 NoSQL 相比,RDBMS 具有许多优势。这些是什么?

RDBMS 使用一些相当深入的魔法来理解它拥有的数据以及您所请求的数据,以便它能够以最有效的方式返回该数据。如果您没有询问某些列,rdbms 不会浪费任何精力来检索它。如果您对两个表中具有共同字段的行感兴趣(顺便说一句,这是一个联接),RDBMS 不必检查每一对行是否匹配,或者 NoSQL 数据库通常所做的只是给出你做一切事情并让你做检查。使用 RDBMS,您通常可以构建实际上“关于”您正在使用的数据的查询,例如“如果日期是星期二”,并且如果您的索引支持它(如果您经常执行该查询,那么您将添加这样的查询)索引)您可以有效地获取这些行。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是什么让 Cassandra(以及一般的 NoSQL)成为 RDBMS 的更好解决方案? 的相关文章

  • 如何用 UNION 运算符替换 OR 运算符?

    这是我的查询 SELECT h id h subject h body matnF h amount h keywords tags h closed h author id author h AcceptedAnswer h type h
  • 一个存储过程创建的临时表可以在另一个存储过程中使用吗?

    我有一个存储过程 它使用找到的索引创建一个临时表CONTAINSTABLE就像 我放了一段存储过程代码 CREATE TABLE tmpTable ID INT RANK INT SELECT query SELECT DISTINCT I
  • Postgres 简单的“数据透视表”

    如果我有一个这样的数据表 name type count test blue 6 test2 red 3 test red 4 我怎样才能查询它以获得一个表 name num red num blue test 4 6 test2 3 0
  • MYSQL中收盘价的简单移动平均线计算和更新表

    我可以使用一些帮助 最好是虚拟指南 来更新下表 CREATE TABLE SYMBOL day date NOT NULL open decimal 8 3 DEFAULT NULL high decimal 8 3 DEFAULT NUL
  • SQL 多次更新与单次更新性能

    假设我有 10 000 行需要更新 什么会更快 UPDATE DB Servers SET Live 1 where name server1 UPDATE DB Servers SET Live 1 where name server2
  • SQL:每天选择最接近特定时间的一条记录

    我有一张表存储某个时间点的值 CREATE TABLE values value DECIMAL datetime DATETIME 每一天可能有多个值 也可能某一天只有一个值 现在我想获取给定时间跨度 例如一个月 内最接近一天中给定时间的
  • 修订:算法和数据结构

    我需要通过修订来构建和处理数据的想法 例如 我有一个对象数据库 例如汽车 每个对象都有许多属性 这些属性可以是任意的 因此没有一个固定的模式来描述这些对象 这些对象可能保存为键值对 现在我需要更改对象的属性 我不想完全重写它 我希望能够返回
  • 如何在MyBatis foreach中迭代HashMap?

    我正在尝试在 mybatis 中生成如下所示的 sql SELECT COL C FROM TBLE 1 WHERE COL A COL B in kp kar srt sach 而我的输入参数类型是HashMap 现在如何从映射器 xml
  • Elasticsearch 聚合过滤器

    因为我在谷歌上找不到任何东西 是否可以在elasticsearch中过滤聚合 我正在考虑这样的事情 获取 SOME object X gt 100 的所有对象 提前致谢 编辑 样本数据 我有以下文档结构 docKey 1 value 2 d
  • SQL Server 2008 R2 的 Try_Convert

    我正在使用 SQL Server 2008 R2 并且有一个VARCHAR我想要转换为的列DECIMAL 28 10 using CONVERT 但其中许多行的格式错误 因此无法将它们解析为数字 在这种情况下 我只想通过将结果设置为 0 或
  • SQL SERVER 中的排序依据和大小写

    我需要在存储过程中按功能排序 一个值被发布到网络服务 并且基于该值我必须以某种方式对结果进行排序 即 当 ColName 按 ColName 发布订单时 当 ColName2 由 ColName2 发布订单时 我正在研究使用 Case 但出
  • 如何在sqlite中创建物化视图?

    我对物化视图和 SQLite 进行了无数次搜索 据我所知 2004 年和 2006 年似乎有人提到 SQLite 没有物化视图 紧随其后的是 SQLite 的变更日志2008年3月 http www sqlite org releaselo
  • 将 UPDATE 转换为 INSERT INTO ON DUPLICATE KEY UPDATE 语句

    我有这个 UPDATE MySQL 语句 效果很好 UPDATE table1 Inner Join table2 ON table2 id table1 gw id SET table1 field1 1 table1 field2 2
  • 从表中删除孤儿

    我正在尝试清理一张有很多孤立项目的桌子 我通过查找空值来检查是否与另一个表存在关系来解决此问题 DELETE FROM table1 LEFT JOIN table2 ON table1 ID table2 ID WHERE table2
  • 模式更新后 jOOQ 生成的类的运行时验证?

    我用org jooq util DefaultGenerator在构建过程中生成 jOOQ 类来表示我的数据库模式 当应用程序运行时 架构预计会在应用程序不知情的情况下发生更改 此类更改可能与已生成的代码兼容 也可能不兼容 如何在运行时检测
  • Oracle 中的 SQL 调优 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何文章 链接可以让我找到 SQL 调优 Oracle 的示例 如果能用例子来解释那就太好了 我需
  • 对于数据库来说,选择正确的数据类型会影响性能吗?

    如果是这样 为什么 我的意思是 tinyint 的搜索速度比 int 快吗 如果是这样 性能上的实际差异是什么 是的 根据数据类型 它确实有所不同 int vs tinyint不会在速度上产生明显的差异 但会在数据大小上产生差异 假设tin
  • 使用 MS Access 获取行的第一个实例

    EDITED 我有这个查询 我想SELECT表中记录的第一个实例petTable SELECT id pet ID FIRST petName First Description FROM petTable GROUP BY pet ID
  • 查询中列的顺序重要吗?

    当从 MySQL 表中选择列时 与表中的顺序相比 选择列的顺序是否会影响性能 不考虑可能覆盖列的索引 例如 您有一个包含行 uid name bday 的表 并且有以下查询 SELECT uid name bday FROM table M
  • 如何使用 MySQL 的 LOAD DATA LOCAL INFILE 在导入 CSV 时将字符串日期更改为 MySQL 日期格式

    我正在使用 MySQL 的 LOAD DATA LOCAL INFILE SQL 语句将数据从 CSV 文件加载到现有数据库表中 下面是一个 SQL 语句示例 LOAD DATA LOCAL INFILE file csv INTO TAB

随机推荐