我安装了一个3节点Cassandra (2.0.3)群集,这是我的表格:
CREATE TABLE user (
id text,
phone text,
name text,
email text,
PRIMARY KEY (phone, id)
);
我用datastax java驱动
这是我创建的用户对象:
User user = new User();
user.setId(UUIDs.timeBased().toString());
user.setEmail(null);
user.setName("test-user");
user.setPhone(Credential.MD5.digest("user-" + i));
我创建了其中的10k - i是我的用户数组中的用户的索引。我不想使用批量插入,而是模拟插入多个记录的压力。这是我的代码:
Cluster cluster = Cluster.builder()
.addContactPoints(CASSANDRA_CLUSTER_ADDRESSES)
.build();
final Session session = cluster.connect(keyspaceName);
final ThreadPoolExecutor tpe = (ThreadPoolExecutor) Executors.newCachedThreadPool();
for (final User user : users) {
tpe.execute(new Runnable() {
@Override
public void run() {
PreparedStatement ps =
session.prepare("INSERT INTO user (id, phone, name, email) VALUES (?, ?, ?, ?)");
BoundStatement bs = new BoundStatement(ps);
bs.bind(
user.getId(),
user.getPhone(),
user.getName(),
user.getEmail(),
);
session.executeAsync(bs);
}
});
}
tpe.shutdown();
tpe.awaitTermination...
有人能指给我哪里吗?
在计算记录数量时(使用cqlsh)我从来没有超过4k(10k)
您正在使用一个未绑定的线程池,这意味着所有的写操作几乎同时执行。可能你达到了性能极限,Cassandra用写超时来回答。尝试减少并发写入的数量,并检查执行的结果。例如
final ThreadPoolExecutor tpe = (ThreadPoolExecutor) Executors.newFixedThreadPool(20);
...
ResultSetFuture future = session.executeAsync(bs);
try {
future.getUninterruptibly();
} catch (Exception e) {
e.printStackTrace();
}
只有一个服务器正在进行写入(使用opscenter write-Request/all-node图)-我看不出原因:据我所知,密钥足够随机……
主键被定义为PRIMARY KEY(phone, id)
。这意味着phone
是分区键,而id
只是集群键。但是如果手机值确实是不同的MD5摘要,这应该分布在所有节点上。
如何重写以使用自己的函数创建模式。我希望能够设置一个Cassandra实例使用cql脚本,我选择在运行时。 当在中创建时,我尝试重写。这将导致cqllib失败 这似乎与cqlib创建代理的方式有关:超类没有空构造函数,但没有给出参数
当我使用JavaMailSender发送带有附件的电子邮件时,它总是失败,并引发以下异常: 这是我的密码
我们最近开始了使用Scala、Spark和Cassandra的大数据项目,我对所有这些技术都是新手。我试图做简单的任务写到和读从卡桑德拉表。如果将属性名和列名都保留为小写或snake大小写(unserscores)就可以实现这一点,但我希望在scala代码中使用camel大小写。在Scala中使用camel case格式,在Cassandra中使用snake case格式,有没有更好的方法来实现这
我正在尝试通过PySpark向cassandra表写入两行。我使用datastax cassandra连接器,方法是使用以下命令启动PySpark2 shell: 我使用以下代码创建了一个dataframe:
我有cassandra单片应用程序,我想写在高速率从队列中读取一些有效载荷。Cassandra集群有3个节点。当我开始并行处理大量消息(通过生成线程)时,我得到以下异常 我将CQLsession创建为bean 我将此CqlSession注入到映射器和其他类中以运行查询 在我的datastax驱动程序中,我给了3个节点的ip作为联系点,我是否需要在CQLsession创建/或我的cassandra节
我的要求是尽可能的实时,这似乎离得很远。生产环境大约每3秒有400个事件。 是否需要对Cassandra中的YAML文件进行调优,或者对cassandra-connector本身进行任何更改