Как стать автором
Обновить

Комментарии 21

Она славится надёжностью и непостижимо огромным набором тестов, а её производительность хороша настолько, что цитирование цифр в сообщении на форум каждый раз порождает споры о том, не стоит ли исключить её из сравнений. Наверное, эта база не нуждается в представлении, но для человека с поднятой рукой уточню: я говорю об SQLite.

Я тоже сторонник SQLite. Именн SQLite используется в удостоверяющем центре CAFL63.

Местами она даже лучше других баз, и на самом деле поддерживает не один процесс, а несколько (просто писателем будет только один).

писателем будет только один

Да. Достаточно длинная транзакция в одном процессе блокирует всех. Для Web-приложений это критично.

Изучать, какие ручки повернуть для оптимизации запросов или улучшения записи, — это могло быть важно 20 лет назад

Должен разочаровать автора - сегодня это так же важно, как и 20 лет назад

и аргумент про «ну так база же всего в гигабайт, она скоро в l3 процессора будет помещаться» не работает, достаточно нескольких join, чтобы запросы даже к гигабайтной базе выполнялись секунды.
да что там гигабайтная, недавно наблюдал, как в постгресовской таблице на 100 мегабайт включили полнотекстовый поиск, а индексы забыли, полнотекстовый поиск через seq scan внезапно стал занимать полсекунды.

А теперь представим, что у этой БД, например, 10 одновременно активных пользователей. Они выполняют всякие CRUD-операции в БД, которые конкурируют за доступ к данным. И вот у нас даже не небольшой базюльке сложные требующие оптимизации запросы мало того, что выполняются уже не секунды, а минуты, так ещё и мешают выполняться более мелким своим конкурентам.

Не, погодите! Ведь реляционные базы данных померли уже, сейчас NoSQL рулит! Ведь столько статей про волшебную монгу было, не могли же они ошибаться!!!

Значит, пришло время изобрести NoSQLite

для .net чиков есть LiteDB

А всё просто - волшебство монги было в двух вещах, одна технологическая, вторая вызывает приток эндорфинов и в целом счастья. И первая вещь это сугубо определённый сектор задач где исходные данные не имеют точной формы и могут меняться, где потом аналитику по ним делать с запросами, где хочется быстроты в неструктурированных данных.

А вот эндорфиновая часть другая - дело в том что разработчик становится счастлив от отсутствия боли с заданием схем, всяких там реляций, унылых миграций, не нужно 100500 типов данных, не нужно даже таблицы создавать - отправил туда данные и оно само там разобралось. Ну и так как там нет оверхедов на всякое - и всякие сессии и прочее, что уходит в редисы обычно, тоже там же. А так как много всяких разных стартапов где цель может поменяться через две недели - вообще идеально. Запилил МВП, пару версий ещё, если взлетает стартап, ну а далее по классике - миграция на постгрес или что-то подобное, а также установка редиса и прочего.

В итоге монга то до сих пор классный инструмент - если ты конечно понимаешь зачем.

Эйфория от легкости записи в монгу быстро омрачается гемором при чтении — теперь у каждой записи потенциально свой собственный формат, любое обращение к базе нужно обмазывать увеличивающимся числом if'ов. Эйфория от скорости работы также быстро омрачается пониманием, что eventual consistency позволяет легко потерять данные в случае failover'а, а ненавистные join'ы теперь нужно делать вручную в коде приложения (или дублировать данные).


Поэтому за последние 10 лет граница между SQL и NoSQL сильно размылась, и современные базы позволяют использовать преимущества общих подходов (a.k.a. NewSQL).

Ну собственно ваш комментарий особо не противоречит моему - аналитика и стартапы всё ещё целевая аудитория 🙂

Э, нет, сейчас говорят не так. Сейчас говорят, что NoSQL уже тоже умер и мы возвращаемся обратно к реляционным СУБД, т.к. они круче :-D

Я не понял, почему автор говорит, что SQLite неустойчива к сбоям.

По двум серьёзным причинам SQLite не используется по умолчанию. Первая — это неустойчивость к сбоям, а вторая — масштабирование конкурентности. 

Вторая причина понятна. Насколько я помню, SQLite не поддерживает обращение к одному и тому же файлу бд с нескольких машин по сети. Но первая?

Из предыдущего контекста вроде выходит, что автор имел в виду отсутствие механизмов репликации в SQlite.

...приложение с одним процессом имеет одну точку отказа: потерян сервер — и потеряна вся база.

Это ведь автор того самого BoltDB, репозиторий которого заархивирован "потому что оно в идеальном состоянии и доделывать уже нечего", и из-за которого у Roblox был даунтайм на три дня, вызванный x500 write amplification в BoltDB?

Нет, там написано буквально другое. Автор считает что приложение в общем закончено и продакшн-рэди, но сил сопровождать нет, потому что любое изменение нужно тщательно выверять. Поэтому лучше оставить его таким.

Кто хочет - обратите внимание на на активный форк.

зачем перевирать то?

Из всей статьи так и не понял, основной плюс на который можно рассчитывать при использовании этого инструмента по сравнению с Postgres это отсутствие объемной документации?

Насчёт пользовательских приложений SQLite это огонь DB и musthave.
А вот серверная переделанная SQLite из статьи я вообще не понял, что автор имел ввиду. Какое-то журналирование ввёл своё - как это влияет на параллельность транзакций в базе я вообще не пойму.

Если честно, перевод статьи полное говно, пардон муа. Невозможно понять, что хотели сказать и как это работает, какой-то набор слов из гугл транслейт.
На самом деле смысл тут:
litestream.io/how-it-works
Они изобрели фоновую репликацию для SQLite, вот и всё.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий