Автор rqlite рассказал, как создал распределённый SQLite за восемь лет до того, как на нём начали зарабатывать
Twelve Years of Distributed SQLite
В сентябре 2014 года Philip O'Toole выложил на GitHub rqlite — SQLite с журналом Raft перед ним, чтобы потеря узла не означала потерю данных. По его словам, это была первая открытая система, соединившая Raft и SQLite. За двенадцать лет идею переизобрели минимум восемь команд: dqlite от Canonical, Litestream, cr-sqlite с CRDT, форк libSQL и облачные D1 и SQLite Cloud. Автор разбирает три угла пространства решений — консенсус, стриминг и слияние — и замечает, что деньги пришли к платформам, а не к открытым проектам.
Но стоит зафиксировать: идея была открытой восемь лет, прежде чем кто-то начал её продавать.
- mmnfrdmcx
Как человек, который любил sqlite и его простоту, скажу честно: с агентами мне оказывается чрезвычайно легко управлять postgres, и очень приятно иметь все SQL-возможности postgres — sqlite довольно ограничен во многих аспектах SQL. Так что если вы рассматриваете удалённый sqlite и всё такое, сейчас, кажется, как никогда лучшее время просто использовать сервер базы данных.
Конечно, sqlite потрясающ для локальных инструментов и т.п.
- AgentME
Сравнение rqlite и Litestream было интересным. (rqlite использует алгоритм консенсуса между узлами, чтобы держать их синхронизированными и позволять менять первичный узел, тогда как Litestream просто синхронизирует себя с S3, чтобы другой узел мог подхватить данные оттуда.)
Я полностью ожидал, что статья вскоре перейдёт к D1 и упомянет, что там примерно та же связь между Cloudflare Durable Objects (на которых основан D1) и celld — открытой перереализацией Cloudflare Durable Objects, которая пишет в S3. Но затем статья относится к D1 с очень внезапной незаинтересованностью и никуда с этим не идёт.
- piterrro
Использовал D1 в продакшене — он не очень надёжен. На HN был комментарий от одного из разработчиков D1 [1], где говорилось, что D1 — это sql-обёртка поверх durable objects, которая имитирует распределённую природу sqlite.
> Открою вам своего рода грязный секрет:
Почти всегда лучше использовать хранилище Durable Objects, а не D1. Даже если вам нужна всего одна глобальная база данных, лучше реализовать её как singleton Durable Object, чем использовать D1. Потому что именно этим D1 на самом деле и является: singleton Durable Object, который предоставляет API к своей базе SQLite. Это просто обёртка.
- vikrantrathore
Забавно: когда я читал статью про парламент на неполную ставку (paxos) и параллельно изучал языки zig и odin, я создал чистую библиотеку paxos, и первым применением этой библиотеки стало создание multi-master sqlite. Два подхода, которые я опробовал, сильно различаются: на zig я построил zaxonlite (https://github.com/insanai/zaxonlite) и сделал для него бенчмарк, включающий rqlite. В нём используется стратегия репликации WAL. Вторая попытка, которую я опробовал на odin, — это sqlodin (https://github.com/insanai/sqlodin); в ней система не использует WAL, а выполняет sql-запрос на каждом узле, в результате чего часть sql-запросов в sqlite не поддерживается.
- klamann
Если ты не получаешь никакого удовольствия от того, чтобы писать о своём личном опыте своим собственным голосом, то зачем вообще о нём писать?