TGViewer
There will be no singularity There will be no singularity @nosingularity · 1.95K subscribers
Post #10 228
Одна компания с веселым названием «злые марсиане» и не менее веселым логотипом ведет свой канал в телеграмме.
Вот он: @evilmartians

Каждый второй пост там - как они прикрутили к ruby graphql.

Да, они пишут на ruby. В 2020. И, видимо, там есть большие проблемы с graphql :)

Но я не об этом. Последний их пост о том, как они мужественно в обход ActiveRecord (это класс из ORM Ruby On Rails, из-за которой когда-то в 2004 этот язык и приобрел хоть какой-то смысл) добавляют в базу триггеры для инкремента счетчиков в отдельной таблице postgresql при каждом INSERT/UPDATE вместо того, чтоб считать (внимание!) эти суммы в ElasticSearch.

После того, как ко мне вернулся дар речи, единственное, что я смог произнести: «Как тебе такое, Илон Маск»

Прочувствовать можно по ссылке:
https://evilmartians.com/chronicles/pulling-the-trigger-how-to-update-counter-caches-in-you-rails-app-without-active-record-callbacks
(судя по всему, раньше они это делали через колбеки в приложении :) )

Тут прекрасно все:
- и синтаксис ActiveRecord для создания таблиц
- и то как эти таблицы заполняются: User.insert_all(10_000.times.map { { created_at: Time.now, updated_at: Time.now } })
- и запуск EXPLAIN из кода
- и, конечно, царь горы - триггер. На каждый insert и update делается upsert в сводную таблицу на основании выборки count и sum. Upsert в postgres делается на синтаксисе on conflict update, и так себе работает при параллельных запусках (расскажу об этом при случае). Чтобы победить race condition, мужественные марсиане решают провернуть уличную магию с рекомендательными блокировками (не делайте так никогда, во имя святого Стоунбрейкера).

С триггерами в рельсах, кстати, какие-то проблемы и предлагается использовать специальный форк отдельного пакета (!!!) для триггеров от автора статьи.

And one more thing...
Эти ребята приложили руку к @rocketbank.
Похоже, тинькофф что-то знал, когда буллил ракетчиков :)))

PS: На одной из конференций встретил двух знакомых, пишущих на ruby. Они, еле находя время на вздох, хором ржали над людьми, пишущими на серверном js...
evilmartians.com Pulling the trigger: How to update counter caches in your Rails app without Active Record callbacks—Martian Chronicles, Evil Martians’… Keeping your counter caches in sync using nothing but database triggers
More from @nosingularity
  1. Sep 19, 2026fixupx.com/KaiLentit/status/2100629518784328013/video/1
  2. Sep 18, 2026fixupx.com/iam_zachi/status/2100679300756435135
  3. Aug 30, 2026photo post
  4. Aug 25, 2026fixupx.com/meganreyno/status/2091918430374957416
  5. Aug 3, 2026Вышла новость, что Andy Pavlo приняли на борт Clickhouse Inc. Энди довольно известная фигу…
  6. Jul 23, 2026fixupx.com/unclebobmartin/status/2080257779395154409
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 →