Я знаю о SQLite давно и знаю, что он работает быстро, но я никогда не пробовал его на производственном сервере. Мне так и не удалось найти точную оценку того, какой объем трафика он мог обработать до отказа.
У кого-нибудь есть цифры или статья по этому поводу?
К сожалению, у меня нет для вас никаких цифр о возможностях загрузки, но несколько комментариев о некоторых факторах, ограничивающих производительность:
На скорость SQLite влияет скорость диска, на котором он находится, и наличие большого количества вставок / обновлений (т.е. доступ для записи). Блокировка записи ограничена скоростью вращения диска.
Транзакции запускаются по умолчанию, но вы получите лучшую производительность, если ты начать и зафиксировать транзакцию. У меня были очень быстрые массовые вставки при программной обработке транзакции
Если вы обычно только чтение data, то по моему опыту вы получите хорошую производительность. Таким образом, SQLite можно использовать в качестве системы кэширования для хранения чтений с сервера базы данных, особенно удаленных или сложных запросов.
Он использует меньше ресурсов, чем сервер базы данных, поэтому это может повлиять на производительность сайта, так как высвобождает больше ресурсов для веб-сервера и кода приложения.
Если вам требуется, чтобы было возможно несколько одновременных операций записи, то сервер базы данных (например, MySQL, Postgres) вполне может служить вам лучше.
Так как Деврим заявлено, что на сайте SQLite указано около 100 тыс. пользователей в день. Система Trac требует записи, поэтому в этом случае производительность, вероятно, будет ниже.
Я хочу добавить несколько моментов к этим хорошим ответам.
Текущая версия SQLite имеет WAL (Ведение журнала с упреждающей записью), чтобы чтение и запись могли выполняться одновременно. Таким образом, традиционное ограничение одного автора, упомянутое в предыдущих ответах, больше не существует. Я еще не видел WAL в производстве, поэтому не могу сказать, насколько хорошо он масштабируется.
Используя WAL или нет, если ваша база данных SQLite предназначена только для чтения (или обновляется пакетно) и умещается в ОЗУ (в вашей ОС достаточно свободной ОЗУ для хранения ее в буферах), она может очень хорошо масштабироваться в производственном веб-приложении. Я лично очень скептически относился к его производительности, масштабируемости и надежности, но сейчас после девяти месяцев в производстве он доказал свою эффективность самые сложные части системы отлично.
Sqlite отлично подходит для встраивания в приложения, и именно для этого он предназначен, но он определенно не «невероятно быстр». Я использую его для нескольких моих собственных приложений, чисто для удобства наличия только двух файлов, которые можно скопировать на другую машину, чтобы получить полностью работающее приложение. Тесты MySQL с использованием той же структуры, индексов и т. Д. Показывают, что Sqlite значительно медленнее даже для небольших баз данных. Я ожидал, что разница в производительности будет расти по мере роста размера базы данных, хотя я не могу сказать наверняка, поскольку я использовал ее только с базами данных размером менее 100 МБ.
Я думаю, что sqlite работает быстрее, чем файл text / xml (вы можете быть удивлены, если попробуете его). И он не поддерживает параллелизм, если вы хотите создать сайт для интрасети, где люди регистрируют свое рабочее время или используют trac-билеты, это может хорошо подойти. В остальном этого следует избегать и заменять на mysql или couchdb.
На веб-сайте sqlite говорится, что 100 тыс. пользователей в день должно быть хорошо, но я очень сомневаюсь в этом, так как простой проект trac сильно застревает при использовании офиса на 10 человек.
Sqlite не является традиционным клиент-серверным приложением БД. По сути, это библиотека, встроенная в другое приложение. Он разработан для однопользовательских настольных приложений. Вы абсолютно не хотите пытаться использовать его в качестве автономной замены MySQL / PostgreSQL / MS-SQL в многопользовательской среде, потому что вся БД заблокирована при записи. Вы столкнетесь с проблемами конкуренции даже при небольшой нагрузке, которая снизит производительность.