我运行Cassandra docker容器:
docker pull cassandra
run --name cassandra -p 9042:9042 -p 9160:9160 -d cassandra
Run Code Online (Sandbox Code Playgroud)
netstat -tpln是:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
LISTEN - tcp6 0 0 [::]:9160 [::]:*
LISTEN - tcp6 0 0 [::]:9042 [::]:*
Run Code Online (Sandbox Code Playgroud)
从本地cqlsh连接到C*是好的:
docker exec -it cassandra /bin/bash
#cqlsh
Connected to Test Cluster at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.1.1 | CQL spec 3.3.1 | Native protocol v4]
Use HELP for help.
cqlsh> show host
Connected to Test Cluster at 127.0.0.1:9042.
Run Code Online (Sandbox Code Playgroud)
我安装本地cqlsh: …
我试图通过调用session.executeAsync()
代替session.execute()
DB写入来加速我们的代码.
我们有数据库连接可能已关闭的用例,当前之前execute()
在连接丢失时抛出异常(集群中没有主机可访问).我们可以捕获这些异常,并在其他地方重试或保存数据等...
有了executeAsync()
,它看起来没有任何方法来实现这个用例 - ResultSetFuture
需要访问返回的对象来检查结果,这将失去executeAsync()
首先使用的目的...
有没有办法在executeAsync()调用的任何地方添加一个监听器(或类似的东西),它会异步通知一些其他代码,因为DB写入失败了?
这是相关的吗?Datastax 1.0.2 Java 1.7.40
导入数据时cassandra-driver(python)会出现以下错误
错误
File "cassandra.py", line 1, in <module>
from cassandra.cluster import Cluster
File "/home/vagrant/cassandra.py", line 1, in <module>
from cassandra.cluster import Cluster
ImportError: No module named cluster
Run Code Online (Sandbox Code Playgroud)
这是代码
from cassandra.cluster import Cluster
print dir(cassandra.cluster)
cluster = Cluster()
session = cluster.connect('userspace')
rows = session.execute('SELECT user_name, gender FROM users')
for user_row in rows:
print user_row.user_name, user_row.gender
Run Code Online (Sandbox Code Playgroud) 我是Datastax cassandra的新手.在经历cassandra的安装过程时.建议关闭OS的交换区域.有没有人提供原因?它会影响任何操作系统级操作吗?
谢谢您阅读此篇.我在本教程中关于安装Cassandra的第三步陷入困境:http://wiki.apache.org/cassandra/GettingStarted#Step_3:_Start_Cassandra
我只能以root身份运行此软件.(对虚构的直升机噪音大喊大叫)这似乎是运行软件的一种可怕方式.
以普通用户身份启动Cassandra服务器时,收到以下错误:
1.) 15:46:00,147 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[FILE] - openFile(/var/log/cassandra/system.log,true) call failed. java.io.FileNotFoundException: /var/log/cassandra/system.log (Permission denied)
2.) ERROR 20:46:00 Doesn't have write permissions for /var/lib/cassandra/data directory
我尝试多次更改权限,但没有任何工作.我尝试在操作系统(OS)上更改组的/var/log/cassandra/system.log
读/写权限cassandra
.我以前做的命令是,sudo chmod 664 /var/log/cassandra/system.log
.我发现此页面有助于确定如何更改权限:http://www.linux.org/threads/file-permissions-chmod.4094/
然后,我将我的用户名添加到cassandra
组中.根据我的理解运行/usr/sbin/cassandra -f
命令,因为我的用户应该允许我访问该/var/log/cassandra/system.log
文件,这将解决其中一个错误,上面的错误编号1.
尊敬,
用户
我已阅读了几篇关于Cassandra提交日志的文档,对我来说,有关这个"结构"的信息存在冲突.该图显示当发生写入时,Cassandra会写入memtable和commit日志.令人困惑的部分是此提交日志所在的位置.
我见过的图表显示了磁盘上的提交日志.但是,如果你进行更多的阅读,他们还会在内存中讨论提交日志缓冲区 - 这段内存每10秒刷新一次.
DataStax文档声明:"当发生写入时,Cassandra将数据存储在名为memtable的内存结构中,并提供可配置的持久性,它还会将写入附加到内存中的提交日志缓冲区.此缓冲区每10秒刷新一次磁盘".
他们的图表中没有任何地方显示称为提交日志缓冲区的内存结构.它们仅显示驻留在磁盘上的提交日志.
它还指出:"当发生写入时,Cassandra将数据存储在内存中的结构,memtable中,并且还将写入附加到磁盘上的提交日志中."
所以我对上述内容感到困惑.是否写入提交日志内存缓冲区,最终刷新到磁盘(我假设它也称为"提交日志"),还是写入磁盘上的memtable和commit日志?
Apache的文档说明了这一点:"相反,像其他现代系统一样,Cassandra首先通过向commitlog添加写入来提供持久性.这意味着只有commitlog需要fsync'd,如果commitlog在自己的卷上,则避免使用需要寻找,因为commitlog只是附加的.实现细节在ArchitectureCommitLog中.
Cassandra的默认配置将commitlog_sync模式设置为periodic,导致commitlog在每个commitlog_sync_period_in_ms毫秒内同步,因此如果所有副本在该时间窗口内崩溃,您可能会丢失那么多数据.
我从Apache语句中得出的结论是,仅仅因为写入的异步性质(确认缓存写入)可能会丢失数据(它甚至表示如果所有副本在刷新/同步之前崩溃,您可能会丢失数据) .
我不确定我可以从DataStax文档和图表中推断出什么,因为他们提到了两个关于提交日志的不同语句 - 一个在内存中,一个在磁盘上.
任何人都可以澄清,我认为,一个措辞不佳和相互矛盾的文档集?
我假设有一个提交日志缓冲区,因为它们都引用它(但DataStax没有在图中显示它).我认为,如何以及何时对其进行管理是理解的关键.
我正在尝试使用Datastax Academy数据建模课程中的公式计算具有任意数量的列和类型的表中每行的分区大小.
为了做到这一点,我需要知道一些常见的Cassandra数据类型的"字节大小".我试图谷歌这个,但我得到了很多建议,所以我很困惑.
我想知道的字节大小的数据类型是:
当然,对于Cassandra中的数据类型大小,也应该理解任何其他考虑因素.
添加更多信息,因为它似乎令人困惑,因为我只想估计"最糟糕的磁盘使用情况",数据会占用任何压缩和Cassandra在幕后完成的其他优化.
我正在关注Datastax学院课程DS220(参见最后的链接)并实施公式,并将使用此答案中的信息作为该公式中的变量.
https://academy.datastax.com/courses/ds220-data-modeling/physical-partition-size
我的spring boot Web应用程序通过Datastax客户端使用Cassandra DB,连接如下:
public CassandraManager(@Autowired CassandraConfig cassandraConfig) {
config = cassandraConfig;
cluster = Cluster.builder()
.addContactPoint(config.getHost())
.build();
session = cluster.connect(config.getKeyspace());
}
Run Code Online (Sandbox Code Playgroud)
当我运行单元测试时,spring boot应用程序尝试加载CassandraManager Bean并连接到Cassandra DB,而不是单元测试,因为我不需要它.我收到以下错误:[localhost/127.0.0.1:9042] Cannot connect)
有没有办法避免加载这个Cassandra Manager Bean来运行我的UT,因为他们不需要连接到数据库?这样做是一种好习惯吗?
刚刚安装(从下载的dmg上的应用程序复制)我的Mac上的DevCenter 1.6,运行macO Sierra 10.12.6并安装了jdk 8u152.该应用程序加载一个UI(启动屏幕,然后在窗口中的几个复选框,以便开始)但UI被冻结(启动屏幕仍然存在).没有响应鼠标点击或键盘.也无法单击菜单栏中的应用程序名称.但应用程序未被活动监视器标记为"未响应".
到目前为止我已经尝试过 -
任何想法我能在这做什么?
我在之前的Mac上使用相同的配置/操作系统版本运行DevCenter,但是稍微旧的JDK,从来没有遇到过问题.
我有一个带有相关物化视图的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'
有一些代码生成正在进行,所以它似乎没有正确生成,但我无法弄清楚是什么.
我找到的唯一有用的文档就是这里和这里,但似乎都没有提供帮助.
我究竟做错了什么?