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集群内的分发方式. 新的默认负载均衡算法即将随驱动程序推出,这些算法将有助于缩短长尾延迟,并提 ...
随机推荐
- java有关构造器的面试题详解
1,编译器只会提供自动提供一个默认的无参数的构造函数 2,如果程序员没有给类A没有提供构造函数,则编译器会自动提供一个默认的无参数的构造函数,如果用户提供了自己的构造函数,则编译器就不在提供默认的无参 ...
- C++关于运算符的注意事项
1.函数调用也是一种特殊的运算符,对运算对象的个数不作限制. 2.几元运算符,是基于作用的对象的数量. 3.不同类型的运算对象进行运算,可能会出现类型转换,一般情况下小整数类型会被转换成较大的整数类型 ...
- Cracking The Coding Interview 3.6
// Write a program to sort a stack in ascending order. You should not make any assumptions about how ...
- jQuery $.each()常见的几种使用方法
<code class="language-html"><!doctype html> <html> <head> <meta ...
- DevExpress WinForms v18.2新版亮点(二)
行业领先的.NET界面控件2018年第二次重大更新——DevExpress v18.2日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExpress WinForms v1 ...
- codeforce150A(简单的求质数问题)
A. Win or Freeze time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Spring学习三
Spring注解来注入bean 在classpath中扫描组件 组件扫描,即componetscanning 利用注解来扫描的组件有 @Component :基本注解,表示一个受Spring管理的 ...
- 玩转 React 【第03期】:邂逅 React 组件
上期回顾 前文我们讲解了 React 模板 JSX,接着我们继续来看看 React 组件又是如何工作的呢? 组件化开发到了今天已经是大家的共识,在 React 中,组件同样也是组成我们整个项目的基本单 ...
- 插件化DPI在商用WIFI中的价值
插件化DPI是指DPI(深度包检测)技术以插件/模块的方式嵌入到各种网络设备中,是一种新型轻量级资源消耗的互联网技术,由迈科网络(股份代码:430575)独创开发. 插件化DPI(深度包检测)技术服务 ...
- HDU 6075 Questionnaire 17多校4 水题
Problem Description In order to get better results in official ACM/ICPC contests, the team leader co ...