cassandra在服务端像leveldb一样进行插入初试成功
经过研究,决定在 cql3/QueryProcessor.java 里面下手。
这里有两个函数,第一个是
public ResultMessage process(String queryString, QueryState queryState, QueryOptions options, long queryStartNanoTime)
该函数接受到 String 类型的sql语句,进行规整处理(判断是否合法),然后 调用 函数
processStatement(prepared, queryState, options, queryStartNanoTime);
进行具体的处理。
我们在同一个类里面建立bench函数
public void Bench(String queryString, QueryState queryState, QueryOptions options, long queryStartNanoTime)
在 process 函数开始时调用bench函数。
但是注意:如果不加处理,cassandra启动后会陷入某种无限循环导致一直无法进入服务状态(客户端无法操作数据库)
因此,在调用 bench 之前,加入if语句,判断如果 queryString 中含有某字符(bench)再调用bench函数。
注意需要将判断语句放在开始,这样可以使用任意的 query语句触发bench函数。否则如果放在后面,如果query语句非法,规整处理会直接返回。
bench函数被调用后,可以更改传递过来的 sql语句,然后调用
processStatement
完成处理。
测试:在bench函数中使用insert语句,结果插入成功。
------------------------------问题
只能插入一条,如果插入多条的话,会发生错误。
WriteTimeout: Error from server: code=1100 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}
goolge该错误,找到该链接,一模一样的错误 http://stackoverflow.com/questions/30575125/coordinator-node-timed-out-waiting-for-replica-nodes-in-cassandra-datastax-while
将配置文件 cassandra.yaml 中的 write_request_timeout_in_ms
=2000 改为
write_request_timeout_in_ms: 20000
重启,多条插入成功 ---------------------------------问题2
但是这并不能完成负载,一般插入几十k条记录就结束了。
后来发现 write_request_timeout_in_ms 的设置同时是服务端的运行时间,将这个值在加几个0,就可以bench很长时间了。 -------------------------问题3
当解决了上面问题后,去除打印语句,可以发现log的速度很快,iostat在7到十几MB/s
但是,合并后又出了问题。
决定放弃这一方案,准备在多核机器上使用YCSB客户端测试。
WARN [MutationStage-7] 2017-02-23 05:44:40,240 AbstractLocalAwareExecutorService.java:167 - Uncaught exception on thread Thread[MutationStage-7,10,main]: {}
java.lang.AssertionError: null
at io.netty.util.Recycler$WeakOrderQueue.<init>(Recycler.java:225) ~[netty-all-4.0.39.Final.jar:4.0.39.Final]
at io.netty.util.Recycler$DefaultHandle.recycle(Recycler.java:180) ~[netty-all-4.0.39.Final.jar:4.0.39.Final]
at io.netty.util.Recycler.recycle(Recycler.java:141) ~[netty-all-4.0.39.Final.jar:4.0.39.Final]
at org.apache.cassandra.utils.btree.BTree$Builder.recycle(BTree.java:839) ~[main/:na]
at org.apache.cassandra.utils.btree.BTree$Builder.build(BTree.java:1092) ~[main/:na]
at org.apache.cassandra.db.partitions.PartitionUpdate.build(PartitionUpdate.java:584) ~[main/:na]
at org.apache.cassandra.db.partitions.PartitionUpdate.maybeBuild(PartitionUpdate.java:574) ~[main/:na]
at org.apache.cassandra.db.partitions.PartitionUpdate.holder(PartitionUpdate.java:385) ~[main/:na]
at org.apache.cassandra.db.partitions.AbstractBTreePartition.unfilteredIterator(AbstractBTreePartition.java:177) ~[main/:na]
at org.apache.cassandra.db.partitions.AbstractBTreePartition.unfilteredIterator(AbstractBTreePartition.java:172) ~[main/:na]
at org.apache.cassandra.db.partitions.PartitionUpdate$PartitionUpdateSerializer.serialize(PartitionUpdate.java:776) ~[main/:na]
at org.apache.cassandra.db.Mutation$MutationSerializer.serialize(Mutation.java:377) ~[main/:na]
at org.apache.cassandra.db.commitlog.CommitLog.add(CommitLog.java:249) ~[main/:na]
at org.apache.cassandra.db.Keyspace.apply(Keyspace.java:581) ~[main/:na]
at org.apache.cassandra.db.Keyspace.applyNotDeferrable(Keyspace.java:440) ~[main/:na]
at org.apache.cassandra.db.Mutation.apply(Mutation.java:223) ~[main/:na]
at org.apache.cassandra.db.Mutation.apply(Mutation.java:237) ~[main/:na]
at org.apache.cassandra.service.StorageProxy$8.runMayThrow(StorageProxy.java:1374) ~[main/:na]
at org.apache.cassandra.service.StorageProxy$LocalMutationRunnable.run(StorageProxy.java:2596) ~[main/:na]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_111]
at org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$FutureTask.run(AbstractLocalAwareExecutorService.java:162) ~[main/:na]
at org.apache.cassandra.concurrent.AbstractLocalAwareExecutorService$LocalSessionFutureTask.run(AbstractLocalAwareExecutorService.java:134) [main/:na]
at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:109) [main/:na]
at java.lang.Thread.run(Thread.java:745) [na:1.8.0_111]
cassandra在服务端像leveldb一样进行插入初试成功的更多相关文章
- 创建APPID&&部署服务端教程
创建APPID&&部署服务端 一.创建APPID 1.打开https://console.developers.google.com ,左击顶部Project,然后左击创建项目 2.输 ...
- TYPESDK手游聚合SDK服务端设计思路与架构之四:流程优化之信息安全与订单校验
有了前文几个步骤的分析和设计,TYPESDK的信息交互流程已经可以正常工作了,但是,这个流程还没有考虑到支付这样的过程中,至关重要的信息安全问题. 在整个交互过程中,游戏服务端,SDK服务端,渠道服务 ...
- Mina airQQ聊天 服务端篇(二)
Mina聊天服务端实现思路:在用户登录的时候.连接服务端而且验证登录用户,假设成功,则将IoSession保存到map<账号,IoSession>中,而且通知该用户的好友上线,然 后再请求 ...
- DSAPI HTTP监听服务端与客户端
本文中,演示了使用DSAPI.网络相关.HTTP监听,快速建立服务端和客户端. HTTP监听服务端的作用,是监听指定计算机端口,以实现与IIS相同的解析服务,提供客户端的网页请求,当然,这不仅仅是应用 ...
- DSAPI多功能组件编程应用-HTTP监听服务端与客户端
本文中,演示了使用DSAPI.网络相关.HTTP监听,快速建立服务端和客户端. HTTP监听服务端的作用,是监听指定计算机端口,以实现与IIS相同的解析服务,提供客户端的网页请求,当然,这不仅仅是应用 ...
- C#Winform窗体实现服务端和客户端通信例子(TCP/IP)
Winform窗体实现服务端和客户端通信的例子,是参考这个地址 http://www.cnblogs.com/longwu/archive/2011/08/25/2153636.html 进行了一些异 ...
- Cognos TM1_10.1.1服务端配置
场景:本文继Cognos TM1_10.1.1服务端安装 之后,简单的说一下本人对简单配置的拙见,确保服务端在安装过程一切正常,成功安装. 1:进入TM的Cognos Configuration 2: ...
- 安装lanproxy服务端、客户端以及小问题解决
准备 我们这里使用java客户端与服务端连接 1.一台公网服务器(运行proxy-server).2.一台内网客户端(运行proxy-client). 下载地址:https://seafile.cdj ...
- java socket实现服务端,客户端简单网络通信。Chat
之前写的实现简单网络通信的代码,有一些严重bug.后面详细写. 根据上次的代码,主要增加了用户注册,登录页面,以及实现了实时显示当前在登录状态的人数.并解决一些上次未发现的bug.(主要功能代码参见之 ...
随机推荐
- 集合-LinkList
参考:http://www.cnblogs.com/skywang12345/p/3308807.html Consumer.class 消费者接口 参考:https://www.jianshu. ...
- 电音中DJ/Producer/MC/EDM/Remix/Mix的名词解释(转)
DJ DJ是Disc Jockey的缩写,是电音圈子里的一种热门职业,一般大家在夜店或者酒吧看到的站在台上甩着膀子拧着按钮或者使劲儿搓碟的就是DJ啦. DJ的主要工作一般就是在现场用打碟机和混音台把许 ...
- 【转】构造HTTP请求Header实现“伪造来源IP”
构造 HTTP请求 Header 实现“伪造来源 IP ” 在阅读本文前,大家要有一个概念,在实现正常的TCP/IP 双方通信情况下,是无法伪造来源 IP 的,也就是说,在 TCP/IP 协议中,可以 ...
- ubuntu 添加和删除用户
Without a home directory sudo useradd myuser With home directory sudo useradd -m myuser Then set the ...
- Java并发编程(三)volatile域
相关文章 Java并发编程(一)线程定义.状态和属性 Java并发编程(二)同步 Android多线程(一)线程池 Android多线程(二)AsyncTask源代码分析 前言 有时仅仅为了读写一个或 ...
- vue2.0 自定义过滤器(filter)实例
一.过滤器简介 (1)过滤器创建 过滤器的本质 是一个有参数 有返回值的方法 new Vue({ filters:{ myCurrency:function(myInput){ return 处理后的 ...
- XMLHttpRequest是什么、如何完整地运行一次GET请求、如何检測错误。
var xmlhttp; function LoadXmlDoc(url){ xmlhttp = null; if(window.XMLHttpRequest){ //code for all new ...
- postgres SQL编译过程
PG启动首先完成主进程和后台进程的启动,启动时完成数据库文件的打开,共享内存的建立等.接着,所有SQL都会启动1个单独的进程处理SQL的执行过程. 新的进程首先是进行自身的初始化,最主要的是初始化内存 ...
- C++中的getopt的用法
getopt的用法 getopt被用来解析命令行选项参数.就不用自己写东东处理argv了. 点击(此处)折叠或打开 #include <unistd.h> extern char *opt ...
- 在MVC中使用泛型仓储模式和工作单元来进行增删查改
原文链接:http://www.c-sharpcorner.com/UploadFile/3d39b4/crud-operations-using-the-generic-repository-pat ...