谷歌搜索定义要么返回面向列的数据库的结果,要么给出非常模糊的定义。
我的理解是宽列存储由列族组成,列族由行和列组成。所述系列中的每一行都一起存储在磁盘上。这听起来像是面向行的数据库存储数据的方式。这让我想到了我的第一个问题:
宽列存储与常规关系数据库表有何不同?这是我的看法:
* column family -> table
* column family column -> table column
* column family row -> table row
Run Code Online (Sandbox Code Playgroud)
这张来自Database Internals 的图片看起来就像两个普通表:
我对有什么不同的猜测来自这样一个事实,即沿边宽的列商店提到了“多维地图”。所以这是我的第二个问题:
宽列存储是否从左到右排序?意思是,在上面的例子中,行是先按Row Key,然后按Timestamp,最后按Qualifier?
这些术语之间存在很多混淆。我想把我的理解发表出来,看看人们是否同意。我在网上看到了相互矛盾和错误的定义。
在我看来,宽列数据库和列族数据库本质上是同一件事。他们是
主要区别是它们没有固定的列模式,并且显然不能进行表连接。
3 行(列族)的示例:每行具有不同的长度和/或列,但在磁盘上rowkey1的整个内容是连续的行,后面跟着类似于关系数据库的其他行
rowkey1 k1-v k2-v k3-v
rowkey2 k1-v k4-v
rowkey3 k2-v k4-v k5-v
另一方面,术语“列式数据库”与“面向列的数据库”相同。它们一次一列存储在磁盘上,而不是一次一行。它非常适合时间序列或任何多序列分析目的。事实上,每列都具有相同类型的数据并且存储在一起,从而可以实现更好的数据压缩,这是一个额外的好处。
一个例子:
在磁盘上:
a:1 b:2 c:3 d:4
10:1 9:2 8:3 7:4
列式数据库应该将列组存储在一起.但Cassandra按行存储数据.SS表将保存映射到其相应分区键的多行数据.所以我觉得Cassandra是像MySQL一样的行式数据存储,但是有其他好处,比如"宽行",并且每个列都不一定存在于所有行中,当然它也在内存中.如果我错了,请纠正我.
几天前,我读到了有关宽列存储类型的NoSql和Apache-Cassandra的全部内容.我的理解是Cassandra包括:
密钥空间(如关系数据库中的数据库)并支持许多列族或表(与关系数据库中的表相同)和无限行.
来自Stackoverflow标签:
宽列存储是一种键值数据库.它使用表,行和列,但与关系数据库不同,列的名称和格式可能因同一个表中的行而异.
在Cassandra中,所有行(在表中)都应该有一个行键,然后每个行键可以有多个列.我读到了关系数据库和NoSql(Cassandra)的实现和存储数据的差异.
但我不明白结构之间的区别:
想象一下我有一张表(或Cassandra中的列族)的场景:
当我执行这样的查询(Cql)时:
Select * from users;
Run Code Online (Sandbox Code Playgroud)
它给你我的结果,你可以看到:
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
Run Code Online (Sandbox Code Playgroud)
所以我使用打击查询在关系数据库(MsSql)中执行上述场景:
select * from [users]
Run Code Online (Sandbox Code Playgroud)
结果是:
lastname age city email
Doe 36 Beverly Hills janedoe@email.com
Jones 35 Austin bob@example.com
Byrne 24 San …Run Code Online (Sandbox Code Playgroud) 消息来源表明 DynamoDB 是键/值存储、文档存储和/或宽列存储:
DynamoDB的核心是键/值存储。
如果存储的值是文档,DynamoDB 会为使用基础文档提供一些支持。甚至亚马逊也同意。到目前为止,一切都很好。
然而,我看到一些说法称 DynamoDB 实际上是一个宽列存储(1、2、3等)。这对我来说似乎很奇怪,因为据我了解,宽列存储在技术上需要不同的数据存储模型。
将 DynamoDB 视为宽列存储是否合适?
nosql key-value-store document-store amazon-dynamodb wide-column-store
我尝试cqlsh在 AWS shell 中编写,但没有返回任何输出。我参考了这个教程
输出:-bash: cqlsh: command not found
amazon-web-services cassandra nosql wide-column-store amazon-keyspaces