gpt4 book ai didi

nosql - 如何以 MB 为单位获取 Cassandra Table/Columnfamily 大小

转载 作者:行者123 更新时间:2023-12-04 20:57:10 24 4
gpt4 key购买 nike

我想设计我的集群并设置合适的 key_cache 和 row_cache 大小取决于表/列族的大小。类似于mysql,我们在Cassandra/CQL中有这样的东西吗?

SELECT table_name AS "Tables", 
round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB"
FROM information_schema.TABLES
WHERE table_schema = "$DB_NAME";

或任何其他方式分别查找数据大小和索引大小。

或者每个节点需要什么样的配置才能将我的表完全放入内存不考虑任何复制因素。

最佳答案

键缓存和行缓存的工作方式截然不同。了解计算尺寸的差异很重要。

键缓存是文件中行位置偏移量的缓存。它基本上是从(键,文件)到偏移量的映射。因此,缩放键缓存大小取决于行数,而不是整体数据大小。您可以从“nodetool cfstats”中的“键数”参数中找到行数。请注意,这是每个节点,而不是总数,但这就是您要决定的缓存大小。默认大小是最小值(堆的 5%(以 MB 为单位),100MB),这对于大多数应用程序来说可能已经足够了。这里的一个微妙之处是行可能存在于多个文件(SSTables)中,数量取决于您的写入模式。但是,在 nodetool 的估计计数中(大约)考虑了这种重复。

行缓存缓存实际的行。要为此估算大小,您可以使用“nodetool cfstats”中的“已用空间”参数。但是,行缓存缓存反序列化的数据并且只缓存最新的副本,因此大小可能会有很大的不同(更高或更低)。

还有第三种可配置性较低的缓存 - 您的操作系统文件系统缓存。在大多数情况下,这实际上比行缓存更好。它避免了内存中的重复数据,因为当使用行缓存时,很可能数据也会在文件系统缓存中。在我的实验中,从文件系统缓存中的 SSTable 读取只比行缓存慢 30%(不久前,可能不再有效但不太可能有显着差异)。行缓存的主要用例是当您有一个要确保缓存的相对较小的 CF 时。否则使用文件系统缓存可能是最好的。

总而言之,Cassandra 默认的大键缓存和无行缓存对于大多数设置来说是最好的。只有当您知道您的访问模式无法使用默认设置或者遇到性能问题时,您才应该使用缓存。

关于nosql - 如何以 MB 为单位获取 Cassandra Table/Columnfamily 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946997/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com