是否可以从 Apache Cassandra 宽行中选择性地读取
Posted
技术标签:
【中文标题】是否可以从 Apache Cassandra 宽行中选择性地读取【英文标题】:Is it possible to Read selectively from a Apache Cassandra wide row 【发布时间】:2021-10-08 17:34:09 【问题描述】:是否可以从 Apache Cassandra 行中选择性地读取?我听说“通常每次触发读取查询时都会在后台读取整行”。是否可以通过读取选择性列来减轻数据库引擎的压力?通过减少压力,我不是在谈论典型的避免选择 *,这将转化为更少的 IO 并使数据在网络上的移动更快;我说的是在提供结果之前,数据库引擎是否在内部将整行拉入内存?我对宽行很敏感,并希望我的阅读占用很小的空间。
我知道如何通过有选择地更新/写入您关心的列来避免完全写入。这个问题是非常具体的阅读。
【问题讨论】:
【参考方案1】:是的,如果您只是对分区键而不是集群列进行过滤,则可以对行进行分页。
例如,像这样的视频 cmets 表:
CREATE TABLE video_comments (
video_id text,
comment_id text,
username text,
...
PRIMARY KEY (video_id, comment_id)
) WITH CLUSTERING ORDER BY (comment_id DESC)
对于具有 100K cmets 的视频,Cassandra 将在第一次通过时检索最新的 N cmets,因为驱动程序默认启用了分页(5000 行)。但是要对其余行进行分页,需要在堆上对分区进行序列化以遍历行,直到获得所需的子集。
如果您想避免加载大分区,则需要相应地对数据进行建模,以避免分区变得非常大(宽)。干杯!
【讨论】:
感谢 Erick 的快速评论。不过,我的想法更横向;如果我读取单行但仅选择 30 列中的 2 列,Cassandra 是将整行拉入内存还是仅将那 2 列拉入内存? 是的,确实如此。因为 C* 在检索磁盘之前不知道磁盘上有什么。干杯!以上是关于是否可以从 Apache Cassandra 宽行中选择性地读取的主要内容,如果未能解决你的问题,请参考以下文章