AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 280929
Accepted
overexchange
overexchange
Asked: 2020-12-05 11:15:06 +0800 CST2020-12-05 11:15:06 +0800 CST 2020-12-05 11:15:06 +0800 CST

为什么 Cassandra 不被视为关系数据库?

  • 772

阅读此答案

关系数据库基于关系模型,这是一种在表中表示数据的直观、直接的方式。在关系数据库中,表中的每一行都是具有唯一 ID 的记录,称为键。表的列保存数据的属性,每条记录通常都有每个属性的值,便于建立数据点之间的关系。

Cassandra 有桌子。

CREATE TABLE movies (
    movie_id UUID,
    title TEXT,
    release_year INT,
    PRIMARY KEY (( movie_id ))
);

关系数据与 ACID 属性的支持无关。

关系数据与规范化数据无关


  1. 为什么 Cassandra 不被视为关系数据库?

  2. 为什么 Cassandra 被认为是 NoSQL 数据库?尽管它有桌子

relational-theory nosql
  • 3 3 个回答
  • 1763 Views

3 个回答

  • Voted
  1. Best Answer
    David Browne - Microsoft
    2020-12-05T12:09:41+08:002020-12-05T12:09:41+08:00

    Cassandra 不是 RDBMS,因为它不支持关系数据模型。

    关系模型的基本假设是所有数据都表示为数学 n 元关系,n 元关系是 n 个域的笛卡尔积的子集

    https://en.wikipedia.org/wiki/Relational_model

    相反,它将数据建模为键值存储,其中值是行。但并不要求“表”中的所有“行”都具有相同的“列”,就像关系模型中的情况一样。

    来自维基百科:

    与 RDBMS 中的表不同,同一列族中的不同行不必共享同一组列,并且可以随时将列添加到一个或多个行中。 [29]

    Cassandra 中的每个键对应一个值,该值是一个对象。每个键都有作为列的值,并且列被分组到称为列族的集合中。因此,每个键标识一行可变数量的元素。这些列族可以被视为表。Cassandra 中的表是由键索引的分布式多维映射。此外,应用程序可以指定超级列或简单列族中列的排序顺序。

    https://en.m.wikipedia.org/wiki/Apache_Cassandra

    • 10
  2. bbaird
    2020-12-05T13:28:55+08:002020-12-05T13:28:55+08:00

    为什么 Cassandra 不是关系型的

    其他答案很接近(我将解释为什么每个都不完整),但是文档中的这段文本突出了 Cassandra 非关系型的确切原因:

    Apache Cassandra 没有外键或关系完整性的概念。

    强制执行 PK/FK 关系的能力是 RDBMS 不可或缺的。引用 Codd 的数据库管理关系模型(强调我的):

    1.2.4 特征的省略 在实现关系数据库管理系统时,会出现很多关于关系模型的问题。有时,由于被评估为无用,因此省略了对某些基本功能的支持。不幸的是,关系模型总是具有密不可分的特征。这意味着在 DBMS 中省略模型的一个特征会阻碍许多其他特征的实现。例如,不支持主键和外键(在第 1.8 节中定义)会危及

    • 查看可更新性(参见第 17 章),

    • 主体完整性约束(见第 13 章),以及

    • 逻辑数据独立性(见第 20 章)。

    您可以更改数据的存储方式(Codd 明确表示所有关系都可以表示为表,而不是必须这样表示),但是如果缺少将数据库保持在一致状态所需的元素,则系统无法调用自身一个关系数据库。

    卡桑德拉是 NoSQL 吗?

    从某种意义上说,其他任何东西都是。NoSQL 在很大程度上是一个营销术语,用于描述绕过关系数据库中感知缺陷的系统,他们将其与语言 SQL 混淆。

    我们已经看到许多以“NoSQL”名义销售的东西,它们是面向表/行的,使用 RDBM 常见的索引方法,并且在过去几年中,增加了对 SQL 子集的支持。

    在 Cassandra 的案例中,CQL 与 SQL 非常相似,因此您可以看到为什么描述相当模糊。

    对其他答案的评论

    我认为很容易被数据存储的物理实现所吸引,而不是数据存在的框架。

    列存储是一种物理存储和检索数据的方法,它与关系模型无关。

    同样,实体具有可选/未指定列的想法并不是 NoSQL 独有的——您当然可以使用子类型和/或 6NF 在关系数据库中实现类似的概念。

    • 5
  3. J.D.
    2020-12-05T11:59:43+08:002020-12-05T11:59:43+08:00

    在 NoSQL 数据库系统(如 Cassandra)中存储和表示数据的方式与在 RDBMS 中存储和表示数据的方式不同。尽管有一个名为 Table 的对象,但它不会像 RDBMS 对 Table 那样对数据进行分类。例如,Cassandra 以列存储格式存储数据。(一些 RDBMS 也使用列存储,例如 PostgreSQL *with extensions,但大多数是行存储,例如 Microsoft SQL Server,它可以利用不同的数据结构进行索引,例如 B-Tree。)

    主要区别在于 Cassandra 引擎中的算法被设计为能够有效地处理高变化或非结构化数据,而不是 RDBMS,它具有一组不同的算法来处理关系数据。

    您可以在此处阅读有关Cassandra 的更多信息。

    • 2

相关问题

  • “hasMany”属于哪个范围?

  • 关系设计 - 一个外键列中的多个表?

  • 命名表和视图时应该遵循什么标准?

  • 如何构建模型以正确有效地表示关系数据库上的树状数据?

  • NoSQL 和传统的 RDBMS 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve