Cassandra介绍(一)

1.1. 概念 

Apache Cassandra 是高度可扩展的,高性能的分布式 NoSQL 数据库。 Cassandra 旨在处理许
多商品服务器上的大量数据,提供高可用性而无需担心单点故障。
Cassandra 具有能够处理大量数据的分布式架构。 数据放置在具有多个复制因子的不同机器上,
以获得高可用性,而无需担心单点故障。

1.2. 数据模型

Key Space (对应 SQL 数据库中的 database )
1. 一个 Key Space 中可包含若干个 CF,如同 SQL 数据库中一个 database 可包含多个 table
Key (对应 SQL 数据库中的主键)
2. 在 Cassandra 中,每一行数据记录是以 key/value 的形式存储的,其中 key 是唯一标识。
column (对应 SQL 数据库中的列)
3. Cassandra 中每个 key/value 对中的 value 又称为 column,它是一个三元组,即:name,
value 和 timestamp,其中 name 需要是唯一的。
super column (SQL 数据库不支持)
4. cassandra 允许 key/value 中的 value 是一个 map(key/value_list),即某个 column 有多个
子列。
Standard Column Family (相对应 SQL 数据库中的 table )
5. 每个 CF 由一系列 row 组成,每个 row 包含一个 key 以及其对应的若干 column。
Super Column Family (SQL 数据库不支持)
6. 每个 SCF 由一系列 row 组成,每个 row 包含一个 key 以及其对应的若干 super column。

1.3. Cassandra 一致 Hash 和虚拟节点

一致性 Hash (多米诺 down 机)
为每个节点分配一个 token,根据这个 token 值来决定节点在集群中的位置以及这个节点所存储
的数据范围。

虚拟节点( (down 机 机 多节点托管) )
由于这种方式会造成数据分布不均的问题,在 Cassandra1.2 以后采用了虚拟节点的思想:不需要
为每个节点分配 token,把圆环分成更多部分,让每个节点负责多个部分的数据,这样一个节点移
除后,它所负责的多个 token 会托管给多个节点处理,这种思想解决了数据分布不均的问题。

 如图所示,上面部分是标准一致性哈希,每个节点负责圆环中连续的一段,如果 Node2 突然
down 掉,Node2 负责的数据托管给 Node1,即 Node1 负责 EFAB 四段,如果 Node1 里面有
很多热点用户产生的数据导致 Node1 已经有点撑不住了,恰巧 B 也是热点用户产生的数据,这样
一来 Node1 可能会接着 down 机,Node1down 机,Node6 还 hold 住吗?
下面部分是虚拟节点实现,每个节点不再负责连续部分,且圆环被分为更多的部分。如果 Node2
突然 down 掉,Node2负责的数据不全是托管给Node1,而是托管给多个节点。而且也保持了一
致性哈希的特点。

1.4. Gossip 协议

Gossip 算法如其名,灵感来自办公室八卦,只要一个人八卦一下,在有限的时间内所有的人都
会知道该八卦的信息,这种方式也与病毒传播类似,因此 Gossip 有众多的别名“闲话算法”、
“疫情传播算法”、“病毒感染算法”、“谣言传播算法”。 Gossip 的特点:在一个有界网络中,
每个节点都随机地与其他节点通信,经过一番杂乱无章的通信,最终所有节点的状态都会达成一
致。因为 Gossip 不要求节点知道所有其他节点,因此又具有去中心化的特点,节点之间完全对等,不需要任何的中心节点。实际上 Gossip 可以用于众多能接受“最终一致性”的领域:失败检测、路由同步、Pub/Sub、动态负载均衡。

Gossip 节点的通信方式及收敛性
Gossip 两个节点( A 、 B )之间存在三种通信方式 ( push 、 pull 、 push&pull )
1. push: A 节点将数据(key,value,version)及对应的版本号推送给 B 节点,B 节点更新 A 中比自
己新的数据。
2. pull:A 仅将数据 key,version 推送给 B,B 将本地比 A 新的数据(Key,value,version)推送
给 A,A 更新本地。
3. push/pull:与 pull 类似,只是多了一步,A 再将本地比 B 新的数据推送给 B,B 更新本地。
如果把两个节点数据同步一次定义为一个周期,则在一个周期内,push 需通信 1 次,pull 需 2 次,
push/pull 则需 3 次,从效果上来讲,push/pull 最好,理论上一个周期内可以使两个节点完全一
致。直观上也感觉,push/pull 的收敛速度是最快的。
gossip 的协议 和 seed list (防止集群分列)
cassandra 使用称为 gossip 的协议来发现加入 C 集群中的其他节点的位置和状态信息。gossip 进
程每秒都在进行,并与至多三个节点交换状态信息。节点交换他们自己和所知道的信息,于是所
有的节点很快就能学习到整个集群中的其他节点的信息。gossip 信息有一个相关的版本号,于是
在一次gossip信息交换中,旧的信息会被新的信息覆盖重写。要阻止分区进行gossip交流,那么
在集群中的所有节点中使用相同的 seed list,种子节点的指定除了启动起 gossip 进程外,没有其
他的目的。种子节点不是一个单点故障,他们在集群操作中也没有其他的特殊目的,除了引导节
点以外

