所有聚类列的总和太长 (65927 > 65535)
Posted
技术标签:
【中文标题】所有聚类列的总和太长 (65927 > 65535)【英文标题】:The sum of all clustering columns is too long (65927 > 65535) 【发布时间】:2015-01-13 10:47:34 【问题描述】:在插入 Cassandra db 时出现此错误,我正在向数据库中插入非常大的数据,此错误是因为内存,我有足够的磁盘空间,因为我知道数据库中的行可以容纳 20 亿条记录,所以我我缺少列范围配置。
Exception in thread "main" com.datastax.driver.core.exceptions.InvalidQueryException: The sum of all clustering columns is too long (65927 > 65535)
at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:35)
at com.datastax.driver.core.DefaultResultSetFuture.extractCauseFromExecutionException(DefaultResultSetFuture.java:259)
at com.datastax.driver.core.DefaultResultSetFuture.getUninterruptibly(DefaultResultSetFuture.java:175)
at com.datastax.driver.core.AbstractSession.execute(AbstractSession.java:52)
at FileLogger.persistData(FileLogger.java:91)
at FileLogger.main(FileLogger.java:59)
Caused by: com.datastax.driver.core.exceptions.InvalidQueryException: The sum of all clustering columns is too long (65927 > 65535)
【问题讨论】:
该错误表明您有太多的“集群列”,这很可能是软件的内置限制(因为限制是整数 2^16-1)而不是硬件。 【参考方案1】:看起来很清楚,您汇总的列名大于预期的 cassandra 似乎是 (0XFFFF = 65535)。
要么你可以减少名字,要么你必须划分你的查询。
发件人:Link
105 public static void validateColumnNames(Iterable<ByteBuffer> columnNames) throws InvalidRequestException
106
107 for (ByteBuffer name : columnNames)
108 validateColumnName(name);
109
110
111 public static void validateColumnName(ByteBuffer name) throws InvalidRequestException
112
113 if (name.remaining() > IColumn.MAX_NAME_LENGTH)
114 throw new InvalidRequestException(String.format("The sum of all clustering columns is too long (%s > %s)",
115 name.remaining(),
116 IColumn.MAX_NAME_LENGTH));
117
118 if (name.remaining() == 0)
119 throw new InvalidRequestException("Invalid empty value for clustering column of COMPACT TABLE");
120
【讨论】:
感谢 Michael 的回复 :),我的复合键是 ((timestamp_byhour),timestamp,payload)。我认为这里的列名长度并不重要。但是一旦我从复合中删除有效负载,它肯定会解决密钥是具有 2048 个字符的文本类型。仍然不清楚为什么在插入 70000 条记录后它失败了,它是一个单集群和单节点服务器。如果集群列的总和太长,那么集群键中可以考虑多少列。即使我将有效负载的文本类型更改为 blob,仍然会出现同样的错误。如果有人能解释什么是“所有聚类列的总和”,那就太好了以上是关于所有聚类列的总和太长 (65927 > 65535)的主要内容,如果未能解决你的问题,请参考以下文章
不能限制聚类列“状态”(前面的列“日期时间”受非 EQ 关系限制