是否可以从 Apache Cassandra 行中选择性地读取?我听说“通常每次触发读取查询时都会在后台读取整行”。是否可以通过读取选择性列来减轻数据库引擎的压力?通过减少压力,我不是在谈论典型的避免选择 *,这将转化为更少的 IO 并使数据在网络上的移动更快;我说的是内部数据库引擎在提供结果之前是否将整行拉入内存?我对宽行很敏感,并且想让我的阅读占据非常小的足迹。
我知道如何通过有选择地更新/写入您关心的列来避免完全写入。这个问题是非常具体的阅读。
是的,如果您只是对分区键而不是集群列进行过滤,则可以对行进行分页。
例如,像这样的视频评论表:
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 评论的视频,Cassandra 将在第一次通过时检索最新的 N 条评论,因为驱动程序默认启用了分页(5000 行)。但是要对其余行进行分页,需要在堆上对分区进行序列化以遍历行,直到获得所需的子集。
如果您想避免加载大分区,则需要相应地对数据建模,以避免分区变得非常大(宽)。干杯!