1.5. 数据复制 

Partitioners( (计算 计算 primary key token 的 的 hash 函数 函数) )
在 Cassandra 中,table 的每行由唯一的 primarykey 标识,partitioner 实际上为一 hash 函数用
以计算 primary key 的 token。Cassandra 依据这个 token 值在集群中放置对应的行
两种可用的复制策略: 两种可用的复制策略:
SimpleStrategy : 仅用于单数据中心,
将第一个 replica 放在由 partitioner 确定的节点中,其余的 replicas 放在上述节点顺时针方向的
后续节点中。
NetworkTopologyStrategy :可用于较复杂的多数据中心。
可以指定在每个数据中心分别存储多少份 replicas。
复制策略在创建 keyspace 时指定,如
CREATE KEYSPACE Excelsior WITH REPLICATION = { 'class' :
'SimpleStrategy','replication_factor' : 3 };
CREATE KEYSPACE Excalibur WITH REPLICATION = {'class' :'NetworkTopologyStrategy',
'dc1' : 3, 'dc2' : 2};

1.6. 数据 写请求和协调者

协调者 协调者(coordinator)
协调者(coordinator)将 write 请求发送到拥有对应 row 的所有 replica 节点,只要节点可用便获取
并执行写请求。写一致性级别(write consistency level)确定要有多少个 replica 节点必须返回成功
的确认信息。成功意味着数据被正确写入了 commit log 和 memtable。

1.7. 数据读请求和后台修复

1. 协调者首先与一致性级别确定的所有 replica 联系,被联系的节点返回请求的数据。
2. 若多个节点被联系,则来自各 replica 的 row 会在内存中作比较,若不一致,则协调者使用含
最新数据的 replica 向 client 返回结果。那么比较操作过程中只需要传递时间戳就可以,因为要
比较的只是哪个副本数据是最新的。
3. 协调者在后台联系和比较来自其余拥有对应 row 的 replica 的数据,若不一致,会向过时的
replica 发写请求用最新的数据进行更新 read repair。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132123.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Luminar Neo Mac/Windows中文版:引领AI图像编辑的革命性时代

Luminar Neo运用先进的AI技术,能够自动化地完成许多繁琐的编辑任务,如色彩校正、噪点消除、人脸识别等。这不仅大大提高了工作效率,同时也降低了对专业知识和技能的要求。无论你是专业摄影师,还是摄影爱好者,甚至是一个…

产品实习笔记——会员体系 积分体系

