我一直在查看CQL 3.0 数据建模文档,该文档描述了带有标签的列系列歌曲,如下所示:
CREATE TABLE songs (
id uuid PRIMARY KEY,
title text,
tags set<text>
);
Run Code Online (Sandbox Code Playgroud)
我想获得所有具有特定标签的歌曲的列表,因此我需要添加适当的索引.
我可以title很容易地在列上创建索引,但是如果我尝试索引tags作为集合的列,如下所示:
CREATE INDEX ON songs ( tags );
Run Code Online (Sandbox Code Playgroud)
我从DataStax Java驱动程序1.0.4收到以下错误:
Exception in thread "main" com.datastax.driver.core.exceptions.InvalidQueryException: Indexes on collections are no yet supported
at com.datastax.driver.core.exceptions.InvalidQueryException.copy(InvalidQueryException.java:35)
at com.datastax.driver.core.ResultSetFuture.extractCauseFromExecutionException(ResultSetFuture.java:269)
Run Code Online (Sandbox Code Playgroud)
根据JIRA问题CASSANDRA-4511,看起来这可以在更高版本的Cassandra(2.1)中修复.我目前正在使用Apache Cassandra 1.2.11,但不想升级.根据发行CASSANDRA-5615虽然在卡桑德拉1.2.6存在是支持自定义索引的集合.
问题是,唯一可用的文档说明:
Cassandra支持创建自定义索引,该索引供内部使用且超出本文档的范围.
但是,它确实暗示的语法如下:
CREATE CUSTOM INDEX ON songs ( tags ) USING 'class_name';
Run Code Online (Sandbox Code Playgroud)
什么是class_name …
例如,
for(..){
ses.executeAsync(statement);
}
ses.close();
Run Code Online (Sandbox Code Playgroud)
驱动程序会在所有请求发出之前关闭吗?
我在cassandra有很多桌子,超过20亿行并且越来越多.行具有日期字段,并且遵循日期桶模式以限制每一行.
即便如此,我在特定日期的参赛作品超过一百万.
我想尽快读取和处理每一天的行.我正在做的是获取它的实例com.datastax.driver.core.ResultSet并从中获取迭代器并在多个线程之间共享该迭代器.
所以,基本上我想增加读取吞吐量.这是正确的方法吗?如果没有,请建议更好的方法.
相当于:
INSERT INTO table (myColumn) VALUES (now())
Run Code Online (Sandbox Code Playgroud)
使用Cassandra对象映射api?
我正在运行一个查询来获取数百万行(5.000.000 左右)。我的节点似乎非常繁忙,因为协调器返回了com.datastax.driver.core.exceptions.ReadTimeoutException: Cassandra timeout during read query at consistency ONE (1 responses were required but only 0 replica responded)异常。(我真的不知道节点是否繁忙或发生其他事情)。
到目前为止,我已经尝试在每个 Cassandra 节点中设置更高的 read_request_timeout_in_millis ,并像这样执行查询
new SimpleStatement("SELECT * FROM where date = ? ",param1)
.setFetchSize(pageSize).setConsistencyLevel(ConsistencyLevel.ONE)
.setReadTimeoutMillis(ONE_DAY_IN_MILLIS);
ResultSet resultSet = this.session.execute(statement);
Run Code Online (Sandbox Code Playgroud)
但异常仍然被抛出。我的下一步是尝试自定义 RetryPolicy,但有人可以告诉我 readTimeout 重试是否会再次执行整个查询,还是会从失败的当前页面重试?
我正在尝试这样的事情:
@Override
public RetryDecision onReadTimeout(Statement statement, ConsistencyLevel cl, int requiredResponses, int receivedResponses, boolean dataRetrieved, int nbRetry) {
if (dataRetrieved) {
return RetryDecision.ignore();
} else if (nbRetry < readRetries) {
LOGGER.info("Retry attemp {} out of …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 cassandra 中的数据索引到云中托管的弹性搜索。我可以使用传输客户端轻松地通过弹性搜索连接和索引虚拟数据。但是,当我在 pom 文件中添加 datastax 驱动程序依赖项以连接到 cassandra 时,出现以下异常。奇怪的是我什至没有连接到 cassandra 集群。提前致谢
线程“主”中的异常 java.lang.AbstractMethodError: io.netty.util.concurrent.MultithreadEventExecutorGroup.newChild(Ljava/util/concurrent/Executor;[Ljava/lang/Object;)Lio/netty/util/concurrent/EventExecutor; 在io.netty.util.concurrent.MultithreadEventExecutorGroup。(MultithreadEventExecutorGroup.java:84)在io.netty.util.concurrent.MultithreadEventExecutorGroup。(MultithreadEventExecutorGroup.java:58)在io.netty.util.concurrent.MultithreadEventExecutorGroup。(MultithreadEventExecutorGroup。 java:47)在io.netty.channel.MultithreadEventLoopGroup。(MultithreadEventLoopGroup.java:49)在io.netty.channel.nio.NioEventLoopGroup。(NioEventLoopGroup.java:68)在io.netty.channel.nio.NioEventLoopGroup。( NioEventLoopGroup.java:63) 在 io.netty.channel.nio.NioEventLoopGroup.(NioEventLoopGroup.java:54) 在 org.elasticsearch.transport.netty4.Netty4Transport.createBootstrap(Netty4Transport.java:201) 在 org.elasticsearch.transport。 netty4.Netty4Transport.doStart(Netty4Transport.java:172) 在 org.elasticsearch.xpack.security.transport.netty4.SecurityNetty4Transport.doStart(SecurityNetty4Transport.java:74) 在 org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent. java:69) 在 org.elasticsearch.transport.TransportService.doStart(TransportService.java:196) 在 org.elasticsearch.common.component.AbstractLifecycleComponent.start(AbstractLifecycleComponent.java:69) 在 org.elasticsearch.client.transport.TransportClient .buildTemplate(TransportClient.java:208) 在 org.elasticsearch.client.transport.TransportClient.(TransportClient.java:268) 在 org.elasticsearch.transport.client.PreBuiltTransportClient.(PreBuiltTransportClient.java:125) 在 org.elasticsearch. xpack.client.PreBuiltXPackTransportClient.(PreBuiltXPackTransportClient.java:55) 在 org.elasticsearch.xpack.client.PreBuiltXPackTransportClient.(PreBuiltXPackTransportClient.java:50) 在 org.elasticsearch.xpack.client.PreBuiltXPackTransportClient.(PreBuiltXPackTransportClient.java:46)
是否可以从Cassandra集群中的另一个数据中心发现节点列表?
我们说我有以下信息:
使用datastaxjava库我尝试执行以下操作:
直接从system.peers表中读取对等列表 - 但它只返回其中的一些(它以一致性级别读取ALL),都属于"dc1";
使用cluster.getMetada().getAllHosts()- 但它只返回"dc1"内的完整主机列表.
看起来如果不知道"dc2"中的至少一个节点,就无法获得有关其他数据中心的此信息.我错了吗?
我正在实现一项功能,需要通过主键列表查找 Cassandra。
下面是一个示例数据,其中 id 是主键
mytable
id column1
1 423
2 542
3 678
4 45534
5 435634
6 2435
7 678
8 4564
9 546
Run Code Online (Sandbox Code Playgroud)
我的大多数查询都是通过 id 进行查找,但对于某些特殊情况,我想获取 id 列表的数据。我目前正在做的方式如下:
public Object fetchFromCassandraForId(int id);
int ids[] = {1, 3, 5, 7, 9};
List<Object> results;
for(int id: ids) {
results.add(fetchFromCassandraForId(id));
}
Run Code Online (Sandbox Code Playgroud)
这会导致向 cassandra 发出多个网络调用,是否可以以某种方式进行批处理,因此我想知道 cassandra 是否支持通过 ids 列表进行快速查找
select coulmn1 from mytable where id in (1, 3, 5, 7, 9);
Run Code Online (Sandbox Code Playgroud)
?任何帮助或指示将不胜感激?
我正在尝试将参数传递给Accessor查询.我有以下内容:
@Accessor
public interface ActivityAccessor {
@Query("SELECT * FROM activity WHERE user_id = :id limit :limit")
Result<UserActivity> findUserActivityByUserId(@Param("id") Long ownerId, @Param("limit") int limit);
}
Run Code Online (Sandbox Code Playgroud)
使用以下方法调用访问器方法:
MappingManager manager = new MappingManager (getSession());
ActivityAccessor activityAccessor = manager.createAccessor(ActivityAccessor.class);
Result<UserActivity> activities = activityAccessor.findUserActivityByUserId(userId, 20);
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Caused by: com.datastax.driver.core.exceptions.SyntaxError: line 1:99 no viable alternative at input 'limit' (... LIMIT :[limit])
Run Code Online (Sandbox Code Playgroud)
但是,当我更改访问器方法以显式声明限制值时,它可以正常工作:
@Query("SELECT * FROM activity WHERE user_id = :id limit 20")
Result<UserActivity> findUserActivityByUserId(@Param("id") Long ownerId);
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么会发生这种情况?
当我尝试使用datastax驱动程序3.0运行"describe keyspace keyspacename"命令时,它给了我一个错误
Exception in thread "main" com.datastax.driver.core.exceptions.SyntaxError: line 1:0 no viable alternative at input 'DESCRIBE' ([DESCRIBE]...)
Run Code Online (Sandbox Code Playgroud)
如何运行"describe keyspace keyspacename"命令?