我正在尝试为Cassandra DB 使用Datastax Java驱动程序API,并且我有一个具有getList函数的行对象:
public <T> List<T> getList(String name,
Class<T> elementsClass)
Returns the value of column name as a list.
Parameters:
name - the name of the column to retrieve.
elementsClass - the class for the elements of the list to retrieve.
Returns:
the value of the ith column in this row as a list of elementsClass objects. If the value is NULL, an empty list is returned (note that Cassandra makes no difference between an empty list …Run Code Online (Sandbox Code Playgroud) 我正在使用Datastax Java Driver.有一个使用相同的教程.
我不明白的是如何关闭与cassandra的连接?没有可用的密切方法,我认为我们不希望关闭会话,因为它预期是每个应用程序一个.
关心高拉夫
我在我的笔记本电脑上运行了Cassandra 1.2.11.我可以使用nodetool和连接它,cqlsh但当我尝试使用DataStax 1.0.4 Java API使用CQL 3.0进行连接时,我收到以下错误:
com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: localhost/127.0.0.1 ([localhost/127.0.0.1] Unexpected error during transport initialization (com.datastax.driver.core.TransportException: [localhost/127.0.0.1] Channel has been closed)))
at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:186)
Run Code Online (Sandbox Code Playgroud)
我使用以下代码进行连接,取自DataStax文档.我已经尝试了几个端口号,包括离开withPort()呼叫,但似乎没有任何工作.
Cluster cluster = new Cluster.Builder()
.addContactPoints("localhost")
.withPort(9160)
.build();
Run Code Online (Sandbox Code Playgroud)
使用telnet我可以验证Cassandra服务器肯定在我指定的每个端口上监听.我还验证了所有必需的库jar文件都在我的类路径中,如文档中所述.
我们有一个包含1500万条记录的表,我们的是一个10节点的cassandra集群.我们有一个列有近20个可重复的值.是否可以在此列上构建二级索引?
在使用spark工作执行Cassandra操作(两个表上的批处理执行 - 插入和更新操作)时,我得到了"所有主机都尝试查询失败 - com.datastax.driver.core.OperationTimedOutException "错误.
集群信息:
Cassandra 2.1.8.621 | DSE 4.7.1
spark-cassandra-connector-java_2.10 version - 1.2.0-rc1 | cassandra-driver-core版本 - 2.1.7
Spark 1.2.1 | Hadoop 2.7.1 => 3个节点
Cassandra 2.1.8 => 5个节点
每个节点有28 gb内存和24个内核
在寻找它的解决方案时,我遇到了一些讨论,其中说你不应该使用BATCHES.虽然我想找到这个错误的根本原因.另外,如何以及从哪里设置/获取"SocketOptions.setReadTimeout",因为此超时限制必须大于Cassandra请求超时(根据标准准则)并避免可能的错误.
是request_timeout_in_ms和SocketOptions.setReadTimeout一样吗?任何人都可以帮我这个吗?
cassandra socket-timeout-exception datastax-enterprise datastax-java-driver
我在尝试关闭一些数据共享资源(Statement,ResultSet)时遇到了麻烦.使用后,Sonar正在大声喊叫我关闭这些资源.
(关于我使用myMethod()之后的信息,我调用了一个System.exit(0))Bu无论如何,我想根据声纳来做
session.close()是不够的,因为它似乎让Statement和ResultSet.
/!\ ResultSet和Statement来自com.datastax.com.driver,并且这些close()方法不存在.(与java.sql不同)
我认为session.getCluster.close()会这样做,但我不想关闭群集.
什么是正确关闭这些资源的正确方法?
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.Statement;
public void myMethod() {
Statement statement = session.prepare("select * from .....").bind();
ResultSet rs = session.execute(statement);
// doSomethingWithThisResultSet() ...
session.close();
}
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助 !
我尝试使用Cassandra来持久化非常简单的POJO,但是使用类层次结构(许多子类,一个超类).我正在使用Java和Datastax驱动程序(以及对象映射器).
我的问题是Object Mapper似乎不能识别超类中注释的字段.
我实施的结构是:
@Table(keyspace = "...", name = "...")
public class Subclass extends Superclass {
public double x;
public double y;
public double z;
....
}
public class Superclass {
@PartitionKey(0)
@Column(name = "user_id")
public long userId;
@PartitionKey(1)
@Column(name = "device_id")
public long deviceId;
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试保存子类对象:
public static void main(String[] args) {
Subclass data = new Subclass();
data.deviceId = 123;
data.userId = 1212;
data.x = 0;
data.y = 1;
data.z = 2;
Cluster cluster;
Session session;
...
Mapper<Subclass> mapper …Run Code Online (Sandbox Code Playgroud) DataStax Java中是否存在用于Apache Cassandra的内置方法,以将来自BoundStatement的ResultSet映射到使用Object-mapping API构建的域对象Java类?
我是一个从Mapper + Accessor方法转向BoundStatement方法的新手,并希望继续使用使用Object-mapping API构建的域对象的Java类,因此我在转移到BoundStatement时对DAO方法的实现进行了微小的更改. .我希望以通用方式执行此操作,并避免迭代每个ResultSet行并为每个域对象逐个执行row.get.
使用Mapper + Accessor方法时,Result.all()可以很好地完成.找不到类似于BoundStatement方法的任何内容.
谢谢
IPVP
我正在为Apache Cassandra使用datastax java驱动程序(v.2.1.9),我想知道当我将replication_factor设置为大于节点数时会发生什么.我已经读过Cassandra允许这个操作的地方,但是当我尝试保存一些数据时应该会失败(当然这取决于写入一致性级别,但我的意思是ALL的情况).
问题是一切正常,即使我尝试保存数据,也不会抛出任何异常.为什么?
对于较旧版本的Cassandra,也许我读过的那些信息都很旧了?还有一个问题,是否真的,而不是在我向集群添加另一个节点时会发生什么?
我很惊讶以前没有提出这个问题.
假设我们在cassandra中有一个巨大的表,我们需要在其中获得估计的行数(不精确,只是近似).
显然简单select count(*) from table并不高效,可能需要很长时间.我们需要一些又脏又快的东西.
Datastax博客建议如下:
我不关心确切的数字,我可以估算一下吗?
因为Cassandra知道每个SSTable中有多少行,所以可以得到估计值.'nodetool cfstats'输出告诉您'键数(估计)'行中的这些计数.这是每个SStable中行的总和(由于使用了索引而再次近似,但默认情况下不能超过128).
我的问题:我们可以使用DataStax Enterprise Java驱动程序执行相同的操作吗?
PS我不能改变表结构或其他什么.考虑我使用遗留架构.换句话说,我对添加计数器或其他特殊字段等变通方法不感兴趣.