SQLite против MySQL — в чем разница?
Ядром множества сайтов или приложений является база данных. На рынке доступно множество решений и большинство из них являются проектами с открытым исходным кодом. Самим популярными же являются MySQL и SQLite, их популярность находится на одной уровне. В данном материале мы разберем основные отличия данных решений и поможем вам разобраться в выборе под конкретную задачу SQLite или MySQL.
Система управления базами данных, очень часто сокращенно называется СУБД, часто называется РСУБД и имеет так же сокращенное название RDBMS — зачастую данные термины обозначают система управления именно реляционными базами данных.
На самом элементарном уровне все базы данных используются для управления, обслуживания и манипулирования данными и могут быть не только реляционными, но NoSQL в данной статье же речь пойдет только о реляционных базах.
NoSQL — неструктурированная и все еще развивающаяся модель
Реляционная СУБД — имеет свою структуру и — это самая широко используемая модель.
Что такое SQLite? Обзор СУБД SQLite и ее применения в Android.
Что такое система управления базами данных
СУБД — это программное обеспечение, которое взаимодействует с базой данных. Он облегчает выполнение нескольких операций с базами данных, которыми он управляет. Вот некоторые из этих операций :
- Управляет доступом к базе данных
- Выполняет SQL-запросы
- Пишет данные в базу данных
- Обновляет данные базы данных
- Удаляет данных из базы данных
В большинстве случаев база данных и СУБД используются как взаимозаменяемые понятия. Однако база данных — это набор хранимых данных, а СУБД — это программное обеспечение, используемое для доступа к базе данных.
Каждая СУБД имеет базовую модель, которая определяет структуру базы данных и способ извлечения данных. Реляционная СУБД использует реляционную модель данных. Здесь данные организованы в виде таблиц. Каждая таблица имеет набор атрибутов или столбцов, и каждая строка, также называемая кортежами, имеет отношение. В связи с этим структурированные СУБД называются РСУБД.
Для работы с СУБД необходимо использовать SQL или язык структурированных запросов. У каждой СУБД свой диалект.
SQLite против MySQL
SQLite, как и MySQL, являются СУБД с открытым исходным кодом. Давайте углубимся в их различия.
Архитектурная разница — SQLite против MySQL
- SQLite — это проект с открытым исходным кодом, доступный любому желающему.
- MySQL — это проект с открытым исходным кодом, принадлежащий Oracle.
SQLite — это автономная база данных без сервера или также называемая встроенная база данных, что означает, что механизм БД работает как часть приложения.
С другой стороны, MySQL требует для работы сервер СУБД. MySQL потребует клиентской и серверной архитектуры для взаимодействия по сети.
Поддержка типов данных — SQLite против MySQL
SQLite поддерживает только 5 типов данных: Blob, Integer, Null, Text, Real.
SQLite — Установка базы, создание таблицы, примеры запросов.
MySQL поддерживает намного больше типов данных, а именно:
Tinyint, Smallint, Mediumint, Int, Bigint, Double, Float, Real, Decimal, Double precision, Numeric, Timestamp, Date, Datetime, Char, Varchar, Year, Tinytext, Tinyblob, Blob, Text, MediumBlob, MediumText, Enum, Set, Longblob, Longtext.
Как видите, MySQL поддерживает намного больше типов данных.
Хранение и переносимость — SQLite против MySQL
Размер библиотеки SQLite составляет около 250 КБ, а размер сервера MySQL — около 600 МБ. SQLite напрямую хранит информацию в одном файле, что упрощает копирование. Никаких настроек не требуется, и процесс может быть выполнен с минимальной поддержкой.
Перед копированием или экспортом MySQL вам необходимо сжать его в один файл. Для больших баз данных это займет много времени.
Множественный доступ и масштабируемость — SQLite против MySQL
SQLite не имеет каких-либо конкретных функций управления пользователями и, следовательно, не подходит для многопользовательского доступа. MySQL имеет хорошо построенную систему управления пользователями, которая может обрабатывать несколько пользователей и предоставлять различные уровни разрешений.
SQLite подходит для небольших баз данных. По мере роста базы данных требования к памяти также увеличиваются при использовании SQLite. При использовании SQLite оптимизировать производительность сложнее. Это имеет несколько ограничений записи.
Напротив, MySQL легко масштабируется и может обрабатывать большую базу данных с меньшими потребностями ресурсов.
Безопасность и простота установки — SQLite против MySQL
SQLite не имеет встроенного механизма аутентификации. К файлам базы данных может получить доступ кто угодно. Однако MySQL имеет множество встроенных функций безопасности. Это включает аутентификацию с использованием имени пользователя, пароля и SSH.
SQLite не требует слишком большого количества настроек и прост в настройке. MySQL требует большего количества конфигураций по сравнению с SQLite. MySQL также предлагает больше руководств по настройке.
Когда использовать SQLite
Есть определенные моменты, когда SQLite может быть более эффективным, чем альтернатива. Вот некоторые из этих сценариев:
- Разработка небольших автономных приложений
- Небольшие проекты, не требующие большой масштабируемости
- Когда вам нужно читать и писать прямо с диска
- Базовая разработка и тестирование
Когда использовать MySQL
Ниже приведены несколько сценариев, в которых MySQL является лучшим вариантом:
- Многопользовательский доступ к приложениям
- Когда пользователям требуются надежные функции безопасности и аутентификации
- С распределенными системами
- С приложениями, требующими большей базы данных
- С проектами, требующими большей масштабируемости
- Веб-приложения
- При разработке индивидуальных решений
Плюсы и минусы — SQLite против MySQL
Давайте быстро подытожим существенные различия между двумя вариантами:
Преимущества SQLite:
- Файловый, простой в настройке и использовании
- Подходит для базовой разработки и тестирования
- Легко переносится
- Использует стандартный синтаксис SQL с небольшими изменениями
- Легко использовать
Недостатки SQLite:
- Отсутствие функций управления пользователями и безопасности.
- Не легко масштабируется
- Не подходит для больших баз данных
- Не может быть изменен
Преимущества MySQL:
- Легко использовать
- Предоставляет множество функций, связанных с базой данных
- Хорошие функции безопасности
- Легко масштабируется и подходит для больших баз данных
- Обеспечивает хорошую скорость и производительность
- Обеспечивает хорошее управление пользователями и контроль множественного доступа
Недостатки MySQL:
- Требуется некоторый технический опыт для настройки
- Немного другой синтаксис по сравнению с обычным SQL
Заключение
Это все. Мы узнали, что такое СУБД, СУБД и разница между SQLite и MySQL! Оба имеют небольшие архитектурные и функциональные различия. В конце концов, только вы можете решить, что лучше всего подходит для вашего проекта. Мы надеемся, что теперь вы сможете принять более осознанное решение!
Удачного развития!
Свежие записи
- Начало работы с Liquibase
- Укрощение высокой загрузки ЦП cAdvisor
- Понимание действий GitHub
- Добавление собственных бегунов (GitHub Runers)
- VPN, Proxy и Tor: сохранение анонимности в сети в 2022 году
Записи Архивов по месяцам
Рубрики
- Active Directory (1)
- Airflow (2)
- Ansible (1)
- Apache NiFi (3)
- Apache Tomcat (1)
- Apache Zeppelin (3)
- Artifactory (1)
- Astra Linux (4)
- cadvisor (1)
- CentOS8 (33)
- CI/CD (8)
- CMS (3)
- Confluence (1)
- Debian (6)
- DNF (1)
- DNS (1)
- Docker (4)
- ETL (2)
- Fedora (1)
- ftp (5)
- GitHub (4)
- GitLab (1)
- Grafana (8)
- InfluxDB (2)
- InfluxDB 2.0 (1)
- Linux (163)
- liquibase (1)
- MySql (7)
- NextCloud (4)
- Nginx (5)
- Oracle Database (1)
- OwnCloud (3)
- Postgresql (7)
- Prometheus (3)
- Proxy (1)
- RedHat (39)
- SQLite (1)
- SSH (4)
- SVN (1)
- Tor (1)
- Ubuntu (24)
- Ubuntu Studio (1)
- VPN (2)
- Web Panel (2)
- Web Сервер (13)
- Windows (24)
- Zabbix (16)
- Автоматизация обмена данными (3)
- Анализ и Визуализация Данных (3)
- Анализ Кода (1)
- Анонимные ОС (4)
- Антивирусы (1)
- (4)
- Виртуальные Машины (8)
- Клиенты Удаленного Подключения (1)
- Команды (7)
- Менеджер Пакетов (2)
- Облако (6)
- Окружение рабочего стола (1)
- Операционные Системы (184)
- Почтовые Клиенты (4)
- Программное Обеспечение (94)
- Сетевое Хранилище (21)
- Система Wiki (1)
- Система управления версиями (9)
- Системы Автоматизации Развертывания (7)
- Системы Мониторинга (27)
- Системы Управления Базами Данных (22)
- Системы управления проектами (6)
- Системы Управления Проектом (9)
- Служба каталогов (2)
- Средства Разработки (3)
- Удаленное Подключение (11)
Источник: dataenginer.ru
Введение в SQLite
SQLite – это библиотека, написанная на языке C, реализующая SQL механизм работы с данными, другими словами, движок баз данных.
SQLite не является клиентской библиотекой, позволяющей только подсоединять приложение к серверу баз данных, SQLite сама является сервером баз данных.
SQLite библиотека производит запись данных непосредственно в файл на диске, а также позволяет читать, обновлять и искать данные на основе языка запросов SQL, преимущественно ориентируясь на стандарт SQL 92.
Основные преимущества использования SQLite
Простота установки .
В PHP 5 поддержка SQLite встроена автоматически (SQLite 2.8.14).
Легкость администрирования .
А поскольку SQLite хранит данные в обычных файлах, то отпадает всякая необходимость в дополнительных средствах администрирования. Каждый пользователь имеет свои собственные базы данных (в любом количестве создаваемые самим пользователем!) и права доступа реализуются файловой системой сервера автоматически.
Простота использования .
В отличие от других баз данных SQLite является бестиповой базой. При создании таблицы необходимо только указать имена полей, но не их тип, так как все данные SQLite хранит в формате строки. Единственное отличие по типу актуально только в случае сортировки данных и это различие обыгрывается внутри самой SQLite.
Производительность .
Поскольку движок базы и интерфейс к ней реализованы как единое целое, огромный преимуществом SQLite является высокая производительность – для большинства типичных задач приложение, построенное на SQLite, работает быстрее, чем при использовании MySQL, в 2-3 раза и быстрее PostgreSQL в 10-20 раз! И это притом, что объем памяти сервера, который он выделяет для SQLite, очень и очень мал.
По данным тестирования — www.hwaci.com/sw/sqlite/speed.html
Легкая переносимость между платформами, веб-серверами и приложениями.
Фалы баз данных совместимы с различными платформами (Windows, UNIX). Для переноса базы данных на веб-сервер нужно всего лишь перенести 1 файл. Резервное копирование данных также осуществляется копированием файла базы данных.
Объектно-ориентированный интерфейс .
Еще одним не менее важным преимуществом SQLite является возможность использования мощного объектно-ориентированного интерфейса к SQLite, что позволяет строить высокоэффективные, легко расширяемые приложения.
Возможность хранить данные в базе объемом до 2 терабайт .
SQLite позволяет сохранять строки и бинарные данные неограниченной длины .
Ограничения использования SQLite
Прежде всего, SQLite предназначена для небольших и средних по объему приложений. Особенно актуально использование SQLite в случае, когда в основном проводятся операции записи и считывания данных. Однако при чрезвычайно активном обращении к данным или в случае частых сортировок SQLite работает медленнее своих конкурентов из-за встроенного механизма блокировки файлов (только при модификации данных) и необходимости проверки типа полей для выбора способа сортировки.
Источник: www.internet-technologies.ru
SQLite — Введение
SQLite — это встроенная библиотека, которая реализует автономный, безсерверный, нулевой конфигурации, транзакционный механизм СУБД SQL. Это база данных, которая настроена на нуль, что означает, как и другие базы данных, которые вам не нужно настраивать в вашей системе.
SQLite не является автономным процессом, как другие базы данных, вы можете связать его статически или динамически в соответствии с вашим требованием с вашим приложением. SQLite напрямую обращается к своим файлам хранения.
Особенности SQLite
- SQLite не требует отдельного процесса сервера или системы для работы (без сервера).
- SQLite поставляется с нулевой конфигурацией, что означает отсутствие необходимости в настройке или администрировании.
- Полная база данных SQLite хранится в одном кросс-платформенном диске.
- SQLite очень маленький и легкий, менее 400KiB полностью сконфигурированный или менее 250KiB с дополнительными функциями, опущенными.
- SQLite является автономным, что означает отсутствие внешних зависимостей.
- SQLite-транзакции полностью совместимы с ACID, обеспечивая безопасный доступ к нескольким процессам или потокам.
- SQLite поддерживает большинство функций языка запросов, найденных в стандарте SQL92 (SQL2).
- SQLite написан на ANSI-C и предоставляет простой и простой в использовании API.
- SQLite доступен в UNIX (Linux, Mac OS-X, Android, iOS) и Windows (Win32, WinCE, WinRT).
Ограничения SQLite
В SQLite имеется несколько неподдерживаемых функций SQL92:
Название | Описание |
RIGHT OUTER JOIN | Внедрен только LEFT OUTER JOIN. |
FULL OUTER JOIN | Внедрен только LEFT OUTER JOIN. |
ALTER TABLE | Поддерживаются варианты RENAME TABLE и ADD COLUMN команды ALTER TABLE. DROP COLUMN, ALTER COLUMN, ADD CONSTRAINT не поддерживаются. |
Trigger support | Для каждого триггера ROW поддерживаются, но не для триггеров EACH STATEMENT. |
VIEWs | VIEWs в SQLite доступны только для чтения. Вы не можете выполнять оператор DELETE, INSERT или UPDATE в представлении. |
GRANT и REVOKE | Единственными правами доступа, которые могут быть применены, являются обычные разрешения доступа к файлу базовой операционной системы. |
Команды SQLite
Стандартные команды SQLite для взаимодействия с реляционными базами данных аналогичны SQL. Это CREATE, SELECT, INSERT, UPDATE, DELETE и DROP.
Название | Описание |
CREATE | Создание новой таблицы, представление таблицы или другой объект в базе данных. |
ALTER | Изменяет существующий объект базы данных, такой как таблица. |
DROP | Удаляет всю таблицу, представление таблицы или другого объекта в базе данных. |
INSERT | Создает запись |
UPDATE | Изменяет записи |
DELETE | Удаляет записи |
SELECT | Извлекает определенные записи из одной или нескольких таблиц |
Источник: unetway.com
SQLite — самая простая база данных, которая работает везде
Мы уже рассказывали подробно о том, что такое базы данных, как они устроены, какие бывают и как работают. Вот короткая версия:
- База данных — это способ хранения разных данных в одном месте.
- Внутри базы могут храниться разные данные: фото, текст, музыка, числа, код, ссылки, цены и что угодно ещё.
- Когда говорят про базы данных, чаще всего имеют в виду табличные базы данных — те, где информация хранится в разных таблицах;
- Пример табличной базы — MySQL. Она многое умеет, к ней написано много документации и правил, поэтому начинают обычно с неё.
- Чтобы управлять данными в базе, например добавлять новые записи, удалять старые или что-то искать, используют специальный язык запросов к базе — SQL.
- Эти запросы обрабатывает СУБД — система управления базами данных. Это как движок для сайтов — он выполняет запросы, работает с базой и отдаёт нам результаты.
Получается, нам на компьютере нужна отдельная система, чтобы управлять данными в базе, и обычно это тоже MySQL. Это значит, что все запросы из приложения или сайта поступают сначала в эту систему, система применяет их к базе, получает ответ и передаёт ответ в это приложение.
Но есть способ проще: использовать SQLite.
Что такое SQLite
SQLite — это встраиваемая СУБД, когда система управления встраивается в саму программу. Это значит, что все запросы и команды идут в базу не через посредника, а напрямую из приложения. Чтобы встроить SQLite в код, достаточно подключить нужную библиотеку.
А ещё SQLite — это проект с открытым исходным кодом. Это значит, что его может использовать кто угодно без опасения, что проект закроют и все базы сразу перестанут работать.
Почему это просто и чем отличается от MySQL
Все данные в SQLite хранятся в одном файле — таблицы, служебные поля, связи и всё остальное. Это упрощает работу с базой и позволяет легко переносить данные из одного места в другое.
MySQL. Допустим, мы запустили и настроили обычную базу данных на одном компьютере, а потом захотели перенести её на другой. Чтобы это сделать, нужно:
- найти все файлы, которые относятся к базе;
- положить их в новое место;
- прописать настройки;
- объяснить СУБД, как подключиться к базе;
- проверить, что подтянулись все поля, записи и связи.
Это несложно, но требует кропотливой ручной работы.
SQLite. У SQLite всё иначе — чтобы перенести базу в новое место достаточно:
- перенести один файл базы данных;
- поменять в коде одну строку с путём к этому файлу.
Благодаря такой простоте настройки, подключения и развёртывания базы SQLite и завоевал такую популярность.
Возможности SQLite
Все SQL-подобные СУБД умеют плюс-минус одно и то же и отличаются в основном деталями: триггерами, работой с кэшем, процедурами и правилами обработки. Чем крупнее СУБД, тем больше она отличается от других, даже если там используется тот же самый язык запросов SQL.
Разработчики SQLite поступили иначе: они взяли все основные возможности СУБД и отказались от узкоспециализированных запросов. Идея была в том, чтобы сделать универсальную базу для всех — простую, понятную и надёжную. Поэтому SQLite умеет всё, что умеют другие базы:
- работать с запросами;
- создавать связи;
- хранить данные различных типов;
- работать с шаблонами;
- понимать выражения и функции;
- работать с присоединёнными базами.
Чтобы SQLite работала быстро на любом устройстве, в неё специально добавили некоторые ограничения: уменьшили длину строки, количество колонок, таблиц и максимальную длину SQL-запроса. Но даже с такими ограничениями база может занимать около 280 терабайт.
Стабильность и надёжность
Особенность разработки SQLite также в том, что тестами покрыто 100% исходного кода. Это значит, что в нём протестированы каждая функция, обработчик и класс, причём на всех уровнях — от юнита до всей системы.
Тестов в разработке SQLite настолько много, что объём кода для тестов давно превысил объём самого SQLite. А всё для того, чтобы база данных работала даже в самых сложных условиях, например:
- при нехватке памяти;
- при неправильно сформированных запросах;
- при внезапном отключении питания;
- при одновременном доступе к базе миллиона пользователей;
- на слабом железе;
- при повреждениях оперативной памяти во время выполнения запроса.
По этой причине SQLite часто используется там, где нужна максимальная надёжность и работа в неопределённых условиях.
Где используется
SQLite поддерживается большинством языков программирования без дополнительных настроек:
Если говорить про мобильные приложения, сервисы и программы, то список тех, кто использует SQLite, будет очень большой, например:
- большинство программ для iOS и Android,
- Google Chrome,
- Adobe Photoshop Lightroom,
- Safari,
- Nextcloud,
- 1С:Предприятие,
- Скайп.
Что дальше
В следующей статье напишем простой код на Python, в котором поработаем с базой: создадим её и наполним разными данными. Подпишитесь, чтобы не пропустить продолжение.
Источник: thecode.media
SQLite — замечательная встраиваемая БД (часть 1)
Решил все-таки написать статью про SQLite, в которой хочу обобщить свой 3-х летний опыт использования этой БД под Windows. Вижу, что тема популярная, но информации мало.
Эта статья не для начинающих программистов.
Она не является учебником по SQL.
Она не агитирует использовать SQLite.
Она не агитирует не использовать SQLite.
Статья написана в виде вопросов от гипотетического новичка в SQLite и ответов на них (поскольку информации очень много и так хоть немного проще ее структурировать).
Что такое SQLite?
SQLite — это встраиваемая кроссплатформенная БД, которая поддерживает достаточно полный набор команд SQL и доступна в исходных кодах (на языке C).
Исходные коды SQLite находятся в public domain, то есть вообще никаких ограничений на использование.
Сайт (с прекрасной документацией на английском): http://sqlite.org
Текущая версия: 3.7.13
SQLite можно скомпилировать самому, но я скачиваю ее уже скомпилированную в виде Windows DLL.
Для собственной сборки обычно скачивают т.н. «amalgamation»,
т.е. исходники SQLite в виде единого файла на языке C + sqlite3.h.
Чтобы уменьшить размер кода SQlite, выкинув ненужные ништяки, используются всякие DEFINE.
Насколько SQLite популярна?
Кратко: она везде. Как минимум, на любом смартфоне.
Насколько она надежна?
Очень. При выпуске версии она проходит через ряд серьезнейших автоматических тестов (проводится ~ 2 млн тестов), покрытие кода тестами 100% (с августа 2009).
А какие еще инструменты дают разработчики?
Доступна консольная утилита для работы с базами (sqlite3.exe, «a command-line shell for accessing and modifying SQLite databases»).
И все?
Да, от основных разработчиков — все. Однако, другие люди пишут всякие менеджеры и пр.
Лично я так и не нашел идеального и пользуюсь консолью.
Что значит «достаточно полный набор SQL»?
Как известно, в своем развитии SQL устремился в разные стороны. Крупные производители начали впихивать всякие расширения. И хотя принимаются всякие стандарты (SQL 92), в реальной жизни все крупные БД не поддерживают стандартов полностью + имеют что-то свое. Так вот, SQLite старается жить по принципу «минимальный, но полный набор». Она не поддерживает сложные штуки, но во многом соответствует SQL 92.
И вводит некие свои особенности, которые очень удобны, но — не стандартны.
Что конкретно в поддержке SQL может вызвать недоумение?
Нельзя удалить или изменить столбец в таблице (ALTER TABLE DROP COLUMN…, ALTER TABLE ALTER COLUMN… ).
Есть триггеры, но не настолько мощные как у крупных RDBMS.
Есть поддержка foreign key, но по умолчанию — она ОТКЛЮЧЕНА.
Нет встроенной поддержки UNICODE (но ее, вообщем, нетрудно добиться).
Нет хранимых процедур.
А что своего хорошего или необычного?
a) каждая запись содержит виртуальный столбец rowid, который равен 64-битному номеру (уникальному для таблицы).
Можно объявить свой столбец INTEGER PRIMARY KEY и тогда этот столбец станет rowid (со своим именем, имя rowid все равно работает).
При вставке записи можно указать rowid, а можно — не указывать (и система тогда вставит уникальный).
Подробности: www.sqlite.org/autoinc.html
b) можно без труда организовать БД в памяти (это очень удобно и чуть позже расскажу подробнее);
c) легко переносить: по умолчанию, БД — это один файл (в кроссплатформенном формате);
d) тип столбца не определяет тип хранимого значения в этом поле записи, то есть в любой столбец можно занести любое значение;
e) много встроенных функций (которые можно использовать в SQL): www.sqlite.org/lang_corefunc.html;
Не понял — что там с типом? Зачем нужен тип столбца тогда вообще?
Тип столбца определяет как сравнивать значения (нужно же их привести к единому типу при сравнении, скажем, внутри индекса).
Но не обязывает заносить значения именно такого типа в столбец. Нечто вроде weak typing.
Допустим, мы объявили столбец как «A INTEGER».
SQlite позволяет занести в этот столбец значения любого типа (999, «abc», «123», 678.525).
Если вставляемое значение — не целое, то SQlite пытается привести его к целому.
Т.е. строка «123» превратится в целое 123, а остальные значения запишутся «как есть».
Так можно вообще не задавать тип столбца?
Очень часто так и делается: CREATE TABLE foo (a,b,c,d).
А как с архитектурой? Сервера-то нету?
Сервера нету, само приложение является сервером. Доступ к БД происходит через «подключения» к БД (нечто вроде хэндла файла ОС), которые мы открываем через вызов соот-й функции DLL. При открытии указывается имя файла БД. Если такого нету — он автоматически создается.
Допустимо открывать множество подключений к одной и тоже БД (через имя файла) в одном или разных приложениях.
Система использует механизмы блокировки доступа к файлу на уровне ОС, чтобы это все работало
(эти механизмы обычно плохо работают на сетевых дисках, так что не рекомендуется использовать SQlite с файлом на сети).
Изначально SQlite работал по принципу «многие читают — один пишет».
То есть только одно соединение пишет в БД в данный момент времени. Если другие соединения попробуют тоже записать, то словят ошибку SQLITE_BUSY.
Можно, однако, ввести таймаут операций. Тогда подключение, столкнувшись с занятостью БД, будет ждать N секунду прежде, чем отвалиться с ошибкой SQLITE_BUSY.
И как быть?
Либо одно подключение и все запросы через него, либо исходить из возможного таймаута и предусмотреть повтор выполнения SQL.
Есть и еще одна возможность: не так давно появился новый вид лога SQlite: Write Ahead Log, WAL.
Если включить для БД именно этот режим лога, то несколько подключений смогут одновременно модифицировать БД.
Но в этом режиме БД уже занимает несколько файлов.
Ну понятно теперь почему SQLite — ужасна, ведь у нее нет ГЛОБАЛЬНОГО КЭША?
Действительно, все современные RDBMS немыслимы без глобального разделяемого кэша, который может хранить всякие ништяки вроде скомпилированных параметризованных запросов. Этим занят сервер, которого тут нет. Однако, в рамках одного приложения SQlite может разделять кэш между несколькими подключениями (читать тут: www.sqlite.org/sharedcache.html) и немного сэкономить память.
А почему все жалуются, что SQLite — тормозит?
Две причины. Первая — настройки по умолчанию. Они работают на надежность, а не на производительность.
Вторая — непонимание механизма фиксации транзакций. По умолчанию после любой команды SQlite будет фиксировать транзакцию (то есть ожидать пока БД окажется в целостном состоянии для отключения питания). В зависимости от режима паранойи SQLite потратит на это от 50 до 300 мс (ожидая окончания записи данных на диск).
Что делать-то? Мне нужно вставить 100 тыс записей и быстро!
Удалить индексы, включить режим синхронизации OFF (или NORMAL), вставлять порциями по N тысяч (N — подобрать, для начала взять 5000). Перед вставкой порции сделать BEGIN TRANSACTION, после — COMMIT.
А вот я нашел ошибку! Как рапортовать?
Дело в том, что популярность SQLite страшна — она везде. Это не шутка.
И разработчики столкнулись с валом сообщений об ошибках, которые либо были вызваны непониманием, либо являлись скрытым feature request. Они, фактически, закрыли прямой прием репортов с ошибками.
Так что следует подписаться на список рассылки и описать там проблему и надеятся на лучшее.
Лично у меня возникла ситуация, которую я трактовал как дефект SQLIte. Я описал это в рассылке. В следующей версии поведение SQLite было исправлено.
Удобная утилита, чтобы поиграться с SQLite.
Продолжение следует.
Источник: habr.com