😳 А еще есть serverless и edge базы данных...
Дважды переписывал пост, потому что его сложно сформулировать, поэтому оставлю "пробежку по верхам":
i. Где разворачиваем:
-
Self-hosted – арендовали сервер, сами развернули и поддерживаем БД, платим за железо.
-
Vendor-hosted – арендовали базу у какого-нибудь сервиса и он сам занимается поддержкой инстансов и железа.
ii. За что платим в Vendor-hosted
- "Classic" БД – платим за инстанс / железо
- Serverless БД – платим за вычисления + объем хранимых данных
iii. Vendor-hosted Serverless
Обычно, предполагает специальные БД, разделеные на 3 части: слой хранения данных, слой вычислений и координатор.
Когда вы делаете запрос, координатор создает функцию для его вычисления, которая из разных частей слоя хранения данных отдает вам результат.
YDB,
Cockroach,
PlanetScale,
Neon (serveless PostgreSQL)
Преимуществом vendor-hosted serverless БД называют "бесконечное масштабирование" (место на дисках в этом случае, может быть, на порядок дешевле, потому что наши данные лежат в перемешку с чужими) + уменьшение костов, поскольку мы платим только за вычисления и небольшую денежку за хранимые данные.
И если масштабирование правда классная фича, то вот прайсинг за вычисления – более опасная история, потому что "вычисления" это в том числе сколько БД прочитала строчек, а значит, если у вас поиск не по индексу, вы заплатите за каждую прочитанную строчку, что из 10 центов может превратиться в 5000$ (эх, не могу найти ссылку на статью, но вы нагуглите кучу таких историй).
iv. Edge
Тут больше про брендинг: Edge DB должны давать возможность Edge functions, запускающихся рядом с клиентами, ходить в самый ближайший к ним инстанс БД, а значит основная их фишка – геораспределенность.
По факту, подойдет любая БД, которая умеет в распредление, но в идеале она должна поддерживать мастер-мастер репликацию, длительные зажержки в репликации и резолвинг конфликтов.
ScyllaDB,
CouchDB,
Cassandra
Единственная БД, которую сейчас можно найти под тэгом "edge database" это
Turso – распредленный SQLite. НО самое смешное, что она при этом master-slave (то есть все запросы на write маршрутизируются на master реплику) причем чуть ли не с serializable транзакциями, а это как-то нехрена не "Edge"...
По ощущениям, это тоже самое, что сделать реплику PostgreSQL для чтения в регионе пользователей, при этом оставив все фишки и плюшки постгресса. Надо еще почитать / попробовать.
v. Когда что использовать:
- Self-hosted всегда дешевле, поэтому если у нас средний+ проект, есть DevOps, умеющий в БД и желание сократить издержки, то можно переходить на Self-hosted.
- Vendor-hosted снимает огрооомное количество гемороя, поэтому, если у нас маленький-средний проект или мы готовы платить вендору, то используем Vendor-hosted
А вот использовать ли вам Classic / Serverless / "Edge" зависит чисто от ваших задач и команды и я буду разбирать каждого отдельного представителя с рассуждениями о задачах, для которых это могло бы подойти.
Серебрянной пули опять нет, если брать среднее по больнице, мой совет: "научитесь в classic vendor-hosted" – и будет вам счастье.
Всем мощной прокачки 💪