Tag: datastax java driver

无法让Cassandra在Basic Applcation中工作

这是我当前的错误: com.datastax.driver.core.exceptions.NoHostAvailableException: All host(s) tried for query failed (tried: /127.0.0.1 (com.datastax.driver.core.TransportException: [/127.0.0.1] Unexpected exception triggered (java.lang.NoClassDefFoundError: Could not initialize class com.datastax.driver.core.Codec))) com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:186) com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:81) com.datastax.driver.core.Cluster$Manager.init(Cluster.java:773) com.datastax.driver.core.Cluster$Manager.access$100(Cluster.java:706) com.datastax.driver.core.Cluster.(Cluster.java:79) com.datastax.driver.core.Cluster.(Cluster.java:66) com.datastax.driver.core.Cluster$Builder.build(Cluster.java:687) com.t2.claims.persistence.CassandraClient.getOrCreateCluster(CassandraClient.java:12) com.t2.claims.persistence.CassandraClient.getOrCreateSession(CassandraClient.java:18) com.t2.claims.dao.AlertDaoImpl.findAll(AlertDaoImpl.java:25) com.t2.claims.controllers.AlertIndexController.doAfterCompose(AlertIndexController.java:36) org.zkoss.zk.ui.impl.UiEngineImpl.doAfterCompose(UiEngineImpl.java:529) …. 我觉得我正在导入我需要的所有可用的人工制品(以及许多我不想试图解决这个问题)。 我只是不明白为什么这不起作用? 这是我的pom.xml的完整性: 4.0.0 com.t2.claims T2ClaimsPortal war 1.0-SNAPSHOT T2ClaimsPortal 3.2.0.RELEASE 6.0.2.1 2.4 1.2.1 1.3.1 1.1.1 spring-milestone Spring Maven MILESTONE Repository http://maven.springframework.org/milestone […]

如何在不使用Datastax Studio但通过Java创建图形及其模式的情况下?

