Apache Cassandra · Cassandra 5.0.9
Instagram держит в Cassandra ленту фото, Direct и данные антифрода. После перехода на свой движок Rocksandra p99 чтения в одном из кластеров упал с 60 до 20 мс. Схему ниже мы придумали сами, она похожа на типичную таблицу ленты.
Таблица feed_by_user: партиция — user_id, строки внутри отсортированы по posted_at и post_id по убыванию.
Сервис превью уведомлений раз в минуту просит по две самые свежие записи для пачки пользователей. В пачке три человека: 11, 12, 13. Нужны user_id, post_id, author. Порядок строк в ответе не важен.
В работе: Пакетное чтение нескольких партиций: превью уведомлений, виджеты «что нового у друзей».
Источник: Instagram Engineering: Rocksandra и задержки Cassandra, 2018. Условие пересказано своими словами.
Какой запрос вернёт не больше двух свежих записей на каждого из пользователей 11, 12 и 13?
- PER PARTITION LIMIT 2
- LIMIT 6 — три пользователя по две записи
- LIMIT 2
- GROUP BY user_id