Cassandra基础2
=========================================================
gossip协议
1、点对点(peer to perr)的网络通信协议,节点间地位相同。
2、两个节点间断性地交换自身信息及其知道的信息,每秒最多和群集中三个节点交换信息。
3、每条交换信息中包含版本信息,新版本的信息会覆盖掉就版本的信息。
4、通过多次交换各节点能获取到整个群集其他节点的信息。
=========================================================
seed nodes配置建议:
1、为避免gossip通信出现问题,建议群集中所有节点都有相同的seed nodes列表,seed nodes列表仅用于节点加入到群集时bootstrap过程使用。
2、在多数据中心集群环境,确保每个数据中心至少有一个节点在seed nodes列表中,为提高容错性,建议为每个数据中心指派多个seed node。
3、为避免影响gossip性能,建议为每个数据中心最多配置3个节点到seed nodes列表中。
=========================================================
失败检测和恢复
1、通过信息交换,系统能自动判断出群集中某个节点发生故障或存在性能问题,并避免将请求路由到该节点。
2、可以通过配置phi_convict_threshold属性来调节失败检查的敏感性,当网络较差时,可以适当调高该阈值。
3、对于故障节点,系统仍会定期进行检查,确定该节点是否恢复正常。
4、对于长期失效节点,建议将其移除节点
5、对于重新回归的节点,需要对进行repair修复数据。hintedhandoff有时间限制,默认三小时,超过此时间前面的数据会不断的被覆盖掉,需要手动repair。
=========================================================
分区器(partitioners):
分区器用来决定数据在群集的那些节点进行存储(包含副本数据),Cassandra提供三种partitioners:
1、Murmur3Partitioner(默认): 基于MurmurHash hash值将数据均匀的分布在集群
2、RandomPartitioner: 基于MD5 hash值将数据均匀的分布在集群中
3、ByteOrderedPartitioner: 通过键的字节来保持数据词汇的有序分布
Murmur3Partitioner使用MurmurHash hash算法,而RandomPartitioner使用加密hash算法,因此Murmur3Partitioner比RandomPartitioner有3至5倍的性能提升。
ByteOrderedPartitioner使得数据按照主键有序排列,运行通过主键进行有序扫描,该功能可以通过index来实现,而ByteOrderedPartitioner分区器很难实现负载均衡和数据热点问题,因此不建议使用。
=========================================================
Cassandra数据维护
当数据发生修改(增删改)操作时,Cassandra将先将修改日志写到Commit Log,然后在把数据写到Memtable,再将Memtable中数据顺序Flush到磁盘保存在SSTable中,
当Memtable中数据超过配置阈值或Commitlog的空间超过commitlog_total_space_in_mb的值时,便会触发Flush操作。
Cassandra将数据刷新到SSTable,会将带有新时间戳的数据写入到新的SSTable中,不会覆盖会追加到旧的SSTable,因此不同的SSTable可能保存同一行数据的多个版本,为保证数据库的健康性,Cassandra周期性的合并SSTables,并将老数据废弃掉,该行为被称为合并压缩。
Cassandra提供以下压缩策略:
1、SizeTieredCompactionStrategy(STCS)
2、LeveledCompactionStrategy(LCS)
3、TimeWindowCompactionStrategy(TWCS)
4、DateTieredCompactionStrategy(DTCS)
=========================================================
SizeTieredCompactionStrategy(STCS)
当Cassandra 相同大小的SSTables数目达到一个固定的数目(默认是4),STCS开始将多个SSTable压缩成一个更大的SSTable。
优势:写占比高的情况压缩很好
劣势: 可能将过期的数据保存的很久,随着时间推移,需要的内存大小随之增加。
适用场景:写占比高的场景。
=========================================================
LeveledCompactionStrategy(LCS)
LCS会将数据合并压缩成多个层级,每一层是上一层的10倍。LCS压缩过程确保了从L1层开始的SSTables不会有重复的数据。
优势: 磁盘空间的要求容易预测。读操作的延迟更容易预测。过时的数据回收的更及时。
劣势: 更高的I/O使用影响操作延迟。
适用场景:读占比高的场景
=========================================================
TimeWindowCompactionStrategy(TWCS)
TWCS基于时间窗口将SSTable进行分组,
优势: 用作时间序列数据,为表中所有数据使用默认的TTL。比DTCS配置更简单。
劣势: 不适用于时间乱序的数据,因为SSTables不会继续做压缩,存储会没有边界的增长,所以也不适用于没有设置TTL的数据。相比较DTCS,需要更少的调优配置。
适用场景:时间序列且设置了TTL的场景
DateTieredCompactionStrategy(DTCS)
DTCS类似于TWCS,已弃用。
摘抄自:https://blog.csdn.net/FS1360472174/column/info/14229
Cassandra基础2的更多相关文章
- Cassandra基础3
cassandra读性能优化:1.禁用read repair每次读操作,无论读请求设置读一个节点还是多个节点,cassandra返回给客户端最新的数据后,都会后台对比所有副本的数据并对差异数据进行修复 ...
- Cassandra基础
Apache Cassandra特性 Apache Cassandra由Facebook基于Amazon的Dynamo及其在Google的Bigtable上的数据模型设计开发的面相列的数据库,实现没有 ...
- 使用DataStax Java驱动程序的最佳实践
引言 如果您想开始建立自己的基于Cassandra的Java程序,欢迎! 也许您已经参加过我们精彩的DataStax Academy课程或开发者大会,又或者仔细阅读过Cassandra Java驱动的 ...
- 技术基础 | 监测Apache Cassandra的简明方式——MCAC
点击这里在GitHub上访问我们,以便深入了解DataStax的开源项目--Apache Cassandra指标收集器(Metric Collector for Apache Cassandra, o ...
- 技术基础 | Cassandra RBAC助你打击“虚拟海盗”,让他们对数据“战利品”望而不得
现如今,我们称虚拟世界里的海盗们为"黑客",他们所追寻的战利品就是在你数据库某处的数据. 而我们能够保证你的数据安全的工具之一,就是"Cassandra基于角色的访问 ...
- 技术基础 | Apache Cassandra 4.0基准测试
Apache Cassandra 4.0已经发布了Beta版,这是第一个支持JDK 11及更高JDK版本的Cassandra版本. 时延对于Apache Cassandra用户来说是个显而易见的关 ...
- 技术基础 | 在Apache Cassandra中改变VNodes数量的影响
Apache Cassandra中num_tokens的默认值在4.0版本中将会有变化!这看起来好像只是在CHANGES.txt文件中做了个小小的改动,但实际上这个改动将会对集群的日常运维有着深远的影 ...
- sstable, bigtable,leveldb,cassandra,hbase的lsm基础
先看懂文献1和2 1. 先了解sstable.SSTable: Sorted String Table [2] [10] WiscKey: 类似myisam, key value分离, 根据ssd优 ...
- 技术基础 | 改进版的Apache Cassandra客户端请求路由
最近我们在客户端的驱动程序中引入了一些变更,这些变更会影响传入的请求在Apache Cassandra集群内的分发方式. 新的默认负载均衡算法即将随驱动程序推出,这些算法将有助于缩短长尾延迟,并提 ...
随机推荐
- log4j 输出原始数据到指定日志文件
项目中需要将上传的数据输出到指定的log文件,之前对log4j缺少深入认识,普遍将整个应用的日志到输出到一个文件. 在经理的帮助下,业务数据可以直接输出到指定的log文件,现将配置及使用流程整理一下. ...
- leetcode python 003
## 给定一个字符串,求其最长无重复的子字符串##给定“abcabcbb”,答案是“abc”,长度为3.##给定“bbbbb”,答案是“b”,长度为1.##鉴于“pwwkew”,答案是“wke”,长度 ...
- springMvc 简单搭建
1.pom.xml 依赖引入 2.配置web.xml 3.配置 springMvc.xml 4.配置 logback.xml 5.编写 controller 测试 1.pom.xml 依赖引入 < ...
- redis 解析配置文件
在redis安装文件夹里面有redis.conf,查看配置. 一:基础配置介绍 1.units(单位) --这里可以看到 1k和1kb是不一样的, units 这里单位是不区分大小写的,are al ...
- PC或者手机上实现相机拉近和旋转
using System.Collections;using System.Collections.Generic;using UnityEngine;using System; //[Seriali ...
- 2019.3.22 Week 12 : ZigBee and T/H chamber test
Test purposes Remove backside center ventilation holes, pls help to conduct climatic chamber test of ...
- embedding与word2vec
embedding是指将目标向量化,常用于自然语言处理(如:Word2Vec).这种思想的意义在于,可以将语义问题转换为数值计算问题,从而使计算机能够便捷处理自然语言问题.如果采用传统的One-hot ...
- java学习笔记16(正则表达式)
正则表达式: 定义:在pattern类中有简单规则定义,具有特殊含义的字符串: 作用:用于一些字符串,比如验证注册邮箱,密码,用户名等: 正则表达式的语法: 1)字符:'\'反斜杠 \t 代表制表 ...
- Js代码一些要素
---恢复内容开始--- 条件语句 is(条件){ 语句 }else { 语句 } {}在js中我们把他叫代码块.如果代码块里内容没有执行完,语句就不会向下执行. 代码块是一个独立的整体.如果js中莫 ...
- array_reverse()函数
$a=array(1,2,4,5,6); print_r(array_reverse($a)); 结果:Array ( [0] => 6 ...