Вопрос: SQLite на производственном сервере? [закрыто]


Я давно знаю о SQLite, и я знаю, что он быстро вспыхивает, но я никогда не пробовал его на производственном сервере. Я никогда не мог найти надежную оценку того, сколько трафика он мог бы обработать до сбоя.

Кто-нибудь имеет какие-либо цифры или статью об этом?


7
2018-02-19 05:53


Источник


Предупреждение: Вопрос и некоторые ответы содержат неправильные представления, недоразумения и устаревшую информацию! - Chris S
Мы оцениваем SQLite как кэширующее решение в производстве: uri.agassi.co.il/2014/10/using-sqlite-for-production.html - Uri Agassi


Ответы:


К сожалению, у меня нет никаких данных о возможностях загрузки, но несколько комментариев о некоторых факторах, ограничивающих производительность:

  • Скорость SQLite зависит от скорости диска, на котором он включен, и есть ли много вложений / обновлений (например, доступ на запись). Блокировка записи ограничена скоростью отжима диска

  • Транзакции начинаются по умолчанию, но вы получаете лучшую производительность, если вы начать и совершить транзакцию. У меня были очень быстрые массовые вставки при обработке транзакций программно

  • Если вы, как правило, только чтение данных, тогда вы получите хорошую производительность в своем опыте. Таким образом, SQLite можно использовать в качестве системы кэширования для хранения данных сервера баз данных, особенно удаленных или сложных запросов.

  • Он использует меньше ресурсов, чем сервер базы данных, поэтому это может повлиять на производительность сайта, поскольку освобождает больше ресурсов для веб-сервера и кода приложения

  • Если вам требуется несколько одновременных операций записи, возможно, сервер базы данных (например, MySQL, Postgres) может служить вам лучше

В виде Devrim заявил, что сайт SQLite утверждает, что около 100 тыс. пользователей в день должно быть хорошо. Система Trac требует записи, поэтому производительность, вероятно, будет медленнее в этом случае


4
2018-02-19 09:25



Спасибо за ответы, так что в основном вы можете писать только в базу данных 1 за раз? Но вы все еще можете читать несколько человек из базы данных без блокировки? Если это так, я только что получил несколько идей для системы кеширования. - Dr Hydralisk
Количество «100K», которое выбрасывается, бесполезно. В документах говорится: «Вообще говоря, любой сайт, который получает менее 100 тыс. Хитов в день, должен отлично работать с SQLite». «Хит» обычно определяется как HTTP-запрос. Это включает в себя запрос для каждого .js, .css и изображения при попадании. Что это имеет отношение к производительности БД? Предполагая, что авторы означают «просмотр страницы», это все еще бесполезно. Сколько запросов на просмотр страницы? Соотношение чтения и записи? Какое оборудование работает с БД? Не рекомендуется использовать SQLite для веб-сайта, если для работы есть не менее дюжины других лучших инструментов. - jamieb
@Dr Hydralisk Да, чтение может происходить параллельно .. точно так же, как файл - Cez
@jamieb Точка о «хитах» справедлива. Никто не упомянул, какие аппаратные или серверные ресурсы доступны, так что это может быть небольшой виртуальный сервер для всех, что мы знаем. Воплощение баз данных SQLite в системе кэширования или в основном таблицы только для чтения Можно дают преимущества производительности, особенно когда сервер базы данных является удаленным. Кэш-память + SQLite-кеш запросов базы данных будет бить штаны только от запросов к базе данных. - Cez


У меня есть некоторые моменты, чтобы добавить к этим хорошим ответам.

Текущая версия SQLite имеет WAL (Запись на запись вперед), так что чтение и запись могут выполняться одновременно. Поэтому традиционное ограничение одиночного писателя, упомянутое в предыдущих ответах, больше не существует. Я еще не видел WAL в производстве, поэтому не могу комментировать, насколько хорошо он масштабируется.

Используя WAL или нет, если ваша база данных SQLite доступна только для чтения (или пакетно обновлена), и она помещается в ОЗУ (у вашей ОС достаточно резервной памяти, чтобы поддерживать ее в буферах), она может очень хорошо масштабироваться в производственном веб-приложении. Я лично скептически относился к его производительности, масштабируемости и надежности, но теперь через девять месяцев в производстве он доказал, что работает даже самые сложные части системы очень хорошо.


3
2018-04-18 00:43





Sqlite отлично подходит для внедрения в приложениях, и для этого он предназначен, но это, безусловно, не «невероятно быстро». Я использую его для нескольких своих приложений, исключительно для удобства только двух файлов, которые можно скопировать на другую машину, чтобы дать полностью работающее приложение. Тесты на MySQL, использующие ту же структуру, индексы и т. Д., Показывают, что Sqlite значительно медленнее, даже для небольших баз данных. Я ожидал бы, что разница в производительности будет возрастать по мере роста размера базы данных, хотя я не могу сказать наверняка, поскольку я использовал ее только с базами данных менее 100 МБ.


1
2018-02-19 06:32



PRAGMA можно настроить для повышения производительности за счет потенциально случайного повреждения базы данных (но не потери данных). По моему опыту, я мог бы заставить SQLite взять вставки на уровне 250-300рп на старой машине WindowsXP. - djangofan
-1, потому что я не согласен. Я создал и запросил базы данных SQLite размером в несколько ГБ, и я бы никогда не получал одинаковое количество запросов в секунду, например MySQL (в том же типе аппаратного обеспечения). SQLite может легко делать 120 тыс. Запросов на запись в секунду, если вы знаете, как правильно массаж Это. - Alix Axel


Я думаю, что sqlite работает быстрее, чем текстовый / xml-файл (вы можете быть удивлены, если попробуете его). И это не поддерживает параллелизм, если вы хотите создать сайт для интрасети, где люди регистрируют свое рабочее время или используют билет на трассировку, это может хорошо случиться. Помимо этого его следует избегать и заменять mysql или couchdb.

Сайт сайта sqlite говорит, что 100 тыс. пользователей в день должно быть прекрасным, но я очень сомневаюсь в этом, так как простой проект trac сильно застрял с использованием 10 приложений ppl.


0
2018-02-19 06:04





Sqlite не является традиционным клиентским / серверным БД-приложением. Это, по сути, библиотека, встроенная в другое приложение. Он предназначен для однопользовательских настольных приложений. Вы абсолютно не хотите пытаться использовать его как своего рода автономную замену MySQL / PostgreSQL / MS-SQL в многопользовательской среде, потому что вся БД заблокирована при записи. Вы будете иметь дело с спорными проблемами даже при небольшой нагрузке, которая разрушит производительность.


0
2018-02-19 08:11



В WAL заблокированы только параллельные авторы. Кроме того, двигатель MySQL по умолчанию (MyISAM) также блокирует полные таблицы всякий раз, когда есть запрос на запись. - Alix Axel
@AlixAxel Этот ответ был написан за шесть месяцев до того, как WAL был доступен. - jamieb