我打算使用Datastax Java驱动程序写入Cassandra ..我主要感兴趣的是Datastax java驱动程序Batch Writes和Asycnhronous功能,但是我无法获得任何可以解释如何在我的下面使用Datastax的代码中加入这些功能的教程Java驱动程序..
/**
* Performs an upsert of the specified attributes for the specified id.
*/
public void upsertAttributes(final String userId, final Map<String, String> attributes, final String columnFamily) {
try {
// make a sql here using the above input parameters.
String sql = sqlPart1.toString()+sqlPart2.toString();
DatastaxConnection.getInstance();
PreparedStatement prepStatement = DatastaxConnection.getSession().prepare(sql);
prepStatement.setConsistencyLevel(ConsistencyLevel.ONE);
BoundStatement query = prepStatement.bind(userId, attributes.values().toArray(new Object[attributes.size()]));
DatastaxConnection.getSession().execute(query);
} catch (InvalidQueryException e) {
LOG.error("Invalid Query Exception in DatastaxClient::upsertAttributes "+e);
} catch (Exception e) …Run Code Online (Sandbox Code Playgroud) 我的Java代码如下:
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Session;
public class CustomerController {
public void execute() {
Cluster cluster = Cluster.builder()
.addContactPoints("172.16.11.126", "172.16.11.130")
.withPort(9042)
.build();
Session session = cluster.connect();
String command = "drop keyspace if exists bookstore";
session.execute(command);
cluster.close();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,我收到以下错误:
线程"main"中的异常com.datastax.driver.core.exceptions.NoHostAvailableException:所有尝试查询的主机都失败了(试过:/172.16.11.130(com.datastax.driver.core.TransportException:[/172.16.11.130] ]无法连接),/ 177.2.11.126(com.datastax.driver.core.TransportException:[/172.16.11.126]无法连接))
在com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:195)
at Com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:78)
位于com.datastax.driver.core.Cluster $ Manager.init(Cluster.java:1029)
com.datastax.driver.core.Cluster. init(Cluster.java:120)
at com.datastax.driver.core.Cluster.connect(Cluster.java:197)
com.pragatisoftware.datastax99.app.CustomerController.execute(CustomerController.java:12)
at com.pragatisoftware .datastax99.app.Application.run(Application.java:10)
at com.pragatisoftware.datastax99.app.Application.main(Application.java:6)
环境信息:
在cassandra.yaml中:
native_transport_port: 9042
Run Code Online (Sandbox Code Playgroud)
Cassandra在上面提供的两个IP地址(172.16.11.130和172.16.11.126)上运行,我可以使用CQLSH连接到这两台机器.
顺便说一下,使用Cassandra 2.0.9在Windows机器上运行相同的代码(具有适当的IP地址).
我正在对具有500000行的表进行读取和更新查询,并且在处理大约300000行之后有时会低于错误,即使没有节点关闭也是如此.
在一致性ONE的读取查询期间的Cassandra超时(需要1个响应但仅响应0个副本)
基础架构细节:
拥有5个Cassandra节点,5个spark和3个Hadoop节点,每个节点有8个内核和28 GB内存,Cassandra 复制因子为3.
卡桑德拉2.1.8.621 | DSE 4.7.1 | Spark 1.2.1 | Hadoop 2.7.1.
Cassandra配置:
read_request_timeout_in_ms (ms): 10000
range_request_timeout_in_ms (ms): 10000
write_request_timeout_in_ms (ms): 5000
cas_contention_timeout_in_ms (ms): 1000
truncate_request_timeout_in_ms (ms): 60000
request_timeout_in_ms (ms): 10000.
Run Code Online (Sandbox Code Playgroud)
我通过将read_request_timeout_in_ms(ms)增加到20,000来尝试相同的工作,但它没有帮助.
我正在对两张桌子进行查询.下面是其中一个表的create语句:
创建表:
CREATE TABLE section_ks.testproblem_section (
problem_uuid text PRIMARY KEY,
documentation_date timestamp,
mapped_code_system text,
mapped_problem_code text,
mapped_problem_text text,
mapped_problem_type_code text,
mapped_problem_type_text text,
negation_ind text,
patient_id text,
practice_uid text,
problem_category text,
problem_code text,
problem_comment text,
problem_health_status_code text,
problem_health_status_text text,
problem_onset_date …Run Code Online (Sandbox Code Playgroud) 我需要一些添加new columns到我existing column_family/table的卡珊德拉 我可以像这样添加单列:
ALTER TABLE keyspace_name.table_name ADD column_name cql_type;
Run Code Online (Sandbox Code Playgroud)
我可以使用单个查询添加所有新列吗?如果是,如何使用cql和datastax cassandra driver?
我有一个带有相关物化视图的cassandra表.
主键是uuid类型的单个id,我没有排序键.我们称之为my_table_id.此表包含related_id我要用于搜索的内容.
然后我有一个定义为该表的物化视图
PRIMARY KEY (related_id, my_table_id) WITH CLUSTERING ORDER BY (my_table_id ASC)
Run Code Online (Sandbox Code Playgroud)
PS:我意识到这是在Cassandra中分区数据的错误方法,但不幸的是,这段代码是继承的.
我在我的java代码中定义了我的表:
@Table(table = "my_table")
public class MyTableType {
@PartitionKey
@Column("my_table_id")
@Codec(MyIdCassandraConverter.class)
CustomUUIDType myTableId;
@Column("related_id")
@Codec(MyRelatedIdCassandraConverter.class)
MyRelatedId relatedId;
(...)
}
Run Code Online (Sandbox Code Playgroud)
这两个自定义类型只是UUID周围的包装器.再次,继承.
我的物化视图定义为:
@MaterializedView(baseEntity = MyTableType.class, view = "my_table_by_related_id")
public class MyTableTypeByRelatedId {
@PartitionKey
@Column("related_id")
@Codec(MyRelatedIdCassandraConverter.class)
MyRelatedId relatedId;
@ClusteringColumn
@Column("my_table_id")
@Codec(MyIdCassandraConverter.class)
CustomUUIDType myTableId;
}
Run Code Online (Sandbox Code Playgroud)
代码似乎生成正确,但是当我启动Spring Boot应用程序时,我得到:
错误:java:找不到视图类'mypackage.MyTableTypeByRelatedId'的基本实体类'mypackage.MyTableType'错误:java:解析时出错:找不到视图类'mypackage.MyTableTypeByRelatedId'的基本实体类'mypackage.MyTableType'
有一些代码生成正在进行,所以它似乎没有正确生成,但我无法弄清楚是什么.
我找到的唯一有用的文档就是这里和这里,但似乎都没有提供帮助.
我究竟做错了什么?
com.datastax.driver.core.PreparedStatement实例应该是应用程序中的单例吗?
如果是这样,如果连接丢失会发生什么?PreparedStatement是否无效并且必须采取手动操作来"重新制定"?
PreparedStatement用法的一个简单例子(除了准备+在同一方法中执行)将是辉煌的!
prepared-statement cassandra datastax-enterprise datastax-java-driver
我只是将这个作为解决方案发布给那些在Glassfish 4上通过Maven部署使用Datastax的Java驱动程序时遇到错误的人.
正如在Datastax的网站上写的那样,驱动程序的依赖性是:
<dependency>
<groupId>com.datastax.cassandra</groupId>
<artifactId>cassandra-driver-core</artifactId>
<version>1.0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
不幸的是,如果你通过Maven将它部署到Glassfish 4,它会抛出org.glassfish.deployment.common.DeploymentException:CDI部署失败......就像下面这样:
org.glassfish.deployment.common.DeploymentException: CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [Set<Service>] with qualifiers [@Default] at injection point [[BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject com.google.common.util.concurrent.ServiceManager(Set<Service>)]
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:225)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:328)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:493)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:356)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at …Run Code Online (Sandbox Code Playgroud) cassandra maven datastax-enterprise glassfish-4 datastax-java-driver
我正在AWS上运行双节点Datastax AMI集群.昨天,卡桑德拉开始拒绝一切的联系.系统日志没有显示.经过大量的修补,我发现提交日志已经填满了分配的挂载上的所有磁盘空间,这似乎导致连接拒绝(删除了一些提交日志,重新启动并且能够连接).
我在使用DataStax AMI 2.5.1和Cassandra 2.1.7
如果我决定从头开始擦除并重新启动所有内容,我该如何确保不再发生这种情况?
我尝试阅读有关数据存储博客和文档但未找到任何具体内容
有没有办法让Cassandra中的2个表属于同一个分区?例如:
CREATE TYPE addr (
street_address1 text,
city text,
state text,
country text,
zip_code text,
);
CREATE TABLE foo (
account_id timeuuid,
data text,
site_id int,
PRIMARY KEY (account_id)
};
CREATE TABLE bar (
account_id timeuuid,
address_id int,
address frozen<addr>,
PRIMARY KEY (account_id, address_id)
);
Run Code Online (Sandbox Code Playgroud)
在这里,我需要确保这两个表/ CF都将存在于同一个分区,对于同一个account_id,这两组数据都可以从同一个节点获取
任何指针都非常感谢.
此外,如果有人在使用UDT(用户定义类型)方面有一些经验,我想了解向后兼容性如何工作.如果我修改"addr"UDT以获得更多属性(例如zip_code2 int和name text),具有这些属性的旧行如何工作?它甚至兼容吗?
谢谢
cassandra datastax-enterprise cql3 datastax-java-driver datastax