我试图通过java创建我与DSE Graph的第一个连接.. public static void main(String args[]){ DseCluster dseCluster = null; try { dseCluster = DseCluster.builder() .addContactPoint(“192.168.1.43”) .build(); DseSession dseSession = dseCluster.connect(); GraphTraversalSource g = DseGraph.traversal(dseSession, new GraphOptions().setGraphName(“graph”)); GraphStatement graphStatement = DseGraph.statementFromTraversal(g.addV(“test”)); GraphResultSet grs = dseSession.executeGraph(graphStatement.setGraphName(“graph”)); System.out.println(grs.one().asVertex()); } finally { if (dseCluster != null) dseCluster.close(); } } 起初我得到的“图形”不存在..我必须通过DataStax Studio创建与特定图形的连接,因为它不在那里。 现在我需要在模式中放置标签,属性等。我知道如何在工作室中进行操作( https://docs.datastax.com/en/latest-dse/datastax_enterprise/graph/using/createSchemaStudio.html )但我想在代码中这样做。 如何在Java中访问模式对象,以便我可以进行以下更改: schema.config().option(‘graph.schema_mode’).set(‘Development’) schema.vertexLabel(‘test’).create() […]

如何在Cassandra中执行批处理语句和LWT作为事务

我有两张下面的模型表: CREATE TABLE IF NOT EXISTS INV ( CODE TEXT, PRODUCT_CODE TEXT, LOCATION_NUMBER TEXT, QUANTITY DECIMAL, CHECK_INDICATOR BOOLEAN, VERSION BIGINT, PRIMARY KEY ((LOCATION_NUMBER, PRODUCT_CODE))); CREATE TABLE IF NOT EXISTS LOOK_INV ( LOCATION_NUMBER TEXT, CHECK_INDICATOR BOOLEAN, PRODUCT_CODE TEXT, CHECK_INDICATOR_DDTM TIMESTAMP, PRIMARY KEY ((LOCATION_NUMBER), CHECK_INDICATOR, PRODUCT_CODE)) WITH CLUSTERING ORDER BY (CHECK_INDICATOR ASC, PRODUCT_CODE ASC); 我有一个业务操作,我需要更新表中的CHECK_INDICATOR和INV表中的QUANTITY。 由于CHECK_INDICATOR是LOOK_INV表中键的一部分,我需要先删除该行并插入一个新行。 以下是我需要以批处理方式执行的三个操作(要么所有操作都要成功执行,要么不执行任何操作) […]

Datastax cassandra驱动程序提供有关主机状态的错误元数据信息

我有一个带有2个DC的集群,每个DC包含2个节点。 DC1: 192.168.60.81 192.168.60.82 DC2: 192.168.60.242 192.168.60.247 应用程序连接到192.168.60.81,因此应用程序的本地DC是DC1。 情况1: 最初当所有节点都启动时,当我尝试获取cluster.metadata.allHosts ,它会向我提供有关主机状态为UP的信息。 情况2: 当本地数据中心(DC1)中的任何节点上升或下降时, cluster.metadata.allHosts会为我提供正确的主机状态信息。 问题: 当远程数据中心(DC2)中的任何节点发生故障时, cluster.metadata.allHosts主机状态信息正确地显示为DOWN。 但是当同一节点重新启动时,仍然是cluster.metadata.allHosts将主机状态信息作为DOWN提供给我。 我在Host.StateListener中注册,以查看是否为远程DC中的节点触发了事件。 但不幸的是,当远程DC中的节点重新启动时,它也永远不会通知。 任何帮助,将不胜感激。 所有节点中的Cassandra版本:2.1.4 Datastax java驱动程序版本:2.1.9

使用CQL 3.0在集合上创建自定义索引

我一直在查看CQL 3.0 数据建模文档 ,该文档描述了带有标签的列系列歌曲,如下所示: CREATE TABLE songs ( id uuid PRIMARY KEY, title text, tags set ); 我想获得所有具有特定标签的歌曲的列表,因此我需要添加适当的索引。 我可以很容易地在title列上创建一个索引,但是如果我尝试索引一个集合的tags列,就像这样: CREATE INDEX ON songs ( tags ); 我从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) 根据JIRA问题CASSANDRA-4511 ,看起来这可以在更高版本的Cassandra(2.1)中修复。 我目前正在使用Apache Cassandra 1.2.11,但不想升级。 根据问题CASSANDRA-5615 ,在Cassandra 1.2.6中,对集合的自定义索引有支持。 问题是,唯一可用的文档指出: Cassandra支持创建自定义索引,该索引供内部使用且超出本文档的范围。 但是,它确实建议以下语法: […]

Datastax java驱动程序3.0.0未找到枚举注释

希望我正在阅读文档: http : //docs.datastax.com/en/developer/java-driver/3.0/java-driver/reference/crudOperations.html 。 枚举注释 如果您的类包含枚举类型字段,则使用枚举注释。 我有一个Java枚举,我想使用@Enumerated注释,但我似乎无法在3.0.0版本的驱动程序中找到它,它出现在2.1.9中。 $ find . -type f -name \*.jar|while read i; do echo ====== $i =====; jar -tf $i|grep Enumerated; done ====== ./cassandra-driver-core/2.1.4/cassandra-driver-core-2.1.4-javadoc.jar ===== ====== ./cassandra-driver-core/2.1.4/cassandra-driver-core-2.1.4-sources.jar ===== ====== ./cassandra-driver-core/2.1.4/cassandra-driver-core-2.1.4.jar ===== ====== ./cassandra-driver-core/2.1.5/cassandra-driver-core-2.1.5.jar ===== ====== ./cassandra-driver-core/2.1.7.1/cassandra-driver-core-2.1.7.1.jar ===== ====== ./cassandra-driver-core/2.1.9/cassandra-driver-core-2.1.9.jar ===== ====== ./cassandra-driver-core/3.0.0/cassandra-driver-core-3.0.0-sources.jar ===== ====== ./cassandra-driver-core/3.0.0/cassandra-driver-core-3.0.0.jar ===== ====== ./cassandra-driver-dse/2.1.5/cassandra-driver-dse-2.1.5.jar ===== ====== […]

