【问题标题】:managing video watch history of users in cassandra在 cassandra 中管理用户的视频观看历史记录
【发布时间】:2022-07-14 16:51:45
【问题描述】:

我使用的是 MYSQL 数据库,但我的历史表之一增长非常快,已经超过 3 亿行,这使得数据库变得缓慢且难以创建备份。所以我决定只移动卡桑德拉的那张桌子。这是我第一次使用 Cassandra。在 mysql 中,我存储了 user_id、video_id、watch_secs、watch_counter、timestamp、user_id、video_id 是唯一的复合键,如果已经存在,则增加 watch_secs 和 watcher_counter。我试图跟随 Cassandra

CREATE TABLE IF NOT EXISTS history
(
    user_id int,
    video_id int,
    watch_secs int,
    watch_counter int,
    last_updated timestamp,
    history_timestamp timestamp,
    PRIMARY KEY ((user_id, video_id))
);

CREATE TABLE IF NOT EXISTS history_counter
(
    user_id int,
    video_id int,
    watch_secs counter,
    watch_counter counter,
    PRIMARY KEY ((user_id, video_id))
);

由于计数器的限制,我创建了两个表用于递增秒数和计数器以及其他带有时间戳的表相同数据。

现在这对于存储数据很有用,但是在这里我有两个删除和获取数据的问题。

  1. 我想获取特定用户最近 10 个的历史记录。我试过了 查询,但它在 where 子句中需要 user_id 和 video_id。
  2. 我想通过 video_id 删除历史记录

    因此,如果仅使用一个不起作用的分区键获取或删除数据并且我找不到任何解决方案,则主要问题是。

    我将非常感谢您的帮助,我可以使用任何其他更适合此数据库或此数据库中任何解决方案的数据库。

【问题讨论】:

  • “为特定用户获取最近 10 的历史记录”是什么意思?
  • 您希望通过将一些数据移至 Cassandra 获得什么?
  • 有什么问题 - 备份速度?删除速度?获取语​​法?
  • 嗨@RickJames 感谢 cmets。我想通过用户 ID 为用户获取最近 10 个观看的视频。
  • 我正在移动数据以使 mysql 数据库变小并单独管理历史数据。这将使我很容易轻松地备份两者。

标签: mysql cassandra datastax cassandra-4.0


【解决方案1】:
SELECT ...
    FROM history
    WHERE user_id = ?
    ORDER BY history_timestamp DESC
    LIMIT 10

并将其添加到表history

INDEX(user_id, history_timestamp)

这可能需要一个 JOIN 使用 video_id 到其他表来获取 10 个视频的名称。

history_counter 是干什么用的?观看视频的人的当前状态?还有别的吗?)

【讨论】:

  • history_counter 是用户观看视频的次数。我想你给我这个是为了 MYSQL,但我想要这个给 Cassandra。我已经在使用 MYSQL 并想将此表转移到 cassandra。
猜你喜欢
  • 1970-01-01
  • 2022-08-05
  • 2017-05-19
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-02
  • 1970-01-01
  • 2015-08-31
相关资源
最近更新 更多