列式数据库应该将一组列存储在一起。但是Cassandra以行为单位存储数据。 SS表将多行数据映射到它们对应的分区键。因此,我认为Cassandra是像MySQL一样的行式数据存储,但具有其他好处,比如“宽行”,并且不是所有行都必须出现所有列,并且当然是在内存中。如果我错了,请纠正我。
列式数据库应该将一组列存储在一起。但是Cassandra以行为单位存储数据。 SS表将多行数据映射到它们对应的分区键。因此,我认为Cassandra是像MySQL一样的行式数据存储,但具有其他好处,比如“宽行”,并且不是所有行都必须出现所有列,并且当然是在内存中。如果我错了,请纠正我。
Cassandra是一个分区行存储器。行被组织成具有必需主键的表。
分区意味着Cassandra可以在应用程序透明的情况下将您的数据分布到多台机器上。当集群中添加或删除机器时,Cassandra会自动重新分区。
行存储意味着像关系型数据库一样,Cassandra按行和列组织数据。
“所以我觉得Cassandra是一种按行存储数据的方式。”
这是正确的。
在列式数据库中,数据以列为单位存储在磁盘上。
例如:表Bonuses
ID Last First Bonus
1 Doe John 8000
2 Smith Jane 4000
3 Beck Sam 1000
在行导向的数据库管理系统中,数据会被存储为:1,Doe,John,8000;2,Smith,Jane,4000;3,Beck,Sam,1000;
而在列导向的数据库管理系统中,数据会被存储为:1,2,3;Doe,Smith,Beck;John,Jane,Sam;8000,4000,1000;
Cassandra基本上是一个列族存储。Bonuses: { row1: { "ID":1, "Last":"Doe", "First":"John", "Bonus":8000}, row2: { "ID":2, "Last":"Smith", "Jane":"John", "Bonus":4000} ... }
我听说过Vertica、VectorWise和MonetDB等一些列导向的数据库。阅读这篇文章以获取更多细节。希望对你有所帮助。Cassandra拥有列族(column family)的概念,但它不是面向列(column-oriented)的。
引用我读过的最好的一本书《设计数据密集型应用》(作者Martin Kleppmann)中的部分内容:
Cassandra和HBase都有列族(column families)的概念,这一概念是从Bigtable继承而来的。然而,将它们称为面向列(column-oriented)是非常误导人的:在每个列族中,它们将一行中的所有列连同行键一起存储,并且它们不使用列压缩。因此,Bigtable模型仍然主要是面向行(row-oriented)的。