cassandra 如何写数据以及放置副本
application发送数据到server
- application 发送请求到server
- 根据设置的load balance 规则从cluster中挑选一个coordinator,一般使用轮询即可。cluster 中的cassandra node 不仅作为数据库的储存节点,同样作为request 请求处理的server。所以保证每个节点处理的request 一样的balance算法即可
- 然后根据插入数据的主键hash value,来将第一份数据写入到对应节点中
- 然后根据replicator,write consistency,replication strategy ,来写副本
eg.replicator=3,write consistency=2,replication strategy=simple strategy
则表示成功写入到2个节点中,application的写操作才算成功。
simple strategy 表明副本是放在第一个node 节点环位置的下一个节点
Note-很重要的一点
通过上面描述,发现可以根据hash value 来确定一条数据存放在哪个节点上,然后根据replication的参数设置,我们可以确定数据副本存放在哪个节点上。那么对于read 操作,我们就可以根据条件的hash value 来找到存放数据的第一个节点,然后根据数据副本来找其他replicate 数据。
上面认识是错误的
首先,考虑下如果我们添加node到cluster中,假如数据存放的第一个node hash 受到影响,数据要移除到新加入的node,这个操作很容易实现,那么按照我们上面的认识,其他的副本数据如何处理呢?
data的存放的第一个节点变化了,然后再根据replicate stragtegy,已经找不到其他副本了。
此外,cassandra 的node是无主机模式,没有主从节点,每份数据都是一样的,但是按照上面的说法,数据的存放的第一个节点重要性又高于其他节点。
综上,上述认识错误
正确的认识
cassandra 将数据成功写入后,会有一个map 表,来维护数据存放在哪些节点上
nodetool getendpoint keyspace table partitionkey
这条命令可以查询到数据存放在哪些node上面
看了下cassandra的源码,这些数据应该存放在org.apache.cassandra.db:type=StorageService中
写数据
- 写数据到commit log
写数据到memtable
数据写入到这两个数据结构中,以及replicate 数目达到write consistency数目后,一次写操作就完成了,
写数据是内存操作,所以cassandra 写入速度很快。将数据从memtable中冲刷到sstable中
sstable中的数据是不可更改的
cassandra 如何写数据以及放置副本的更多相关文章
- Cassandra如何保证数据最终一致性
Cassandra如何保证数据最终一致性:1.逆熵机制(Anti-Entropy)使用默克尔树(Merkle Tree)来确认多个副本数据一致,对于不一致数据,根据时间戳来获取最新数据. 2.读修复机 ...
- hadoop 集群中数据块的副本存放策略
HDFS采用一种称为机架感知(rack-aware)的策略来改进数据的可靠性.可用性和网络带宽的利用率.目前实现的副本存放策略只是在这个方向上的第一步.实现这个策略的短期目标是验证它在生产环境下的有效 ...
- Hadoop源码分析之客户端向HDFS写数据
转自:http://www.tuicool.com/articles/neUrmu 在上一篇博文中分析了客户端从HDFS读取数据的过程,下面来看看客户端是怎么样向HDFS写数据的,下面的代码将本地文件 ...
- HDFS写数据和读数据流程
HDFS数据存储 HDFS client上传数据到HDFS时,首先,在本地缓存数据,当数据达到一个block大小时.请求NameNode分配一个block. NameNode会把block所在的Dat ...
- HDFS源码分析之数据块及副本状态BlockUCState、ReplicaState
关于数据块.副本的介绍,请参考文章<HDFS源码分析之数据块Block.副本Replica>. 一.数据块状态BlockUCState 数据块状态用枚举类BlockUCState来表示,代 ...
- day4-hdfs的核心工作原理\写数据流程 \读数据流程
namenode元数据管理要点 1.什么是元数据? hdfs的目录结构及每一个文件的块信息(块的id,块的副本数量,块的存放位置<datanode>) 2.元数据由谁负责管理? namen ...
- HDFS 读/写数据流程
1. HDFS 写数据流程 客户端通过 Distributed FileSystem 模块向 NameNode 请求上传文件, NameNode 检查目标文件是否已存在,父目录是否存在: NameNo ...
- Android开发学习---如何写数据到外部存储设备(sd卡),Environment.getExternalStorageDirectory,怎么获取sd卡的大小?
本文主要介绍如何写数据到sd卡,这里主要到的技术是Environment中的方法. 1. 2.实现代码: /datasave/src/com/amos/datasave/savePasswordSer ...
- python 使用openpyxl来写数据到excel表格
使用openpyxl写execl确实很方便.我先介绍用到的相关模块与函数 Workbook:工作簿模块,在内存创建一个工作簿. ExcelWriter:使用它向exel中写数据. get_column ...
随机推荐
- [ZJOI 2006]书架
Description 小T有一个很大的书柜.这个书柜的构造有些独特,即书柜里的书是从上至下堆放成一列.她用1到n的正整数给每本书都编了号. 小T在看书的时候,每次取出一本书,看完后放回书柜然后再拿下 ...
- [JLOI 2014]松鼠的新家
Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想 ...
- [HNOI 2004]L语言
Description 标点符号的出现晚于文字的出现,所以以前的语言都是没有标点的.现在你要处理的就是一段没有标点的文章. 一段文章T是由若干小写字母构成.一个单词W也是由若干小写字母构成.一个字典D ...
- BestCoder 1st Anniversary ——HDU5312(数学推导)
Today, Soda has learned a sequence whose n-th (n≥1) item is 3n(n−1)+1. Now he wants to know if an in ...
- python MySQLdb pymsql
参考文档 https://www.python.org/dev/peps/pep-0249/#nextset 本节内容 MySQLdb pymysql MySQLdb和pymysql分别为Pytho ...
- 在Unix系统中,主存索引节点和辅存索引节点从内容上比较有什么不同,为什么要设置主存索引节点?
主存索引节点和辅存索引节点的不同主要体现在:主存索引节点状态:设备号.索引节点号:引用计数. 主存索引节点状态——反映主存索引节点的使用情况.它指示出: 1. 索引节点是否被锁上了: 2. 是否有 ...
- Gethub readme 撰写
大标题=== 小标题----- #一级标题 ##二级标题 ###三级标题 ####四级标题 #####五级标题 ######六级标题 插入圆点* 昵称:果冻虾仁 * 别名:隔壁老王 * 英文名:Jel ...
- bash的工作特性及其使用方法
bash的工作特性之命令执行状态返回值和命令展开所涉及的内容及其示例演出 !脚本执行与调试1.绝对路径执行,要求文件有执行权限2.以sh命令执行,不要求文件有执行权限3..加空格或source命令执行 ...
- 网络不能上网但能ping通处理
同事电脑不能上网,经过检查可以排除网线和网络问题,默认网关以及网页地址都能ping通,从网上搜索说是LSP问题,但是根据其操作方式修复,还是无效. 最后,不知道怎么捣鼓的,问题解决了. 操作流程: 1 ...
- Java Socket通信代码片
package zhang; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOExcept ...