Вхід Реєстрація
Реклама
Ваше рекламне місце
Забронюйте цей слот без конкуренції на обраний період.
Купити рекламу →
Логотип телеграм спільноти - Продуктивність | Тарас Лукавий
Додано 06 гру 2025 🌐 UK

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

@taras_lukavyi
Кількість підписників: 1 480
Фото: 902
Відео: 163
Посилання: 992
Опис:
Навчу встигати за світом. https://done.camp - закрите комʼюніті по АІ агентах і продуктивності
Джерело

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

Логотип телеграм спільноти - Продуктивність | Тарас Лукавий Продуктивність | Тарас Лукавий @taras_lukavyi
578 Охват/переглядів 2026-10-09 21:57 Повідомлення №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