我想知道com.datastax.cassandra:cassandra-driver-core:2.0.0-beta2是否可以与org.apache.cassandra一起使用:cassandra-all:1.2.1.我正在使用cassandra-maven-plugin:1.2.1-1(使用org.apache.cassandra:cassandra-all:1.2.1),添加
start_native_transport: true
native_transport_port: ${cassandra.nativePort}
Run Code Online (Sandbox Code Playgroud)
到yaml插件属性.我可以成功telnet到端口.
但是,当我尝试通过以下代码连接时,
// Ports.NATIVE has the same value as "${cassandra.nativePort}" above
Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1")
.withPort(Ports.NATIVE).build();
Session session = cluster.connect();
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /127.0.0.1 (com.datastax.driver.core.ConnectionException: [/127.0.0.1] Unexpected error during transport initialization (com.datastax.driver.core.TransportException: [/127.0.0.1] Unexpected exception triggered (com.datastax.driver.core.exceptions.DriverInternalError: Server response from unsupported protocol version: 1))))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:179)
at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:77)
at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:868)
at com.datastax.driver.core.Cluster$Manager.newSession(Cluster.java:888)
at com.datastax.driver.core.Cluster$Manager.access$200(Cluster.java:792)
at com.datastax.driver.core.Cluster.connect(Cluster.java:155)
Run Code Online (Sandbox Code Playgroud)
我认为它的关键在于Server response from unsupported protocol version: 1.
这是否意味着2.0.0-beta2驱动程序不能与Cassandra 1.2.1一起使用?驱动程序/服务器兼容性矩阵在哪里? …
我正在尝试编写一个简单的更新查询 - 更新表集col1 = val1,col2 = val2其中col3 = val3; 您能否提供一个使用Query builder API在Cassandra中编写简单UPDATE的示例?
我有一个Cassandra的单节点实例.我一直在使用批处理语句使用Java中的datastax驱动程序将大量数据插入其中.
在插入过程中的某个点之后,我遇到了NoHostAvailableException,但是我仍然可以通过cql和execute语句连接到节点.Cassandra日志警告我,批量太大,当我将大小降低到建议的水平时,我仍然得到相同的错误,并且Cassandra日志文件中似乎没有其他错误.
之前有没有人遇到过这个错误,我觉得cassandra.yaml中有一些我不知道的东西.
我正在尝试将Scala Map(我正在尝试转换为java.util.Map)存储到cassandra 2.1.8中.
数据结构如下所示:
Map[String -> Set[Tuple[String, String, String]]]
Run Code Online (Sandbox Code Playgroud)
我创建了如下表:
CREATE TABLE mailing (emailaddr text PRIMARY KEY, totalmails bigint, emails map<text, frozen<set<tuple<text, text, text>>>>);
Run Code Online (Sandbox Code Playgroud)
我首先尝试将Set转换为java Set:
def emailsToCassandra(addr: emailAddress, mail: MailContent, number: Int) = {
println("Inserting emails into cassandra")
mail.emails.foreach(result =>
setAsJavaSet(result._2)
)
Run Code Online (Sandbox Code Playgroud)
然后我构建查询并尝试将Map转换为java Map:
val query = QueryBuilder.insertInto("emails", "mailing")
.value("emailAddr", addr.toString())
.value("totalmails", number)
.value("emails", mapAsJavaMap(mail.emails))
session.executeAsync(query)
Run Code Online (Sandbox Code Playgroud)
我回来了:
java.lang.IllegalArgumentException: Value 1 of type class scala.collection.convert.Wrappers$MapWrapper does not correspond to any CQL3 type
Run Code Online (Sandbox Code Playgroud)
我也试过这样做:
val lol = mail.emails.asInstanceOf[java.util.Map[String, java.util.Set[Tuple3[String, String, String]]]] …Run Code Online (Sandbox Code Playgroud) 我有app1.war和app2.war部署在同一个tomcat jvm中.这两个应用程序都有自己的上下文xmls - app1.xml和app2.xml.这两个应用程序都包含连接到Cassandra的数据存储驱动程序依赖项.它们在单独部署时运行良好.但是当两者都部署在同一个jvm中时,我在日志中看到了以下JMX异常:
[DEBUG] [TokenId=] [2015-07-29 20:54:35.177] [DefaultListableBeanFactory] - [Eagerly caching bean 'cluster' to allow for resolving potential circular references]
[DEBUG] [TokenId=] [2015-07-29 20:54:35.191] [DefaultListableBeanFactory] - [Invoking afterPropertiesSet() on bean with name 'cluster']
[DEBUG] [TokenId=] [2015-07-29 20:54:35.199] [SystemProperties] - [com.datastax.driver.NEW_NODE_DELAY_SECONDS is undefined, using default value 1]
[DEBUG] [TokenId=] [2015-07-29 20:54:35.199] [SystemProperties] - [com.datastax.driver.NON_BLOCKING_EXECUTOR_SIZE is undefined, using default value 16]
[DEBUG] [TokenId=] [2015-07-29 20:54:35.205] [SystemProperties] - [com.datastax.driver.NOTIF_LOCK_TIMEOUT_SECONDS is undefined, using default value 60]
[WARN ] [TokenId=] [2015-07-29 20:54:35.217] [FrameCompressor] - …Run Code Online (Sandbox Code Playgroud) tomcat spring-mvc cassandra datastax-java-driver spring-data-cassandra
我正在使用PreparedStatement和BoundStatement来执行一些Cassandra查询.问题是,我试图对这些使用限制.这就是我所拥有的:
selectByDatasetIdAndTimePreparedStatement = getSession().prepare(
QueryBuilder.select()
.all()
.from(KEYSPACE_NAME, TABLE_NAME)
.where(QueryBuilder.eq(AFFILIATION_ID_COLUMN, QueryBuilder.bindMarker()))
.and(QueryBuilder.eq(DATASET_ID_COLUMN, QueryBuilder.bindMarker()))
.and(QueryBuilder.lte(TIME_COLUMN, QueryBuilder.bindMarker()))
//.limit(QueryBuilder.bindMarker())
);
Run Code Online (Sandbox Code Playgroud)
每当我需要运行查询时,我都会调用此函数:
public Statement buildSelectByDatsetIdAndTimePreparedStatment(String affiliationId, String datasetId, Long time, int limit)
{
BoundStatement boundStatement = selectByDatasetIdAndTimePreparedStatement
.bind()
.setString(AFFILIATION_ID_COLUMN, affiliationId)
.setString(DATASET_ID_COLUMN, datasetId)
.setLong(TIME_COLUMN, time);
databaseManager.applyReadStatementsConfiguration(boundStatement);
return boundStatement;
}
Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于第一个代码段中没有limit子句的情况.我不知道如何在第二个片段中指定限制.我不想使用字符串之类的东西
databaseManager.getSession().execute("SELECT * FROM myTable where ... limit 10);
Run Code Online (Sandbox Code Playgroud)
有没有办法使用BoundStatement来做到这一点?我没有看到类似BoundStatement.limit()或setLimit()的内容.
谢谢,塞尔班
我有6个节点集群,复制因子3.我使用常规一致性级别作为QUORUM,串行一致性级别作为SERIAL.
我有一个条件写查询(IF EXIST).如果我使用如下所示的datastax java驱动程序将normal和serial都设置为此语句,会发生什么.
//preparedStatement has a conditional query.
BoundStatement boundStatement = new BoundStatement(preparedStatement);
boundStatement.setSerialConsistencyLevel(ConsistencyLevel.SERIAL);
//is this required??
boundStatement.setConsistencyLevel(ConsistencyLevel.QUORUM);
Run Code Online (Sandbox Code Playgroud)
我的疑问:
我在下面提到的链接,但它没有解释太多 https://docs.datastax.com/en/cassandra/3.x/cassandra/dml/dmlConfigSerialConsistency.html
学习阶段定义了在发生轻量级写入时将立即完成哪些读取操作使用正常的一致性级别.
请简单解释一下.
Datastax的cassandra的java驱动程序提供了Accessor.请参考这里
参考下面的例子,他们是分批进行分页和获取记录还是存在查询超时的风险?
@Accessor
public interface UserAccessor {
@Query("SELECT * FROM user")
Result<User> getAll();
}
Run Code Online (Sandbox Code Playgroud)
当我说分页时,他们会在内部做类似下面的事情
Statement stmt = new SimpleStatement("SELECT * FROM user");
stmt.setFetchSize(24);
ResultSet rs = session.execute(stmt);
Run Code Online (Sandbox Code Playgroud) 我想在UI上实现分页,所以我像这样设置fetchSize:
boundStatement.setFetchSize(20)
Run Code Online (Sandbox Code Playgroud)
但是setFetchSize()不受尊重.我的表目前有400行,检索到所有400行.当我使用时检索下一组行
rs.getExecutionInfo().getPagingState();
Run Code Online (Sandbox Code Playgroud)
然后检索接下来的380行.因此,正确设置和检索分页状态,但为什么驱动程序从表中检索所有400行,如何避免这种情况或仅检索400
部分代码:
....
....
// "SELECT * FROM abc.sometable"
BoundStatement boundStatement = pStmt.bind();
boundStatement.setFetchSize(20);
if (pagingState != null) {
boundStatement.setPagingState(PagingState.fromString(pagingState));
}
ResultSet rs = session.execute(boundStatement);
PagingState nextPage = rs.getExecutionInfo().getPagingState();
int remaining = rs.getAvailableWithoutFetching();
List<?> list = new ArrayList<>();
for (Row row : rs) {
list.add(getValidObjectFromRow(row));
}
....
Run Code Online (Sandbox Code Playgroud)
Cassandra版本 - 3.7和cassandra驱动程序版本 - 3.1.0
谢谢!
cluster = Cluster.builder()
.addContactPoint("localhost")
.build();
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/util/concurrent/AsyncFunction
Run Code Online (Sandbox Code Playgroud)
我在我的路径中唯一的罐子是2 cassandra java驱动程序jars cassandra-driver-core-2.1.10.3.jar和cassandra-driver-mapping-2.1.10.3.jar
谢谢