Cassandra数据模型定义
- 列族(column faimily),作为存储和组织数据的一种方法
物理模型
- Cluster
- Data center(s)
- Rack(s)
- Server(s)
-
Node (more accurately, a vnode)
-
- Server(s)
- Rack(s)
- Data center(s)
Cluster
Cassandra运行在多台主机上,这些主机可以跨域距离的限制,并构成了Cassandra最外层的容器-集群,每个cassandra节点都包含一个或多个数据副本节点,当cassandra节点故障后,数据副本节点会接替故障节点持续性工作。Cassandra以环形方式将节点分配在集群中,并为其分配数据。每台Cassandra节点都必须指定同一个Cluster名称。
DataCenter
当所有cassandra节点都分布一个中心机房时,我们称为一个数据中心,数据中心永远是集群的一个子集。
Rack
机柜信息存储在每个节点的配置文件里,一般同一个数据中心的节点会有一个相同的Rack名称。
Servers
一台服务器默认拥有256个vnodes
Node
确切来说指的vnode,存储数据的单元,一台服务器设置的vnode数目越大,这台机器上存储的数据就会越多。
逻辑模型
Cassandra和RDBMS术语对比
Cassandra的数据模型以列为中心。也就是说,不需要像关系型数据库那样事先定义一个表的所有列,每一行甚至可以包含不同名称的列。Cassandra的数据模型由keyspaces (类似关系型数据库里的database),column families(类似关系型数据库里的table),主键(keys)和列(columns)组成。对于每一个column family,不要想象成关系型数据库的表,而要想像成一个多层嵌套的排序散列表(Nested sorted map)。这样能更好地理解和设计Cassandra的数据模型。
散列表能提供高效的键值查询,而排序的键值能提供高效率的范围查询能力。在Cassandra里,我们可以使用row key和column key做高效的键值查询和范围查询。每一行的列的数量最多允许多达20亿,换句话说,可以拥有所谓的宽行。
列的名称可以直接包含数据,换句话说,有的列可以只有列名没有列值。
列族(column family)
思考一个这样的问题,我们需要实时统计门户网站下的生活类,科普类,教育类的栏目的session信息,将实时连接访问数据记录在cassandra数据库里,以便后期做数据分析使用。 我们可以设计如下column family
KeySpace SessionCollection
Coumn Family ShenghuoCollection
row key UserID
Timestamp1 | VisitID | VisitReffer | VisitRefferType | VisitRefferKeywords | VisitURL | VisitURLTitle | VisitTimeIn | VisitTimeOut | VistIP | VistProvince | VisitCity | VisitBrowserType | VisitOS |
Timestamp2 | VisitID | VisitReffer | VisitRefferType | VisitRefferKeywords | VisitURL | VisitURLTitle | VisitTimeIn | VisitTimeOut | VistIP | VistProvince | VisitCity | VisitBrowserType | VisitOS |
Timestamp3 | VisitID | VisitReffer | VisitRefferType | VisitRefferKeywords | VisitURL | VisitURLTitle | VisitTimeIn | VisitTimeOut | VistIP | VistProvince | VisitCity | VisitBrowserType | VisitOS |
Coumn Family TechCollection
row key UserID
Timestamp1 | VisitID | VisitReffer | VisitRefferType | VisitRefferKeywords | VisitURL | VisitURLTitle | VisitTimeIn | VisitTimeOut | VistIP | VistProvince | VisitCity | VisitBrowserType | VisitOS |
Timestamp2 | VisitID | VisitReffer | VisitRefferType | VisitRefferKeywords | VisitURL | VisitURLTitle | VisitTimeIn | VisitTimeOut | VistIP | VistProvince | VisitCity | VisitBrowserType | VisitOS |
Timestamp3 | VisitID | VisitReffer | VisitRefferType | VisitRefferKeywords | VisitURL | VisitURLTitle | VisitTimeIn | VisitTimeOut | VistIP | VistProvince | VisitCity | VisitBrowserType | VisitOS |
Coumn Family EduCollection
row key UserID
Timestamp1 | VisitID | VisitReffer | VisitRefferType | VisitRefferKeywords | VisitURL | VisitURLTitle | VisitTimeIn | VisitTimeOut | VistIP | VistProvince | VisitCity | VisitBrowserType | VisitOS |
Timestamp2 | VisitID | VisitReffer | VisitRefferType | VisitRefferKeywords | VisitURL | VisitURLTitle | VisitTimeIn | VisitTimeOut | VistIP | VistProvince | VisitCity | VisitBrowserType | VisitOS |
Timestamp3 | VisitID | VisitReffer | VisitRefferType | VisitRefferKeywords | VisitURL | VisitURLTitle | VisitTimeIn | VisitTimeOut | VistIP | VistProvince | VisitCity | VisitBrowserType | VisitOS |
https://pandaforme.gitbooks.io/introduction-to-cassandra/content/understand_the_cassandra_data_model.html