gpt4 book ai didi

Cassandra Datastax 驱动程序未通过准备返回行

转载 作者:行者123 更新时间:2023-12-02 23:54:41 25 4
gpt4 key购买 nike

我正在使用 Cassandra 1.2.5 和二级索引。当我运行准备好的语句时,没有返回数据。我有数据。另外,对于索引列,我确实有重复的值。我正在做的是根据 user_id 重新调整 video_id 列表。描述表如下所示:[default@video] 描述视频;

警告:“描述”输出中故意省略了 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 并发 = 3; //最终BoundStatement查询= null; 尝试 { //创建与主机的 session Cluster 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 时,我仍然没有返回任何行。

知道我做错了什么吗?

谢谢,-托尼

最佳答案

尝试使用此代码来检索数据:

Cluster cluster = Cluster.builder()
.addContactPoint("127.0.0.1")
// .addContactPoint("some.other.ip")
.build();
Session session = cluster.connect();

String statement = "SELECT * FROM pixel.user;";
// String statement = "SELECT video_id from video.videos WHERE user_id=9";

session.execute(statement);
ResultSet rs = session.execute(statement);
for(Row r : rs.all())
System.out.println(r.toString());

一旦掌握了基础知识,就该使用绑定(bind)语句了:

int user_id = 9;
String statement = "SELECT * from video.videos WHERE user_id=?";
PreparedStatement pStatement = session.prepare(statement);
BoundStatement boundStatement = new BoundStatement(pStatement);

PreparedStatement ps = session.prepare(statement);
BoundStatement bs = ps.bind();
bs.bind(user_id); // a csv list: bs.bind(9, "string val of second ?, etc...");

// session.execute(bs);
ResultSet rs = session.execute(bs);

关于Cassandra Datastax 驱动程序未通过准备返回行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17496167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com