我正在研究使用 cassandra 作为 NoSql 数据库的项目。我正在尝试设置我的测试框架,以便能够使用任意键空间来避免同时运行的不同测试之间发生冲突。
我希望能够针对可能不存在的键空间创建会话。基本上我想要的是首先检查它是否存在,如果不创建它,然后连接。
似乎 Api 有 catch 22,因为为了执行命令(可以创建键空间),我已经必须连接到现有的键空间。
我缺少什么?
我在用cassandra java datastax 2.1; 我一直在尝试使用它的mapper类来保存一个类,这个类是其他类的子类,我很难搞清楚.
到目前为止我发现的是if classB的子类classA,如果我想classB使用mapper 保存,那么:
classB.classB保存了字段.我做错了什么或者没有办法在Java datastax驱动程序中使用继承?
所有,
我在Digital Ocean中有一个3节点的集群cassandra.根据CQL中的SHOW VERSION,cassandra的版本如下所示
[cqlsh 5.0.1 | Cassandra 3.0.0 | CQL规范3.3.1 | 原生协议v4]
我能够使用cqlsh从另一个节点连接到集群的一个节点并运行命令...但是当我尝试使用java驱动程序进行连接时,我得到以下异常
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /128.xxx.xxx.xx:9042 (com.datastax.driver.core.TransportException: [/128.xxx.xxx.xxx:9042] Connection has been closed))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:222)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:77)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1232)
at com.datastax.driver.core.Cluster.getMetadata(Cluster.java:336)
at com.attinad.cantiz.iot.platform.vehicledatapoc.App.connect(App.java:22)
at com.attinad.cantiz.iot.platform.vehicledatapoc.App.main(App.java:14)
Run Code Online (Sandbox Code Playgroud)
我使用的java驱动程序的版本是2.0.10.maven配置如下
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>2.0.10</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我检查了cassandra.yaml,发现以下设置已正确设置
start_native_transport: true
native_transport_port: 9042
rpc_address: 128.xxx.xxx.xx
listen_address: 128.xxx.xxx.xx
Run Code Online (Sandbox Code Playgroud)
已经正确配置...所以我完全失去了...任何帮助表示赞赏
java datastax-enterprise datastax-java-driver digital-ocean cassandra-3.0
我们可以在 Java 中使用 Cassandra 而不使用 Maven 吗?如果是这样,我们该怎么做呢?
我尝试将它与 JDBC DRIVER 一起使用,但它对这种情况没有帮助。
将 cassandra 的 Java 驱动程序从 3.7 升级到 4.0(或更高版本)后 - 我无法解析集群名称。
我需要我的应用程序使用 java 驱动程序连接到的 cassandra 集群的名称。早些时候它以“Cluster.getMetadata().getClusterName()”的形式提供。但是升级到 datastax-driver-core-4.0 或更高版本后-我无法从 CqlSession.getMetadata() 解析集群名称。
这非常重要,因为我已经根据不同的集群分离了操作。
最近,我开始与卡桑德拉工作,我正在读更多的连接池这里。我对池大小感到困惑,无法理解这是什么意思:
poolingOptions
.setCoreConnectionsPerHost(HostDistance.LOCAL, 4)
.setMaxConnectionsPerHost( HostDistance.LOCAL, 10)
.setCoreConnectionsPerHost(HostDistance.REMOTE, 2)
.setMaxConnectionsPerHost( HostDistance.REMOTE, 4)
.setMaxRequestsPerConnection(2000);
Run Code Online (Sandbox Code Playgroud)
以下是我想详细了解的内容:
setCoreConnectionsPerHost,setMaxConnectionsPerHost和setMaxRequestsPerConnection手段?LOCAL和REMOTE这里的意思?如果有人可以用一个例子来解释,那么它真的会帮助我更好地理解。
我们在一个 DC 中有 6 个节点集群,RF 为 3,我们作为本地仲裁读/写。
我试图用PreparedStatement与solr_query使用下面的代码:
PreparedStatement preparedStatement = cassandraSession.prepare(
"SELECT * FROM users WHERE solr_query = 'username:? OR email:?';"
);
BoundStatement boundStatement = new BoundStatement(preparedStatement);
ResultSet results = cassandraSession.execute(
boundStatement.bind(
username,
email
)
);
Run Code Online (Sandbox Code Playgroud)
当我执行上面的代码时,我得到以下异常:
java.lang.IllegalArgumentException: Prepared statement has only 0 variables, 2 values provided
如何正确使用solr_query的预准备语句?
我使用的是DataStax Enterprise 4.5.3,它使用Cassandra 2.0.11.82和Solr 4.6.0.2.8.我正在使用DataStax Java驱动程序.
我有以下情况.
有一个CQL表(Cassandra 2.0.12)
CREATE TABLE article (
version timeuuid,
id timeuuid,
active boolean,
contentbody text,
contentformat text,
createdat text,
entitytype text,
externalsources list<text>,
geolat double,
geolong double,
lastcomments list<text>,
lastmodifiedat text,
lstmodbyuserid text,
lstmodbyusername text,
previewimage text,
publishedatarticle text static,
publishedatver text,
status text,
subcategory text,
subtitle text,
title text,
userid text static,
username text static,
PRIMARY KEY ((version), id)
) WITH
bloom_filter_fp_chance=0.010000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.100000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.000000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND …Run Code Online (Sandbox Code Playgroud) 我有一张如下表:
CREATE TABLE tab(
categoryid text,
id text,
name text,
author text,
desc text,
PRIMARY KEY (categoryid , id)
) WITH CLUSTERING ORDER BY (id ASC);
CREATE INDEX ON tab (name);
CREATE INDEX ON tab (author);
Run Code Online (Sandbox Code Playgroud)
当我执行以下查询时:
select * from tab ALLOW FILTERING; ---1
select * from tab where id = 'id01' ALLOW FILTERING; ---2
select * from tab where categoryid = 'cid01' ALLOW FILTERING; ---3
Run Code Online (Sandbox Code Playgroud)
三个查询的后端发生了什么?
是否会完全忽略id和categoryid上的关键索引.
感谢回复.谢谢
我为MongoDB和Cassandra构建了一个导入器.基本上导入器的所有操作都是相同的,除了最后一部分形成数据以匹配所需的cassandra表模式和想要的mongodb文档结构.与MongoDB相比,Cassandra的写入性能非常差,我认为我做错了.
基本上,我的抽象导入器类加载数据,读出所有数据并将其传递给扩展的MongoDBImporter或CassandraImporter类以将数据发送到数据库.一次针对一个数据库 - 同时没有"双重"插入C*和MongoDB.导入器在相同数量的节点上运行在同一台机器上(6).
问题:
MongoDB导入在57分钟后完成.我摄取了10.000.000个文档,我希望Cassandra的行数相同.我的Cassandra导入器现在运行2.5小时,并且只插入了5.000.000行.我将等待进口商完成并在此处编辑实际完成时间.
我如何用Cassandra导入:
我准备两个语句一旦摄取数据之前.这两个语句都是UPDATE查询,因为有时我必须将数据附加到现有列表.在开始导入之前,我的表格已完全清除.准备好的陈述一次又一次地被使用.
PreparedStatement statementA = session.prepare(queryA);
PreparedStatement statementB = session.prepare(queryB);
Run Code Online (Sandbox Code Playgroud)
对于每一行,我创建一个BoundStatement并将该语句传递给我的"自定义"批处理方法:
BoundStatement bs = new BoundStatement(preparedStatement); //either statementA or B
bs = bs.bind();
//add data... with several bs.setXXX(..) calls
cassandraConnection.executeBatch(bs);
Run Code Online (Sandbox Code Playgroud)
使用MongoDB,我可以一次插入1000个文档(这是最大的)没有问题.对于Cassandra来说,进口商com.datastax.driver.core.exceptions.InvalidQueryException: Batch too large在某些时候仅仅因为我的10个陈述而崩溃了.我正在使用此代码来构建批次.顺便说一句,我以1000,500,300,200,100,50,20批量开始,但显然它们也不起作用.然后我将其设置为10并再次抛出异常.现在我已经没有想法为什么它会破裂.
private static final int MAX_BATCH_SIZE = 10;
private Session session;
private BatchStatement currentBatch;
...
@Override
public ResultSet executeBatch(Statement statement) {
if (session == null) {
throw new IllegalStateException(CONNECTION_STATE_EXCEPTION);
}
if (currentBatch == …Run Code Online (Sandbox Code Playgroud)