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 ...
随机推荐
- 洛谷P2405 non天平
题目背景 non最近正在为自己的体重而苦恼,他想称量自己的体重.于是,他找来一个天平与许多砝码. 题目描述 砝码的重量均是n的幂次,n^1.n^2.n^3.n^4.n^5的……non想知道至少要多少个 ...
- 51Nod 1125 交换机器的最小代价
题目描述: 有N台机器重量各不相等,现在要求把这些机器按照重量排序,重量从左到右依次递增.移动机器只能做交换操作,但交换机器要花费一定的费用,费用的大小就是交换机器重量的和.例如:3 2 1,交换1 ...
- POJ 3294 n个串中至少一半的串共享的最长公共子串
Life Forms Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 12484 Accepted: 3502 Descr ...
- UDA机器学习基础—误差原因
1.模型误差产生的原因 (1)模型无法表示基本数据的复杂度,而造成偏差. (2)因模型对训练它所用到的数据过度敏感造成的方差. 2.由偏差造成的误差--准确率和欠拟合 有足够数据表示模型,但是由于模型 ...
- 运行C++程序是出现错误:cannot open Debug/1.exe for writing
今天,打开VC6.0环境编了个小程序,谁知给我报了“cannot open Debug/1.exe for writing”这样一个错,然后,我就纳闷了,这是什么错丫? 想了半天,后想通,为什么会这样 ...
- Spring学习笔记3——使用注解的方式完成注入对象中的效果
第一步:修改applicationContext.xml 添加<context:annotation-config/>表示告诉Spring要用注解的方式进行配置 <?xml vers ...
- SpringMVC 处理映射
一.Spring MVC控制器名称处理映射 以下示例展示如何利用Spring MVC 框架使用控制器名称处理程序映射. ControllerClassNameHandlerMapping类是基于约定的 ...
- Object Relational Tutorial 对象关系教程
The SQLAlchemy Object Relational Mapper presents a method of associating user-defined Python classes ...
- Java内存分配、管理小结
转载自:http://java-mzd.iteye.com/blog/848635
- sublime text3中设置Emmet输入标签自动闭合
项目后端前一段时间从C#转成了JAVA,在开发的过程中,由于HTML对标签的语法很宽松,比如这样:<img src="" alt="">在标签的结尾 ...