我正在使用Cassandra 1.2.5和二级索引 . 当我运行预准备语句时,没有数据返回 . 我有数据 . 同样对于索引列,我确实有重复的值 . 我正在做的是基于user_id重新调整video_id列表 . 表格描述如下:[默认@视频]描述视频;
警告:'describe'输出中有意省略了CQL3表 . 有关详细信息,请参见https://issues.apache.org/jira/browse/CASSANDRA-4377 .
ColumnFamily: videos
Key Validation Class: org.apache.cassandra.db.marshal.IntegerType
Default column value validator: org.apache.cassandra.db.marshal.IntegerType
Columns sorted by: org.apache.cassandra.db.marshal.UTF8Type
GC grace seconds: 864000
Compaction min/max thresholds: 4/32
Read repair chance: 0.1
DC Local Read repair chance: 0.0
Populate IO Cache on flush: false
Replicate on write: true
Caching: ALL
Bloom Filter FP chance: default
Built indexes: [videos.videos_user_id_idx]
Column Metadata:
Column Name: video_id
Validation Class: org.apache.cassandra.db.marshal.IntegerType
Column Name: user_id
Validation Class: org.apache.cassandra.db.marshal.IntegerType
Index Name: videos_user_id_idx
Index Type: KEYS
Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy
Compression Options:
sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor
我的代码如下所示:int concurrency = 3; // final BoundStatement query = null; try {//创建会话到主机群集cluster = new Cluster.Builder() . addContactPoints(String.valueOf(“localhost”)) . build();
// final int maxRequestsPerConnection = 10;
// int maxConnections = concurrency / maxRequestsPerConnection + 1;
int maxConnections = 3;
PoolingOptions pools = cluster.getConfiguration().getPoolingOptions();
pools.setMaxSimultaneousRequestsPerConnectionThreshold(HostDistance.LOCAL, concurrency);
pools.setCoreConnectionsPerHost(HostDistance.LOCAL, maxConnections);
pools.setMaxConnectionsPerHost(HostDistance.LOCAL, maxConnections);
pools.setCoreConnectionsPerHost(HostDistance.REMOTE, maxConnections);
pools.setMaxConnectionsPerHost(HostDistance.REMOTE, maxConnections);
Session session = cluster.connect();
//get list of video ids
String cql1 = "SELECT video_id from video.videos WHERE user_id=?";
com.datastax.driver.core.PreparedStatement stmt = session.prepare(cql1);
BoundStatement b = stmt.bind();
BigInteger i = BigInteger.valueOf(9);
b.setVarint("user_id",i);
long start, end;
start = System.nanoTime();
com.datastax.driver.core.ResultSet rs1 = session.execute(b);
end = System.nanoTime();
System.out.println("Datastax driver CQL Query prepared overall time ns:"
+ (end - start));
while(rs1.iterator().hasNext()) {
System.out.println("user_id:" + rs1.iterator().next().getVarint("video_id"));
}
注意即使我更改语句来替换?值为9我仍然没有返回任何行 .
任何想法我做错了什么?
谢谢,-Tony
1 回答
试试这段代码来检索数据:
一旦你掌握了基础知识,它的时间就是绑定语句: