是否可以在不停止节点的情况下检查 SSTable 或 SSTables 中的墓碑数量(使用 SSTable 工具时)?
谁能解释一下 TTL 是如何工作的
对于 TWCS,我看到这个过程是这样的:
- 在时间窗口 1 内,我们有带有一些 ttl 的数据(在 SSTable1 中)
- 然后在时间窗口 N 内,来自 SSTable1 的数据的 ttl 已过期
- 它创建了一个用 SSTableN 编写的墓碑女巫?
但是,如果 SSTable1 和 SSTableN 由于来自不同的时间窗口而无法压缩,如何删除 SSTable1?
来自文档:TWCS 的主要动机是通过时间戳分隔磁盘上的数据,并允许完全过期的 SSTables 更有效地删除
来自文档:一旦 TTL 过期,数据将转换为墓碑,该墓碑至少保留 gc_grace_seconds
(转换?)
nodetool <options> upgradesstables
如果我计划将 Cassandra 版本从 4.0.5 升级到 4.1.1,是否需要运行?
我正在尝试安装 cassandra,但我不需要最新版本 4.0.9,我需要 4.0.5
我尝试了以下步骤
cat cassandra.sources.list
deb https://debian.cassandra.apache.org 40x main
apt-get install cassandra=4.0.5
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Version '4.0.5' for 'cassandra' was not found
我安装的时候不说版本,安装的是4.0.9,如果需要专门安装4.0.5怎么办?
我有一个非常有趣的问题,cassandra 是否有可能不会为任何已修复的密钥空间启动重建过程?如果我们使用此选项很少处于未修复状态:nodetool rebuild --DATACENTER -ks KEYSPACE_NAME。
我们昨天看到了一个奇怪的实验,如果我们的集群中几乎没有未修复的键空间,我们决定改变例如一些已经修复的键空间的复制策略并使用这个命令:nodetool rebuild --DATACENTER -ks KEYSPACE_NAME - 此命令失败:无法找到足够的流范围来源,但如果我们在没有 --DATECENTER 的情况下启动命令:nodetool rebuild -ks KEYSPACE_NAME - 数据将出现在所有新节点上,而不是只有一个,我们可以使用这个方法还是坏主意?
我们想将 Cassandra Cluster 数据库从 1 个增加到 3 个。当前的 Cassandra DB 中已经有数据 (50/100 GB)。
我们可以同时添加两个新节点吗?或者我们应该一个一个地添加直到同步完全完成,然后再将第二个新的添加到集群中?
感谢您的帮助和建议。
我对估计的可丢弃墓碑值的理解是 = (Number of columns where tombstones passed gc_grace_seconds/Number of columns)
。
但是在某些 sstablemetadata 输出中,我可以看到该值大于 1。这怎么可能呢?在特定的时间点,让我们假设所有列都变成墓碑,它通过了 gc_grace_seconds 然后该值将为 1。那么它随后如何大于 1 ......这取决于时间吗?即随着时间的推移,价值会增加吗?
我正在按照本指南https://docs.datastax.com/en/dse/5.1/dse-admin/datastax_enterprise/operations/opsAddDCToCluster.html添加新的 DC。我开始我的节点
docker run -d \
-e CASSANDRA_CLUSTER_NAME='my cluster name' \
-e CASSANDRA_AUTO_BOOTSTRAP=true \
-e CASSANDRA_LISTEN_ADDRESS= \
-e CASSANDRA_ENDPOINT_SNITCH=GoogleCloudSnitch \
-e CASSANDRA_NUM_TOKENS=8 \
-e CASSANDRA_RPC_ADDRESS=0.0.0.0 \
-e CASSANDRA_SEEDS=127.0.0.1:7000,<seeds> \
-e CASSANDRA_ALLOCATE_TOKENS_FOR_LOCAL_REPLICATION_FACTOR=1 \
-p 9042:9042 \
-p 7000:7000 \
-p 7001:7001 \
-p 7199:7199 \
-p 9160:9160 \
-p 9142:9142 \
--restart always \
--name cassandra cassandra:4.1
该指令说 listen_address 将正确获取主机的 IP 地址,但在启动节点后,listen_address 说的localhost
不是主机的 IP 地址。这会阻止该节点与现有数据中心中的其他节点同步。我应该怎么做才能使 listen_address 指向节点的 IP 地址?
我想要一个temp
键空间,它是当前键空间之一的快照的副本,例如users_ks
. 我拍了快照users_ks
:
nodetool snapshot -t temp_table_snapshot -- users_ks
创建temp
密钥空间后,我导入快照
nodetool import users_frozen <TABLE> /etc/cassandra/data/users_ks/<TABLE>-<hash>/snapshots/temp_table_snapshot
而且我发现,当我运行时nodetool status
,Load
数据的大小没有改变。这是否意味着import
不会从快照创建新数据并重用底层 SSTables?
对于客户的新需求,我们需要设置非关键列搜索。我想避免创建索引,因此使用原始表的非键列作为分区键来评估新表的创建会更好,或者物化视图在这里是更好的选择。由于新表和物化视图都会占用存储空间(并且客户认为这是存储空间的浪费,因为我们在每个节点上保存两次相同的数据)那么通过创建物化视图我们可以实现什么额外的效果?(它的提示不适合生产)。除了使用非键列(原始表的)作为分区键创建索引/物化视图/新表之外,还有其他方法可以管理这种将引入非键列搜索查询的情况