Login Sign Up
Advert
Your ad spot
Reserve this exclusive slot for the selected period.
Buy advertising →
Telegram community logo - Продуктивність | Тарас Лукавий
Added 06 Dec 2025 🌐 UK

Продуктивність | Тарас Лукавий

@taras_lukavyi
Number of subscribers: 1 480
Photos: 902
Videos: 163
Links: 992
Description:
Навчу встигати за світом. https://done.camp - закрите комʼюніті по АІ агентах і продуктивності
Source

Продуктивність | Тарас Лукавий | Convex довели, шо він не обгортка над Postgres: зібрали схожу базу з J...

Telegram community logo - Продуктивність | Тарас Лукавий Продуктивність | Тарас Лукавий @taras_lukavyi
578 Views/Reach 2026-10-09 21:57 Message №2502
Convex довели, шо він не обгортка над Postgres: зібрали схожу базу з JSON-файлу
Для: розробників, які обирають бекенд

TL;DR: транзакції, індекси й підписки Convex робить сам. Реляційна база під ним лише зберігає дані. Так пояснюють у 38-хвилинному розборі на офіційному каналі Convex.

А нашо таке відео?
Ведучий каже, шо досі бачить у Discord і X питання «Is Convex just a Postgres wrapper?». Тому замість відповіді текстом вони крок за кроком будують іграшкову базу з тими самими властивостями. Старт - порожній JSON-файл, далі лагодять кожну проблему по черзі.

Шо там будують
1. Append-only лог: середину файлу не редагують, а дописують у кінець. Актуальне значення - найнижче.
2. Транзакції: якщо світло вимкнеться між «зменшили залишок на складі» і «поклали капелюх у кошик», дані не мають розлізтись. Або обидві зміни, або жодної.
3. Два юзери бачать stock=1 і обидва купують. Рішення: транзакція пам'ятає, шо прочитала (read set) і шо хоче записати (write set). Committer перед записом перевіряє, чи прочитане не змінилось. Змінилось - мутація перезапускається.
4. Таймстемпи: без них committer не відрізнить «значення не мінялось» від «було 1, стало 2, знов 1».
5. Версійовані індекси, шоб мутація, яка стартувала раніше, читала базу на момент свого старту.
6. Підписки: запит - це мутація без write set. Коли новий коміт зачіпає read set відкритого запиту, той перезапускається, і клієнт отримує свіжі дані. Звідси реактивність Convex.

А де підводні камені?
Повтор мутації безпечний, лише якщо вона детермінована і без побічних ефектів. Інакше повторний виклик типу chargeCard() спише гроші двічі. Тому все зовнішнє, типу Stripe, виносять в actions. А scheduler пише в той самий write set: коміт відхилили - нічого не заплановано.

Нюанс: це розбір від самої компанії. Тезу «Postgres за замовчуванням на READ COMMITTED з аномаліями, а в нас усе serializable» Convex пише у своєму блозі. SERIALIZABLE у Postgres теж є, просто не за замовчуванням.

Ті самі демо є в інтерактивній статті: explained.convex.dev/build-your-own-convex

https://youtu.be/2jGiVHdQUkE