我不确定如何用适当的数据库术语表达我的问题。但它就在这里。
我对关系型数据库中数据读取的理解:
在关系数据库中,由于所有列都存在,所以系统知道一行在硬盘上占用了多少字节。所以读取一行就像读取一块特定大小的内存字节(表中的所有行都相同)。
这在像 cassandra 这样的 noSQL 数据存储中如何工作,因为列不是强制性的并且可能会丢失?
我不确定如何用适当的数据库术语表达我的问题。但它就在这里。
我对关系型数据库中数据读取的理解:
在关系数据库中,由于所有列都存在,所以系统知道一行在硬盘上占用了多少字节。所以读取一行就像读取一块特定大小的内存字节(表中的所有行都相同)。
这在像 cassandra 这样的 noSQL 数据存储中如何工作,因为列不是强制性的并且可能会丢失?
您所描述的称为读取路径,这可能是您可以在任何数据库技术文档中找到的术语。
特别是对于卡桑德拉:
首先,您需要选择合适的节点:
Cassandra 是一个分布式系统,并非所有节点都包含您需要的数据。每个节点负责令牌的范围。当您读取分区键被散列时,它会为您提供一个令牌,Cassandra 知道数据在哪个节点上。(每个数据很可能在几个节点上,这就是所谓的复制因子这里不详述)。
TLDR; 数据在 SSTable 中组织,分区和相关偏移量被存储。
检查内存 (MemTable),因为数据先于磁盘存在:
检查 Bloom 过滤器(最近的 Cassandra 版本不再有行缓存)
检查分区键缓存(如果启用)
如果在分区键缓存中找到分区键,则直接转到压缩偏移映射,否则检查分区摘要如果检查到分区摘要,则访问分区索引
使用压缩偏移图在磁盘上定位数据
从磁盘上的 SSTable 中获取数据
来源、参考资料和详细信息