TGViewer
Product Developer Product Developer @product_developer · 12K subscribers
Post #77 2.63K
Cassandra vs. PostgreSQL

Я люблю PostgreSQL и всем рассказываю о том, какая это универсальная СУБД с инструментами и расширениями на все случаи жизни. И когда встает вопрос хранения, в первую очередь всегда думаю о PgSQL.

Но бывают специфичные кейсы, которые можно на PgSQL, но с оговорками, и количество оговорок заставляет задуматься об альтернативах.

Расскажу про один из таких кейсов в формате "Условие" - "Сравнение двух СУБД".

1️⃣ Условие – Одна табличка без связей и логики. Одна запись на один платёж. Платежей – миллионы в сутки. При этом реляционная модель и транзакционность не нужны.

Внутреннее устройство реляционных СУБД здесь будет скорее мешать. Движок MVCC ничем не пригодится и скорее создаст проблемы. Миллионы записей в сутки очень быстро приведут к деградации на одной таблице, нужно делить данные между таблицами. В PgSQL администрировать партиционирование или шардирование нужно самим, и это еще одна механика, за которой нужно следить.

Вы не подумайте, что в Cassandra можно хранить только одну таблицу) Просто такой кейс. Ограничение Cassandra – отсутсвтие JOINов. Поэтому приветствуется денормализация данных, чтобы доставать всё из одной таблицы. Подробнее о проектировании структуры хранения в Cassandra: https://cassandra.apache.org/doc/latest/cassandra/data_modeling/data_modeling_rdbms.html
А такой объем данных – не много, и из коробки есть обязательное шардирование между нодами, которое называется там партиционированием).

2️⃣ Условие – Нужны самые быстрые вставка и чтение, которые только возможны. При этом данные – критичные и могут повлиять на конверсию платёжной формы. Читай, платежи ходить не будут, если потеряется.

Аналогично предыдущему пункту, MVCC будет скорее мешать. А синхронная репликация между датацентрами даст лишнюю задержку на записи.

Cassandra позволяет управлять балансом скорости и надёжности. Можно указать уровень консистентности при вставке и чтении. Указывая LOCAL_QUORUM при вставке, мы получаем достаточную надёжность записи на несколько нод в кластере, при этом избегаем сетевой задержки между датацентрами.

Читать будем через 10 секунд, максимум сутки после вставки.
За это время данные точно разлетятся по всему кластеру и читать их можно откуда быстрее.

3️⃣ Условие – Читать будем только по первичному ключу.
Это ограничение Cassandra, и в этом кейсе мы по нему проходим. Вообще очень важно понимать ограничения, мне в этом помогла статья коллеги на хабре: https://habr.com/ru/company/qiwi/blog/486800/

4️⃣ Условие – Повторное чтение данных не нужно. То есть данные одноразовые. А старые данные будут мешать и со временем приведут к деградации системы. Надо их как-то чистить.

DELETE в PgSQL – не лучшая идея, хотя и возможная. Типа, чистить сразу после прочтения. Но фактически это лишняя нагрузка на запись и необходимость последующего vacuum (сборки мусора). Поэтому мы решали бы эту задачу с помощью партиционирования и дропа старых партиций.

А в Cassandra есть встроенная механика TTL (Time To Live) записей. Можно прямо при вставке указать, типа INSERT ... USING TTL 1800. Есть свои нюансы у этой механики, но подкупает факт, что она предусмотрена из коробки.

Итог

Выбрали Cassandra, потому что она автоматом решает проблемы, которые нужно было бы решать руками на PgSQL.
Признаюсь, я хотел попробовать Cassandra, и это было в моем ИПР. Но я не тащил её в первую попавшуюся задачу, а дождался подходящей, поисследовал вопрос, пообщался с экспертами, выписал аргументы за и против, презентовал команде и мы все вместе приняли это решение.

С момента запуска прошло время и я уже полгода работаю в другой компании, поэтому прежде чем писать пост спросил у ребят, как оно.
Ответ: "Вроде всё отлично, проблем никаких не было) Качественно довольно запедалили"
Хабр Cassandra. Как не умереть, если знаешь только Oracle Привет, Хабр. Меня зовут Миша Бутримов, я хотел бы хотел немного рассказать про Cassandra. Мой рассказ будет полезен тем, кто никогда не сталкивался с NoSQL-баз...
  • 👍 16
  • 🔥 5
More from @product_developer
  1. Sep 12, 2026Автономность команды. Больше = лучше? Обычно автономность преподносится как безусловное до…
  2. Sep 8, 2026Почему AI-агенты не заменят кожаных Disclaimer: постов будет 2, второй — «Почему заменят»…
  3. Sep 4, 2026Avito.Tech.Conf — 26 сентября, Москва, бесплатно Бесплатных конференций вам в ленту! Спике…
  4. Jul 30, 2026AI-агенты — это ответ! А какой был ваш вопрос? Все бегут в разработку через AI. Во-первых,…
  5. Jul 21, 2026Доставка смс в самолёт Сижу в самолёте. С интернетом, что само по себе — чудо, которое уже…
  6. Jul 20, 2026С этими вашими AI агентами мы снова попали на дикий запад Момент времени Т-4: Когда-то дав…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →