首页 > 代码库 > cassandra在服务端像leveldb一样进行插入初试成功

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‘}

cassandra在服务端像leveldb一样进行插入初试成功