常见Cassandra数据类型的字节数大小是多少?(用于计算分区磁盘使用量)

12

我正在尝试使用Datastax Academy数据建模课程中的公式计算具有任意数量的列和类型的表中每行的分区大小。

为此,我需要知道一些常见Cassandra数据类型的“字节大小”。我试图在Google上搜索这个问题,但得到了很多建议,所以我感到困惑。

我想知道的数据类型包括:

  • 一个单独的Cassandra文本字符(我从2-4字节的答案中搜索)
  • Cassandra DECIMAL
  • Cassandra INT(我认为它是4个字节)
  • Cassandra BIGINT(我认为它是8个字节)
  • Cassandra BOOELAN(我认为它是1个字节,..或者是一个位)

当然,关于Cassandra中数据类型的大小,任何其他考虑都将受到赞赏。

添加更多信息,因为似乎难以理解我只是尝试估计数据在未经任何压缩和Cassandra执行的优化的情况下占用的“最坏情况磁盘使用量”。

我正在遵循Datastax Academy课程DS220(请参见末尾链接),并实现该公式,并将使用此处的答案信息作为该公式中的变量。

https://academy.datastax.com/courses/ds220-data-modeling/physical-partition-size


默认情况下,Cassandra 在磁盘上压缩数据。因此,根据您拥有的数据,该类型将不会很有用,以评估实际存储大小。我认为您应该自己测试一下大小。 - Thomas Arnaud
Datastax Academy课程没有提到的有趣答案!Cassandra使用的数据压缩比是多少(我正在使用C* 3.+),...以及我所询问的类型的大小是多少?谢谢! - nicgul
我之所以问这个问题,是因为我有一个使用案例需要提示用户存储数据的大小,包括宽行的“开销”。 - nicgul
这里有一些关于数据大小的有趣评论:http://datascale.io/sizing-cassandra-data/ - LHWizard
谢谢@LHWizard,这肯定会很有用! - nicgul
所以你建议我每天都把油箱加满,因为我可以用一档而不是五档来从家里到办公室(10英里)?你有优化的方法,就用吧。评估你的(磁盘)开销。计算你的(内存)开销。 - xmas79
2个回答

23

我认为,从实用的角度来看,在设计时使用ds220课程中的公式快速估算最坏情况是明智的。压缩的效果通常取决于数据中的算法和模式。参考自ds220和http://cassandra.apache.org/doc/latest/cql/types.html

uuid: 16 bytes
timeuuid: 16 bytes
timestamp: 8 bytes
bigint: 8 bytes
counter: 8 bytes
double: 8 bytes
time: 8 bytes
inet: 4 bytes (IPv4) or 16 bytes (IPV6)
date: 4 bytes
float: 4 bytes
int 4 bytes
smallint: 2 bytes
tinyint: 1 byte
boolean: 1 byte (hopefully.. no source for this)
ascii: equires an estimate of average # chars * 1 byte/char
text/varchar: requires an estimate of average # chars * (avg. # bytes/char for language)
map/list/set/blob: an estimate

希望它有所帮助


1
唯一可靠的估算某物相关开销的方法是实际进行测量。事实上,你不能仅根据单个数据类型对它们进行概括。如果你有4个bigint列,并且假设你的开销为X,那么如果你有400个bigint列,你的开销可能不会是100倍。这是因为Cassandra在将数据存储到磁盘之前会默认压缩(并且这是每个列族的可调节tunable设置)所有内容。
尝试在集群中加载一些数据,我指的是生产数据,然后让我们了解你的结果和压缩配置。你会发现一些惊喜。
了解你的数据。

好的,谢谢!那我猜Datastax学院的课程(见链接)就不对了,他们教我们一些不正确的东西? - nicgul
有没有在Datastax工作或深度参与Cassandra开发的人可以确认这个问题? - nicgul
你不需要对此进行任何确认。想象一下有1M个由零组成的大整数。在压缩后它们是否只需要几个字节而不是8M字节呢? - xmas79
不过,如果它们是1M个64位数字,那么它们将占用大量空间,记住我写了“提示用户”。我知道我的数据。 - nicgul
不,它们可能不会占用太多空间。这非常取决于您的64位值如何相关。只有随机数据无法压缩。发现这一点的唯一方法是使用真实数据进行尝试。因此,如果您了解自己的数据,为什么要问呢? - xmas79
1
我们就到这里吧,因为看起来你不知道我最初问题的答案,并且你拒绝理解我想知道“最坏情况下的磁盘使用情况”的意图。 - nicgul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接