1. 动态修改schema:
动态修改schema,是在cassandra集群运行和维护的时候,不停止cassandra集群,动态的添加,修改和删除ColumnFamily和KeySpace。
动态的修改schema改变了以前cassandra修改ColumnFamily和KeySpace的方式,修改ColumnFamily和KeySpace不再需要停止集群中的所有节点,然后手动修改每一个节点的配置信息。这样就大大提高了集群的使用效率,同时降低了人为操作失误的可能。
2. 自动清除过期数据:
在将数据写入cassandra中的时候,可以指定这条数据过期的时间TTL(time to live)。那么数据就会在超过相应的时间之后,就会被自动删除。
3. 集群数据读取策略:
在Cassandra集群中,数据可以存在冗余的,这样可以保证某几台服务器数据丢失后,提供数据冗余的服务器仍然可以提供服务。
由于存在数据的冗余,不同的冗余数据之间就可以存在差异,所以Cassandra在读取数据的时候,需要读取所有的冗余数据,从多份数据中计算出最新的数据。同时Cassandra为了达到高可用性,不能等待所有提供数据冗余的服务器全部读取成功后,再将结果返回给客户端。Cassandra提供了5种一致性读取策略来保证高可用性。
4. 读修复(Read Repair)
读修复是Cassandra中保存数据的最终一致性的很重要的功能。
大多数情况下,为了显示Cassandra集群的高可用性,会使用ONE的读取策略,这样会导致数据的不一致,所以需要进行修复来修复过期的数据,使它们得到更新,从而保证数据的一致性。
但是读修复需要消耗一定的资源,显然对每一个ONE级别的读操作都默认采取读修复操作是不合适的。
所以Cassandra提供了为每一个ColumnFamily单独配置进行读修复的概率,如果希望每次读取都进行读修复操作,将其设置为1.0即可,配置文件中的如下配置代表有1/10的改进是针对读修复操作。
在读修复的过程中,Cassandra会向集群中每一个包含该数据并且存活的服务器发送该读取数据摘要信息的读取请求,然后进行比对找出最新的数据,并更新数据过期的服务器,从而让集群中每一个节点的数据都更新到最新的值,保证数据的一致性。
5. 数据缓存:
Cassandra提供了两类缓存:列的缓存(RowCache)和Key的缓存(KeyCache)。
RowCache缓存了读取的列信息,从Cassandra中读取数据会首先判断RowCache中是否有需要读取的数据。如果有,则直接从RowCache中找到相应的结果返回;如果没有,执行基本的读写流程,并将读取的结果缓存在RowCache中。
Cassandra写入数据后会同步更新RowCache,保证Cassandra从RowCache中可以读取到最新的信息。KeyCache与RowCache不同,KeyCache缓存的是需要读取的数据在SSTable Data文件中的具体位置。
6. 二级索引:
Cassandra在使用二级索引查询的时候,不是直接去寻找存储数据的ColumnFamily,而是先通过存储索引的ColumnFamily定位到存储数据的位置,再去存储数据的ColumnFamily中寻找实际的值。
当需要查找的值具有多个二级索引可以使用的时候,Cassandra将判断使用哪个二级索引更加合适,这个特点有点类似于传统数据库中的执行计划。
注:Cassandra选用二级索引的判断依据非常简单:哪个二级索引关联的值少,就选用哪个二级索引。
阅读(3900) | 评论(0) | 转发(0) |