首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cassandra如何存储文本之类的变量数据类型?

问Cassandra如何存储文本之类的变量数据类型?
EN

Stack Overflow用户
提问于 2022-05-10 04:12:36
回答 1查看 95关注 0票数 2

假设Cassandra会将固定长度的数据存储在列族中。类似于列族: id(bigint)、年龄(Int)、描述(文本)、图片(Blob)。现在描述和图片没有限制。它是怎么储存的?卡桑德拉是否通过ID ->定位方式外化?

例如,在关系数据库中,指针用于指向大型文本的实际位置。请参阅它是如何完成的

另外,在mysql中,为了更好的性能,建议使用char而不是varchar。我想很简单,因为没有必要进行"id查找“。请参阅:mysql char与varchar

在这里输入代码

`

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-10 11:01:04

Cassandra将单个单元格(列值)存储在其磁盘上文件("sstables")中,作为32位长度,然后是数据字节。所以字符串值不需要--而不是--需要有固定的大小,也不能存储为指向其他位置的指针--完整的字符串出现在数据文件中。

32位长度限制意味着每个“文本”或"blob“值的长度限制在2GB以内,但实际上,您不应该使用任何接近这个值的东西--对于Cassandra文档建议,您不应该使用超过1MB的值。具有非常大的值有几个问题:

  1. 由于值不是作为指向其他存储空间的指针存储的,而是以内联方式存储在sttable文件中,因此这些大型字符串在每次重写sstable文件时,即在压缩过程中,都会被复制。将巨大的字符串保存在一个单独的文件中,并且只复制指向它的指针会更有效--但是Cassandra没有这样做。
  2. Cassandra查询语言(CQL)没有存储或检索部分单元格的任何机制。因此,如果您有一个2GB的字符串,您必须完全检索它-没有办法“分页”通过它,也没有一种方式来写它的增量。
  3. 在Scylla中,大型单元将导致较大的延迟峰值,因为Scylla将以原子方式处理非常大的单元,而不是通过上下文切换来完成其他工作。在Cassandra中,这个问题将不那么明显,但仍然可能导致问题(大单元上的线程将垄断CPU,直到操作系统抢占)。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72180665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档