org.apache.cassandra.thrift.CassandraServer类的add方法将接受客户端的请求,该函数定义如下:
函数内部实现上首先将kv信息封装成RowMutation对象,之后创建QueryPath对象(主要是对数据进行封转),最后调用doInsert方法执行插入动作,doInsert函数定义如下:
函数内部首先进行数据检查,调用StorageProxy.mutate(mutations, consistency_level);执行数据的插入操作。mute方法定义如下:
对于每个Mutation对象,如果是CounterMutation类型的Mutation的话,首先要确保一个replica的写入成功,之后在向另外的N-1个replicas写入;其他类型的Mutation的话,没有这个要求,做法是首先得到N个replicas节点,向这个N个节点发送命令。
这两种类型的Mutation是通过两个函数mutateCounter和performWrite分别生成的,这里我们仅仅来看一下performWrite的实现:首先得到复制策略,通过复制策略得到所有replica的endpoints,将任务交给代理WritePerformer.apply执行。代码如下:
同时需要注意的是在文件org.apache.cassandra.service.StorageProxy.java中有三个实现而来WritePerformer接口的类,WritePerformer接口定义如下:
也就是说最终完成数据写入任务的是WritePerformer的apply方法。StorageProxy的三个实现该接口的类型如下:
我们分别来看上面的几个实现,standardWritePerformer的实现方式比较简单,对于endpoints的集合,如果该节点还live,那么其发送写命令,如果该节点dead,那么这时执行hinted-handoff策略:
到此我们已经完成了数据从StorageProxy到各个replicas的转发工作,当然这里还存在一些问题,会在下面的继续:
1. 首先replicas收到命令之后的处理动作
2. cassandra中如何生成replicas,如何发现endpoints的拓扑结构,这就涉及到cassandra中nitch的实现
3. cassandra中如何实现DHT?
分享到:
相关推荐
Cassandra分布式模型与源代码分析 分析了Cassandra的分布式模型
NULL 博文链接:https://ggsonic.iteye.com/blog/1555576
Cassandra是一个开源的分布式数据库,结合了Dynamo的Key/Value与Bigtable的面向列的特点,本文档对Cassandra源代码作了详细的分析,可以了解整个集群的运作细节。
Cassandra 2.1.2 源代码 part1 编译过
的(编译的)源代码的位置。 有两种选择: 使用现有资源: CASSANDRA_DIR=~/path/to/cassandra nosetests 使用 ccm 功能从 archives.apache.org 下载/编译已发布的源代码: CASSANDRA_VERSION=1.0.0 nosetests 如果...
在eclipse中通过基于spring data的easyrest风格的maven项目操纵cassandra和lucened的源代码
该库使您可以将Cassandra表公开为Spark RDD和数据集/数据框架,将Spark RDD和数据集/数据框架写入Cassandra表,并在Spark应用程序中执行任意CQL查询。 与Apache Cassandra 2.1或更高版本兼容(请参见下表) 与...
关于Cassandra数据模型的简单介绍
Cassandra的源代码: Cassandra的技术博客: Cassandra的Meetup Group: Cassandra针对不同语言的客户端Driver: 使用Cassandra的公司: 任何有关Cassandra数据库的使用、设计、代码实现的问题都可以发到 与...
java导出cassandra数据
Cassandra 2.1.2 源代码 part2 已经编译
卡桑德拉网演示版特征主题黑暗表格行上一页下一页表格行编辑表格行过滤器表格行删除表名查找表定义表导出表导入CQL查询支持的Cassandra版本2.1.x 2.2.x 3.xx 是的是的是的用法下载$ wget ...解压缩$ tar zxvf linux.tar...
Cassandra查询分析器
Apache Cassandra构建工具 Jenkins Job DSL脚本创建CI作业: jenkins-dsl/ Jenkins Job构建/测试运行时脚本: build-scripts/ Apache Cassandra打包实用程序: cassandra-release/ docker/ 建筑包 创建包含构建...
自本期《问底》,许鹏将结合实际实践,带大家打造一个由Spark和Cassandra组成的大数据分析平台。笔者(许鹏)看Spark源码的时间不长,记笔记的初衷只是为了不至于日后遗忘。在源码阅读的过程中秉持着一种非常简单的...
看不到源码spark-cassandra-collabfiltering 此代码与我的 . 它使用基于协作过滤公司员工评级的示例说明了 Spark 上的 MLLib。 它显示了用 Java 7 和 Java 8 编写的完全相同的 Spark 客户端功能。新的 Java 8 特性使...