Cassandra基础
Apache Cassandra特性
Apache Cassandra由Facebook基于Amazon的Dynamo及其在Google的Bigtable上的数据模型设计开发的面相列的数据库,实现没有单点故障的Dynamo风格的复制模型和强大的“列族”数据模型,提供高可用性和最终一致性。
1、弹性可扩展性 - Cassandra是高度可扩展的; 它允许添加更多的硬件以适应更多的客户和更多的数据根据要求。 2、始终基于架构 - Cassandra没有单点故障,它可以连续用于不能承担故障的关键业务应用程序。 3、快速线性性能 - Cassandra是线性可扩展性的,即它为你增加集群中的节点数量增加你的吞吐量。因此,保持一个快速的响应时间。 4、灵活的数据存储 - Cassandra适应所有可能的数据格式,包括:结构化,半结构化和非结构化。它可以根据您的需要动态地适应变化的数据结构。 5、便捷的数据分发 - Cassandra通过在多个数据中心之间复制数据,可以灵活地在需要时分发数据。 6、事务支持 - Cassandra支持属性,如原子性,一致性,隔离和持久性(ACID)。 7、写入 - Cassandra被设计为在廉价的商品硬件上运行。 它执行快速写入,并可以存储数百TB的数据,而不牺牲读取效率。
Cassandra节点节点
Cassandra的设计目的就是通过多个数据节点实现大数据工作负载,并通过在多个数据节点保存数据副本来解决单点故障,群集中所有节点之间对等,数据分布在群集所有节点上。 1、所有群集节点角色相同且相互独立,能同时互联到其他节点。 2、所有群集节点都可以接受读取和写入请求 3、当某群集节点关闭时,可以通过其他群集节点读取与该节点数据相同的副本。 4、当新增或移除群集节点后,群集会自动进行数据均衡 PS1: 当某节点性能不足时,可以暂停该节点不接受读写请求。
===========================================================
Cassandra数据模型
群集(Cluster) |---群集节点(Cluster Node) |---键空间(Keyspace) |---列族(Column Famliy) |---普通列(Column) |---超级列(Super Column) |--子列(subColumn)
群集(Cluster)是Cassandra数据模型中最外层,包含多个群集节点,对外提供服务
群集节点(Cluster Node)用来存储数据副本,群集中所有节点功能相同。
键空间(Keyspace)是数据的最外层容器,一个键空间可用包含多个列族(Column Family)一个键空间包含以下基本属性:
1、复制因子,设置在群集中存储多少份数据副本
2、副本放置策略,设置数据副本与数据中心和机架的关系
列族(Column Family)是有序收集行的容器,每行又是一个有序的列聚合,在Cassandra中可以随时向列族中添加列,且不要求每行记录包含所有列。
Cassandra数据模型中列分为普通列和超级列:
普通列包含三个属性:键(name)\值(value)\时间戳(clock),其存储结构为:
超级列是一个特殊列,其存储的是子列的map,其存储结构为:
===========================================================
分区键和群集键
在Cassandra中主键可分为两类: 1、单列主键 2、符合主键 对于单列主键,该主键即分区键(Partition Key)。 对于符合主键,主键的第一部分为分区键(Partition Key),第二部分为群集键(Clustering Key)。 分区键(Partition Key)决定数据位于哪个分区,而群集键(Clustering Key)决定相同分区上的数据如何排序。 对于表: CREATE TABLE DemoTable ( C1 INT, C2 INT, C3 INT, C4 INT, data text, PRIMARY KEY((C1,C2), C3,C4) ); 则C1+C2作为分区键,然后同一分区中数据按照C3和C4进行排序。
===========================================================
Cassandra的数据模型和RDBMS的数据模型的区别:
==========================================================
摘抄自:https://www.w3cschool.cn/cassandra/
==========================================================