如何使用datastax java驱动程序有效地使用批量写入cassandra?

我需要使用Datastax Java驱动程序以批量写入Cassandra,这是我第一次尝试使用批处理与datastax Java驱动程序,所以我有一些困惑 – 下面是我的代码,我在其中尝试创建一个Statement对象并将其添加到Batch并将ConsistencyLevel设置为QUORUM。 Session session = null; Cluster cluster = null; // we build cluster and session object here and we use DowngradingConsistencyRetryPolicy as well // cluster = builder.withSocketOptions(socketOpts).withRetryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE) public void insertMetadata(List listAddress) { // what is the purpose of unloggedBatch here? Batch batch = QueryBuilder.unloggedBatch(); try { for (AddressMetadata data : listAddress) […]

主线程java.lang.NoClassDefFoundError中的exception

在线程“main”java.lang.NoClassDefFoundError:com / google / common / util / concurrent / FutureCallback中获取错误exception,同时在代码下运行。 请告知我缺少哪个Jar文件。 我正在从Eclipse IDE执行 package Datastax; import com.datastax.driver.core.Cluster; import com.datastax.driver.core.Host; import com.datastax.driver.core.Metadata; import com.datastax.driver.core.Session; public class DataStaxPOC { private Cluster cluster; public void connect(String node) { cluster = Cluster.builder().addContactPoint(node).build(); Metadata metadata = cluster.getMetadata(); System.out.printf(“Connected to cluster: %s\n”, metadata.getClusterName()); for ( Host host : metadata.getAllHosts() ) […]

Cassandra使用TokenAwarePolicy和shuffleReplicas进行负载均衡

我们有6个节点集群,我们将所有内容部署到具有3个可用区的AWS上的一个区域。 我们正在使用Ec2Snitch,它应该在每个可用区域中分配一个副本。 我们使用DataStax Java驱动程序。 执行写入和读取的服务器分布在与节点相同的可用区域中(AZ服务器为1个服务器)。 我们想要实现的是最佳的读取性能,对于我们来说,写入并不是那么重要,因为我们需要编写数据但不是必需的快速。 我们使用复制因子3,但读取和写入一致性级别为ONE。 我们正在调查TokenAwarePolicy中的 shuffle副本。 在DataStax Java Driver中可以说它可以提高读取性能但减少写入分配。 第一个问题是关于shuffleReplicas实现,我遵循newQueryPlan方法的实现,我想到的是对于副本LinkedHashSet使用意味着主副本将始终优先于非主副本。 // Preserve order – primary replica will be first Set replicas = new LinkedHashSet(); 只是为了确认,这意味着如果我们将shuffleReplicas设置为false,那么驱动程序将始终更喜欢连接到主副本所在的节点,将其作为协调器,这可能会产生热点? 第二个问题是关于将连接分离到集群的想法,对于写入,使用shuffleReplicas on true,它将在集群中均匀地分配令牌,并且读取使用TokenAwarePolicy和false的shuffleReplicas以获得最佳可能读取,这个想法是否可行,你看到了吗?有什么问题吗? 我们希望始终从相同的可用区读取数据,以便在读取数据时获得最大可能的速度。 这是更好的方法,然后将shuffleReplicas为true,让集群均匀地选择协调器。 想法也可以使用WhiteListPolicy ,它将仅选择从同一个AZ到放置在该AZ中的服务器的节点,这将导致本地读取但可以创建热点。

使用DataStax Java驱动程序1.0.4使用CQL连接到Cassandra时出现exception

我在我的笔记本电脑上运行了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) 我使用以下代码进行连接,取自DataStax文档。 我尝试了几个端口号,包括离开withPort()调用,但似乎没有任何工作。 Cluster cluster = new Cluster.Builder() .addContactPoints(“localhost”) .withPort(9160) .build(); 使用telnet我可以validationCassandra服务器肯定在我指定的每个端口上监听。 我还validation了所有必需的库jar文件都在我的类路径中,如文档中所述。