单次更新会导致数千次写入



我正在寻找这个用例的可行答案。 有音乐曲目,用户有曲目的播放列表。假设用户上传了曲目,一周后决定编辑名称(或将曲目设为私有等(。 如果曲目已添加到 ~10k 不同的播放列表中,则单次编辑会导致 ~10k 次写入。

只需一次查询即可获取曲目已添加到的所有播放列表反向查找表,然后应用程序必须遍历所有 10k结果,并在播放列表表上执行相应的更新。

我看到的唯一替代方法是在检索播放列表时在应用程序级别执行联接。

这是我不断遇到的一个常见用例,想知道如何最好地处理它。

CREATE TABLE tracks (
    track_id timeuuid,
    url text,
    name text,
    PRIMARY KEY (track_id)
)
CREATE TABLE playlist_ordered_by_recently_added (
    playlist_id timeuuid,
    date_added_id timeuuid,
    track_id timeuuid,
    url text,
    name text,
    PRIMARY KEY (playlist_id, date_added_id)
) WITH CLUSTERING ORDER BY (date_added_id DESC)
CREATE TABLE playlist_ordered_by_recently_added_reverse_lookup (
    track_id,
    playlist_id,
    date_added_id,
    PRIMARY KEY (track_id, playlist_id)
)

"join"方法是正确的方法,尽管我不会称之为"join"。要检索曲目列表,您需要针对playlist_ordedred_by_recently_added发出第一个查询(这为您提供了所有track_id,预计会相当小(,然后是一堆并行查询以从曲目表中检索 tracks.url 和 tracks.name。更新时,只需更新轨迹表即可更改名称一次。

最新更新