=========================================================

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的更多相关文章

  1. Cassandra基础3

    cassandra读性能优化:1.禁用read repair每次读操作,无论读请求设置读一个节点还是多个节点,cassandra返回给客户端最新的数据后,都会后台对比所有副本的数据并对差异数据进行修复 ...

  2. Cassandra基础

    Apache Cassandra特性 Apache Cassandra由Facebook基于Amazon的Dynamo及其在Google的Bigtable上的数据模型设计开发的面相列的数据库,实现没有 ...

  3. 使用DataStax Java驱动程序的最佳实践

    引言 如果您想开始建立自己的基于Cassandra的Java程序,欢迎! 也许您已经参加过我们精彩的DataStax Academy课程或开发者大会,又或者仔细阅读过Cassandra Java驱动的 ...

  4. 技术基础 | 监测Apache Cassandra的简明方式——MCAC

    点击这里在GitHub上访问我们,以便深入了解DataStax的开源项目--Apache Cassandra指标收集器(Metric Collector for Apache Cassandra, o ...

  5. 技术基础 | Cassandra RBAC助你打击“虚拟海盗”,让他们对数据“战利品”望而不得

    现如今,我们称虚拟世界里的海盗们为"黑客",他们所追寻的战利品就是在你数据库某处的数据.   而我们能够保证你的数据安全的工具之一,就是"Cassandra基于角色的访问 ...

  6. 技术基础 | Apache Cassandra 4.0基准测试

    Apache Cassandra 4.0已经发布了Beta版,这是第一个支持JDK 11及更高JDK版本的Cassandra版本.   时延对于Apache Cassandra用户来说是个显而易见的关 ...

  7. 技术基础 | 在Apache Cassandra中改变VNodes数量的影响

    Apache Cassandra中num_tokens的默认值在4.0版本中将会有变化!这看起来好像只是在CHANGES.txt文件中做了个小小的改动,但实际上这个改动将会对集群的日常运维有着深远的影 ...

  8. sstable, bigtable,leveldb,cassandra,hbase的lsm基础

    先看懂文献1和2 1. 先了解sstable.SSTable: Sorted String Table [2] [10] WiscKey:  类似myisam, key value分离, 根据ssd优 ...

  9. 技术基础 | 改进版的Apache Cassandra客户端请求路由

    最近我们在客户端的驱动程序中引入了一些变更,这些变更会影响传入的请求在Apache Cassandra集群内的分发方式.   新的默认负载均衡算法即将随驱动程序推出,这些算法将有助于缩短长尾延迟,并提 ...

随机推荐

  1. 接触到的加密算法MD5、SHA1(转)

    参考链接: https://blog.csdn.net/u012611878/article/details/54000607 https://blog.csdn.net/worm0527/artic ...

  2. ubuntu 搭建ss和使用方法

    一 ubuntu 搭建ssa.安装    sudo apt-get install python-gevent python-pip python-m2crypto    sudo pip insta ...

  3. rnn-手写数字识别-网络结构-shape

    手写数字识别经典案例,目标是: 1. 掌握tf编写RNN的方法 2. 剖析RNN网络结构 tensorflow编程 #coding:utf-8 import tensorflow as tf from ...

  4. SQL--数据库--基本操作

    SQL基本操作 基本操作:CRUD 将SQL的基本操作根据操作对象进行分类:库操作,表操作(字段),数据操作 库操作 对数据库的增删改查 新增数据库 基本语法Create database 数据库名字 ...

  5. day 36 关于io模型的问题 阻塞 和多路复用

    # from gevent import spawn,monkey;monkey.patch_all()# from socket import *# def server(ip,port):# se ...

  6. php ,session 详解.

    session是根据php.ini中的配置, 存储在 服务器端 ; 生成的sessionId ,也是根据 php.ini 的配置 存储在 客户端cookie中. session的设置: 存储方式:se ...

  7. Kaggle(2):验证和过分拟合

    目前看来,随机森林是比较常用且有效的分类算法.以下先简要介绍python中随机森林的使用方法,然后谈谈分类结果的准确度验证和过拟合等两个重要问题. 1.随机森林的参数 在Scikit learn中使用 ...

  8. win10自动锁屏问题

    电源管理里面无论如何设置自动关闭屏幕时间.自动睡眠和休眠的时间,以及关闭屏保等,在2分钟(确切是2分多一点)后电脑自动睡眠. 这是系统无人值守时睡眠时间的设定,默认是两分钟.解决方法:1.运行注册表管 ...

  9. Centos7 zip unzip 安装和使用

    安装: yum install -y unzip zip: 解压 unzip filename.zip

  10. JAVA拼合数组方法

    方法一: package org.ken.array; import java.lang.reflect.Array; import java.util.Arrays; public class Jo ...