Cassandra中in运算符中的参数数量是否有限?

Cassandra中in运算符中的参数数量是否有限?,cassandra,cassandra-2.0,cql3,datastax-java-driver,nosql,Cassandra,Cassandra 2.0,Cql3,Datastax Java Driver,Nosql,我有一个非常简单的问题,我在互联网或stackoverflow上找不到答案: Cassandra中in运算符中的参数数量是否有限 我用一个简单的表做了一些测试,表中的整数键从1到100000。如果我将0到1000之间的键放入in操作符(如SELECT*from test.numbers,其中id位于(0,…,1000)),我将返回正确的行数。但例如,对于0到100000行,我总是只返回34464行。而对于0到75000,则是9464 我使用的是Datastax Java驱动程序2.0,相关代码部

我有一个非常简单的问题,我在互联网或stackoverflow上找不到答案:

Cassandra中in运算符中的参数数量是否有限

我用一个简单的表做了一些测试,表中的整数键从1到100000。如果我将0到1000之间的键放入in操作符(如
SELECT*from test.numbers,其中id位于(0,…,1000)
),我将返回正确的行数。但例如,对于0到100000行,我总是只返回34464行。而对于0到75000,则是9464

我使用的是Datastax Java驱动程序2.0,相关代码部分如下所示:

String query = "SELECT * FROM test.numbers WHERE id IN ?;";
PreparedStatement ps = iot.getSession().prepare(query);
bs = new BoundStatement(ps);
List<Integer> ints = new ArrayList<Integer>();
for (int i = 0; i < 100000; i++) {
    ints.add(i);
}
bs.bind(ints);
ResultSet rs = iot.getSession().execute(bs);
int rowCount = 0;
for (Row row : rs) {
    rowCount++;
}
System.out.println("counted rows: " + rowCount);
String query=“从test.numbers中选择*其中id在?;”;
PreparedStatement ps=iot.getSession().prepare(查询);
bs=新的边界声明(ps);
List ints=new ArrayList();
对于(int i=0;i<100000;i++){
内加(i);
}
bs.bind(ints);
ResultSet rs=iot.getSession().execute(bs);
int rowCount=0;
用于(行:rs){
行计数++;
}
System.out.println(“计数行:“+rowCount”);
也可能是我以错误的方式绑定了整数列表。如果是这样的话,我也希望得到任何提示


我将Cassandra 2.0.7与CQL 3.1.1一起使用。

这不是一个真正的限制,而是一个预先准备好的声明。 使用BuiltStatement和QueryBuilder,我没有任何这些问题

你自己试试吧:

List<Integer> l = new ArrayList<>();
for (int i = 0; i < 100000; i++) {
    l.add(i);
}
BuiltStatement bs = QueryBuilder.select().column("id").from("test.numbers").where(in("id", l.toArray()));
ResultSet rs = Cassandra.DB.getSession().execute(bs);
System.out.println("counted rows: " + rs.all().size());
listl=newarraylist();
对于(int i=0;i<100000;i++){
l、 加(i);
}
BuiltStatement bs=QueryBuilder.select().column(“id”).from(“test.numbers”)。其中(在(“id”,l.toArray());
ResultSet rs=Cassandra.DB.getSession().execute(bs);
System.out.println(“计数行:+rs.all().size());
嗯,,
Carlo

及更多:它将在即将发布的2.1中得到修复(尽管in子句中有太多键是反模式的),但只想添加相关信息。IN子句在手工查询的情况下仅接受65535个参数。如果给出更多的参数,那么就是给出错误。