gpt4 book ai didi

cassandra - 比较 Cassandra 结构与关系数据库

转载 作者:行者123 更新时间:2023-12-04 02:01:44 26 4
gpt4 key购买 nike

几天前,我阅读了有关 NoSQL 的宽列存储类型和
完全是 Apache-Cassandra。
我的理解是 Cassandra 包括:
一个键空间(如关系数据库中的数据库)并支持许多列族或表(与关系数据库中的表相同)和无限行。
来自 Stackoverflow 标签:

A wide column store is a type of key-value database. It uses tables, rows, and columns, but unlike a relational database, the names and format of the columns can vary from row to row in the same table.


在 Cassandra 中,所有行(在表中)都应该有一个行键,然后每个行键可以有多个列。
我读到了关系数据库和 NoSQL (Cassandra) 在实现和存储数据方面的差异。
但我不明白结构之间的区别:
想象一下我有一个表(或 Cassandra 中的列族)的场景:
当我执行这样的查询(CQL)时:
select * from users;
如您所见,它给了我结果:
lastname  | age  | city          | email               
----------+------+---------------+----------------------
Doe | 36 | Beverly Hills | janedoe@email.com
Jones | 35 | Austin | bob@example.com
Byrne | 24 | San Diego | robbyrne@email.com
Smith | 46 | Sacramento | null
Jones2 | null | Austin | bob@example.com
因此,我使用以下查询在关系数据库(MS SQL)中执行上述场景:
select * from [users] 
结果是:
lastname  | age  | city          | email               
----------+------+---------------+----------------------
Doe | 36 | Beverly Hills | janedoe@email.com
Jones | 35 | Austin | bob@example.com
Byrne | 24 | San Diego | robbyrne@email.com
Smith | 46 | Sacramento | NULL
Jones2 | NULL | Austin | bob@example.com
我知道 Cassandra 支持动态列,我可以通过以下方式执行此操作:
ALTER TABLE users ADD website varchar;
但它在关系模型中可用,例如在 mssql 中,上面的代码也可以实现。就像是:
ALTER TABLE users ADD website varchar(MAX);
我看到的是第一次选择和第二次选择结果是一样的。
在 Cassandra 中,他们只是将行键(姓氏)作为独立对象提供,但它与 mssql(以及所有关系数据库)中的唯一字段(如 ID 或文本)相同,我看到 Cassandra 中的列类型是静态的(在我的示例中 varchar )不像它在 Stackoverflow 标记中描述的那样。
所以我的问题是:
  • 我对 Cassandra 的想象有什么误解吗?!
  • 那么两种结构有什么不同呢?!我告诉你结果是一样的。
  • 是否有任何特殊场景(类似 JSON)无法在关系数据库中实现但 Cassandra 支持? (例如,我知道 Cassandra 不支持嵌套列。)

  • 感谢您的阅读。

    最佳答案

    我们必须查看更复杂的示例才能看到差异:)

    开始:

  • 列族术语在旧的 Thrift API
  • 中使用
  • 在较新的 CQL API 中,
    使用术语表

  • 表被定义为“多维列族的二维 View ”。

    术语“宽行”主要与 Thrift API 有关。在 cql 中它的定义有点不同,但下面看起来是一样的。

    比较 SQL 和 CQL。在 SQL 表中是一组行。在简单的示例中,它看起来在 CQL 中是相同的,但事实并非如此。 CQL 表是一组分区,其中每个分区可以只是单行(例如,当您没有集群键时)或多行。包含多行的分区在 Thrift 热学中名为“wide-row”。要查看它是如何存储在下面的,请阅读例如 here 中关于复合键的部分.

    还有更多区别:
  • CQL 可以具有存储在分区级别的静态列 - 它
    似乎分区中的每一行都有一个共同的值(value),但实际上
    是存储在上层的单个值。它也可用于建模 1:N 关系
  • 在 CQL 中,您可以拥有集合类型列 - set、list、map
  • 列可以包含用户定义的类型(您可以定义例如 address 作为类型,并在许多地方重用此类型),或集合
    可以是用户定义类型的集合
  • 但是 CQL 也不支持 SQL 中可用的 JOIN,并且您必须非常仔细地构建表,因为它们必须
    严格面向查询(在 cassandra 中,您不能通过任何方式查询数据
    列值,二级索引也有很多限制)。这是
    通常说,在关系模型中,您可以清楚地基于
    在数据上,在 cassandra 中,您基于查询进行建模。

  • 我希望我能让你更清楚一点。我建议从 Datastax Core Concepts Course 观看一些视频(或阅读幻灯片)作为对 Cassandra 的可靠介绍。

    关于cassandra - 比较 Cassandra 结构与关系数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36210321/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com