文章目录 引入会员体系1. 业务逻辑产品化2. 产品逻辑可视化2.1 成长值:会员等级的判断机制2.1.1 成长值的获得2.1.1 成长值的消耗 2.2 会员等级区间划分2.3 成长值风控体系2.4 会员权益2.4.1 普通会员权益2.4.2 阶梯式会员权益 积分体系有赞商城(会员体系…

数据可视化:折线图

1.初看效果 (1)效果一 (2)数据来源 2.JSON数据格式 其实JSON数据在JAVA后期的学习过程中我已经是很了解了,基本上后端服务器和前端交互数据大多是采用JSON字符串的形式 (1)JSON的作用 &#…

设计模式第一课-单例模式(懒汉模式和饿汉模式)

单例模式 个人理解:单例模式实际就是通过类加载的方式获取到一个对象,并且保证这个对象在使用中只有一个,不允许再次被创建 一、懒汉模式 1、懒汉模式的基础写法 代码解释: (1)、编写LazySingleton类的…

k8s、调度约束

Kubernetes 是通过 List-Watch **** 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 Node 节点上面建立 Pod 和 Container。 APIS…

基于STC15单片机温度光照蓝牙传输-proteus仿真-源程序

一、系统方案 本设计采用STC15单片机作为主控器,液晶1602显示,DS18B20采集温度,光敏电阻采集光照、按键设置温度上下限,测量温度小于下限,启动加热,测量温度大于上限,启动降温。 二、硬件设计 …

开发知识点-PHP从小白到拍簧片

从小白到拍簧片 位异或运算(^ )引用符号(&)strlen() 函数base64_encode预定义 $_POST 变量session_start($array);操作符php 命令set_time_limit(7200)isset()PHP 命名空间(namespace)new 实例化类extends 继承 一个类使用另一个类方法error_reporti…

清华软院2024届推免拟录取名单

名单 直博生 硕士生 分析 清华软院2024届共录取推免硕士生68人,其中 专硕085405软件工程 59人,学硕083500软件工程9人;推免直博生 15人 和贵系相比难度要低很多哦! 欢迎关注我的公众号 “程序员小风学长”,会定期进…

一、Hadoop初始化配置(final+ubuntu保姆级教程)

1、配置虚拟机 三台虚拟机,分别为node1、node2、node3,内存分别为4G、2G、2G,现存最好为(>40G),如下: 2、修改主机名 分别打开三台虚拟机,root用户输入一下命令: no…

Android 13.0 启动app时设置密码锁

1.前言 在13.0的系统产品开发中,对于限制某些app的启动的功能中,在项目中的需求是在点击app启动的时候,根据包名设置密码锁,当输入正确的密码的时候来启动这个app,否则 就不能启动这个app,达到限制使用app的目的,这就需要在app启动的时候,检测app的包名,然后在app启动…

随笔--解决ubuntu虚拟环境的依赖问题

文章目录 问题一:在conda虚拟环境中报错ImportError: libcupti.so.11.7:cannot open shared object file: No such file or directory解决步骤问题二: RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE when calling cublasSgemmStridedBatched( …

使用R语言构建HTTP爬虫:IP管理与策略

目录 摘要 一、HTTP爬虫与IP管理概述 二、使用R语言进行IP管理 三、爬虫的伦理与合规性 四、注意事项 结论 摘要 本文深入探讨了使用R语言构建HTTP爬虫时如何有效管理IP地址。由于网络爬虫高频、大量的请求可能导致IP被封禁,因此合理的IP管理策略显得尤为重要…

2023-11-06 LeetCode每日一题(最大单词长度乘积)

2023-11-06每日一题 一、题目编号 318. 最大单词长度乘积二、题目链接 点击跳转到题目位置 三、题目描述 给你一个字符串数组 words ,找出并返回 length(words[i]) * length(words[j]) 的最大值,并且这两个单词不含有公共字母。如果不存在这样的两个…

如何在 Unbuntu 下安装配置 Apache Zookeeper

简介 Zookeeper 是 apache 基金组织下的项目,项目用于简单的监控和管理一组服务,通过简单的接口就可以集中协调一组服务,如配置管理,信息同步,命名,分布式协调。 准备工作 Ubuntu 23.04 或者 20.04访问…

Pycharm-community-2021版安装和配置

一、下载Pycharm-community-2021 1.从官网下载pycharm-community Pycharm 版本官网 二、安装PyCharm 1.打开下载完成的安装包,点击Next 2.安装PyCharm到其他位置,点击Next 3.一定把更新PATH变量勾上,可以创建桌面快捷方式,创建关联,最后…

C++ 信息学奥赛 2046:【例5.15】替换字母

#include<cstdio> #include<iostream> using namespace std; int main() { char st[200];char A,B; int n0;while((st[n]getchar())!\n); //将原文存放在字符数组st中,并且要注意上述的最后分号 Agetchar();getchar();Bgetchar(); //读取A和B&#xff0c;中间get…

【漏洞复现】weblogic-10.3.6-‘wls-wsat‘-XMLDecoder反序列化(CVE-2017-10271)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描nacsweblogicScanner3、漏洞验证 说明内容漏洞编号CVE-2017-10271漏洞名称Weblogic < 10.3.…

Linux C/C++下抓包分析mysql流量(协议解析)

MySQL通信协议是一个有状态的协议&#xff0c;主要用于MySQL客户端与服务器之间的通信。这个协议在MySQL客户端连接器&#xff08;如Connector/C、Connector/J等&#xff09;、MySQL Proxy以及主从复制中都有实现。 该协议的特性包括&#xff1a;支持SSL、压缩和认证等功能。 …

django REST框架- Django-ninja

Django 是我学习的最早的web框架&#xff0c;大概在2014年&#xff0c;当时选他原因也很简单就是网上资料比较丰富&#xff0c;自然是遇到问题更容易找答案&#xff0c;直到 2018年真正开始拿django做项目&#xff0c;才对他有了更全面的了解。他是一个入门有门槛&#xff0c;学…

后端接口接收对象和文件集合,formdata传递数组对象

0 问题 后端接口需要接收前端传递过来的对象和文件集合&#xff1b;对象中存在数组对象 1 前端和后端 前端只能使用formdata来传递参数&#xff0c;后端不使用RequestBody注解 2 formdata传递数组对象 2.1 多个参数对象数组 addForm: {contactInfo: [{contactPerson: ,…