【问题标题】:How to get the Cassandra Table/Columnfamily size in MB如何以 MB 为单位获取 Cassandra 表/列族大小
【发布时间】:2013-04-03 13:01:33
【问题描述】:

我想设计我的集群并想设置适当的 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";

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

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

【问题讨论】:

    标签: nosql cassandra cql


    【解决方案1】:

    键缓存和行缓存的工作方式完全不同。了解计算尺寸的区别很重要。

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

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

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

    总之,Cassandra 默认的大键缓存和无行缓存是大多数设置的最佳选择。如果您知道您的访问模式不适用于默认值或者您遇到性能问题,您应该只使用缓存。

    【讨论】:

    • 让我告诉你我的应用程序设计。所以基本上,我有一个 Web 服务,每个请求应用程序执行大约 500
    • 行缓存可能是一个很好的选择,但如果可以的话,您应该尝试减少每个请求的数据库查询数。 Cassandra 可以在每个节点每秒执行 10k 次读取,因此每个节点每秒只有 10 个请求。
    • 你从哪里得到这个数字 10k reads/sec/node,不取决于硬件吗?顺便说一句,这是一个很好的信息,您能否分享一些链接,我可以在其中看到这些与性能相关的信息。查询/请求并非都是唯一的,所以我想,行缓存对我来说会很有帮助,我是 cassandra 的新手,我正在阅读有关它的所有内容。
    • 当然,性能取决于硬件。 10k 读取/秒是粗略的经验法则。 Netflix 在这里获得了大约 10k 次写入:techblog.netflix.com/2011/11/…。读取速度有点慢,这里有一些基准显示几 k/s:networkworld.com/cgi-bin/mailto/x.cgi?pagetosend=/news/tech/…
    猜你喜欢
    • 2019-03-16
    • 2012-02-17
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    相关资源
    最近更新 更多