Java cassandra UTF8或LongType中的密钥验证类类型?

Java cassandra UTF8或LongType中的密钥验证类类型?,java,nosql,cassandra,bigdata,Java,Nosql,Cassandra,Bigdata,使用cassandra,我想在column族中存储2000多万行键 我的问题是: 长键和utf8行键之间是否存在真正的性能差异 是否存在行键存储大小问题 我的用户密钥看起来像这样 rowKey=>112512462152451 rowKey=>135431354354343 rowKey=>145646546546463 rowKey=>154354354354354 rowKey=>156454343435435 rowKey=>15443543543574

使用cassandra,我想在column族中存储2000多万行键

我的问题是:

  • 长键和utf8行键之间是否存在真正的性能差异

  • 是否存在行键存储大小问题

  • 我的用户密钥看起来像这样

    rowKey=>112512462152451
    rowKey=>135431354354343
    rowKey=>145646546546463
    rowKey=>154354354354354
    rowKey=>156454343435435
    rowKey=>154435435435745
    
  • Cassandra将磁盘上的所有数据(包括行键值)存储为十六进制字节数组。就性能而言,行键的数据类型实际上并不重要。唯一重要的是,行键的类型验证器/比较器将影响磁盘排序顺序。因此,在您的情况下,Long将与UTF8(ascii betial)排序不同(数字)

  • 我找不到这方面的确切来源,但我记得我读过一篇文章,其中一行键的最大大小是64K(而你似乎远远低于这个数字)。默认情况下启用密钥缓存,除非另有规定,否则将缓存200000个密钥。在任何给定时间缓存200000个密钥是否足够,取决于应用程序的要求。您可以根据可用RAM的数量来增加它,但是您应该在小的增量调整中测试它

  • 查看数据税务文档以了解有关的说明

    此外,还讨论了正确的行键选择/创建,这可能对您有所帮助

  • 没有
  • 通常,您不希望行键太大。这是因为磁盘上的索引文件会变大,无法放入内存中,所以如果没有缓存密钥,您也必须到磁盘上查找密钥。到底有多大取决于你的硬件资源
  • 在Cassandra 1.1中,曾经有一个问题,代码:

    将使用48字节的常量值作为密钥缓存行大小的平均值,以估计密钥缓存使用的内存量。如果有人有长密钥,那么代码逻辑最终会导致密钥缓存的堆使用率高于在cassandra.yaml中配置的值。这在Cassandra 1.2中已修复

    我通常建议我的开发者如果可以的话,不要拥有超过32字节的密钥。

    +1“我通常建议我的开发者如果可以的话,不要拥有超过32字节的密钥。”这是一个很好的建议。