ReadTimeout:服务器错误:代码= 1200 [协调器节点等待副本节点的响应超时]

时间:2019-10-07 13:21:56

标签: cassandra cqlsh

我们创建了具有以下架构的表:

创建表test_table(col_1文本,col_2文本,col_3文本,col_4文本,col_5文本,col_6文本,col_7文本,PRIMARY KEY(col_1,col_2,col_3,col_4,col_5));

此表包含近数十亿条记录。(巨大的记录数)

并尝试如下查询

从test_table中选择*,其中col_1 ='value'和col_2 ='value'; ->获得结果

但是当我们尝试如下所示时,

从test_table中选择*,其中col_1 ='value'和col_3 ='value'允许过滤; -> 未获得结果

从test_table中选择*,其中col_1 ='value'和col_4 ='value'允许过滤; -> 未获得结果

我们遇到以下错误:

“读取超时:来自服务器的错误:代码= 1200 [协调器节点超时,等待副本节点的响应] message =“操作超时-仅收到0个响应。” info = {'received_responses':0, 'required_responses':1,1,'consistency':'ONE'}“

出现上述错误后,我在cassandra.yaml配置文件中将超时参数从5秒延长到60分钟。

随后结果出来了,但是执行时间很长,执行时间为50分钟。

有人可以建议我在不扩展配置的情况下解决“ ReadTimeout:”问题吗?

2 个答案:

答案 0 :(得分:0)

您的分区和群集键是什么?超时会导致数据大小太大,无法在给定的超时时间内处理。尝试查看分页和二级索引。 尽管二级索引可能会降低Wright的性能。

答案 1 :(得分:0)

通过使用“允许过滤”,您正在执行全表扫描,该扫描超时并且这就是您得到错误的原因。

您需要以一种无需运行“允许过滤”参数即可运行查询的方式来更改分区/集群键。

仅执行上述给定查询时,您可以考虑将数据复制到3个表中:

private func toVC<T>(_ id: String, vc: T.Type, data: Any) {
    if let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: id) as? T {
        if let window = self.window, let rootVC = window.rootViewController {
            var currVC = rootVC
            let navVC = UINavigationController()
            while let presentVC = currVC.presentedViewController {
                currVC = presentVC
            }
            (vc as? MyViewController1)?.data = data
            (vc as? MyViewController2)?.data = data
            navVC.viewControllers = [vc]
            currVC.present(navVC, animated: true, completion: nil)
        }
    }
}

您的查询将是:

create table test_table_1(col_1 text, col_2 text, col_3 text, col_4 text, col_5 text, col_6 text, col_7 text, PRIMARY KEY (col_1, col_2));
create table test_table_2(col_1 text, col_2 text, col_3 text, col_4 text, col_5 text, col_6 text, col_7 text, PRIMARY KEY (col_1, col_3));
create table test_table_3(col_1 text, col_2 text, col_3 text, col_4 text, col_5 text, col_6 text, col_7 text, PRIMARY KEY (col_1, col_4));

记住: 在cassandra中,您可以围绕查询设计表。