Среда разработки My Visual Database (MVDB) позволяет использовать две СУБД: SQLite и MySQL. Тип используемой СУБД можно изменить в процессе разработки в любой момент. Но какую СУБД выбрать для вашего приложения?

Для начала внимательно посмотрите таблицу сравнения этих двух СУБД, после чего прочитайте комментарии о каждом аспекте в свете использования в проектах, созданных в MVDB.

АспектSQLiteMySQL
АрхитектураФайловаяКлиент-Сервер
Типы данныхОграниченный наборРасширенный набор
Хранение данныхОдин файлСерверное файловое хранилище
ТриггерыЕстьЕсть
Хранимые процедурыНетЕсть
ИндексацияЕстьЕсть
БезопасностьНизкаяВысокая
Система правНетВстроенная
Стоимость покупкиБесплатноБесплатно
Стоимость владенияНизкаяСредняя
Совместимость стандарта SQLВысокаяСредняя
ПроизводительностьНизкаяВысокая
Работа через ИнтернетНетНет

Архитектура

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

Архитектура клиент-сервер лишена указанных выше недостатков и обеспечивает одновременную работу большого числа пользователей, ограничения которой будут связаны только с производительностью сервера базы данных. Однако сам сервер базы данных требует к себе большего внимания: необходимо его настраивать и следить за его работой и производительностью. Выполнение резервного копирования данных также потребует больших усилий (см. Хранение данных).

Типы данных

Несмотря на то, что доступные типы данных существенно отличаются, внутреннее устройство MVDB минимизирует эти различия при разработке приложений, так как использует абстрактные типы данных:

ТипSQLiteMySQLПримечание
ТекстTEXTMEDIUMTEXTСтрока без ограничения длины (ограничения определяются СУБД).
Целое числоINTEGERINTЦелое число в диапазоне от -263 .. 263-1
Вещественное числоREALDOUBLEЧисло с плавающей точкой; 15-16 значащих цифр, диапазон порядка -324 .. 308
ДеньгиREALDOUBLEВещественное число с дополнительным форматированием формата отображения
Логическое значениеINTEGERINTХранятся два числовых значения: 
1 – да (истина)  0 – нет (ложь)
Дата/времяTEXTDATETIMEХранится в виде строки формата
 YYYY-MM-DD HH:MM:SS.SSS (SQlite)
или YYYY-MM-DD HH:MM:SS (MySQL)
ДатаTEXTDATEХранится в виде строки формата
 YYYY-MM-DD HH:MM:SS.SSS (SQlite)
или YYYY-MM-DD (MySQL)
ВремяTEXTTIMEХранится в виде строки формата
HH:MM:SS.SSS (SQlite) или
HH:MM:SS (MySQL)
ИзображениеTEXT+BLOBMEDIUMTEXT + MEDIUMBLOBМожно хранить изображение двумя способами:  внутри базы или ссылку на файл на диске.
ФайлTEXT+BLOBMEDIUMTEXT + MEDIUMBLOBМожно хранить файл двумя способами:  внутри базы или ссылку на файл на диске.
СсылкаINTEGERINTРеляционная связь между таблицами.

Ниже приводятся перечни типов данных для каждой СУБД

Типы данных SQLite

  • NULL — значение NULL
  • INTEGER — знаковое целочисленное значение, использует 1, 2, 3, 4, 6, или 8 байт в зависимости от порядка числа
  • REAL — число с плавающей точкой, занимает 8 байт для хранения числа в формате IEEE
  • TEXT — текстовая строка, при хранении используются кодировки UTF-8, UTF-16BE или UTF-16LE
  • BLOB — тип данных BLOB, массив двоичных данных (предназначенный, в первую очередь, для хранения изображений, аудио и видео).

Типы данных MySQL

  • TINYINT — очень малые целочисленные значения
  • SMALLINT — малые целочисленные значения
  • MEDIUMINT — средние целочисленные значения
  • INT или INTEGER — стандартные целочисленные значения
  • BIGINT — большие целочисленные значения
  • FLOAT — маленькие значения с плавающей точкой (точность до одного значения после точки). Всегда знаковые значения
  • DOUBLE, BOUBLE PRECISION, REAL — Стандартные значения с плавающей точкой. Всегда знаковые
  • DECIMAL, NUMERIC — распакованное значение с плавающей точкой, всегда знаковое.
  • DATE — дата
  • DATETIME — дата и время в одном значении
  • TIMESTAMP — временная отметка timestamp
  • TIME — время
  • YEAR — год, 2 или 4 числа (4 — по-умолчанию)
  • CHAR — строковое значение фиксированной длины, справа всегда добавляются пробелы до указанной длины при сортировке
  • VARCHAR — строковое значение переменной длины
  • TINYBLOB, TINYTEXT — значение типа BLOB или TEXT, 255 (2^8 — 1) символов — максимальныя длина
  • BLOB, TEXT — значение типа BLOB или TEXT, 65535 (2^16 — 1) символов — максимальныя длина
  • MEDIUMBLOB, MEDIUMTEXT — значение типа BLOB или TEXT, 16777215 (2^24 — 1) символов — максимальныя длина
  • LONGBLOB, LONGTEXT — значение типа BLOB или TEXT, 4294967296 (2^32 — 1) символов — максимальныя длина
  • ENUM — перечисление
  • SET — множество

Хранение данных

При использовании SQLite файл с данными называется sqlite.db и по умолчанию находится в той же папке, что и исполняемый файл проекта. Если вы изменили путь и название файла используемой базы данных, то его можно увидеть в файле settings.ini, в параметре server раздела Options. Сам файл settins.ini обычно находится рядом с исполняемым файлом или в папке %appdata%\MyVisualDatabase\Configs\%projectname%, где %appdata% – папка хранения данных приложений, а %projectname% – название вашего проекта (исполняемого файла). Место хранения файла инициализации меняется в настройках приложения, если имеются два файла (локальный и в папке данных приложений) settings.ini, то предпочтение отдается последнему.

Если проект использует MySQL, то данные расположены в папке сервера (файловом хранилище). Где именно, можно узнать, просмотрев параметр datadir в файле настойки my.ini, который находится в папке C:\Document and Settings\All Users\MySQL\MySQL Server 8.0\ (для версии сервера 8.0). Внутри папки файлового хранилища находятся служебные файлы сервера, а также папки схем, в которых расположены файлы с отдельными таблицами.

В следствии этого резервное копирование/восстановление/перенос данных в SQLite представляет собой тривиальную операцию копирования файла, а вот для MySQL необходимо использовать специальные утилиты выгрузки/загрузки данных или инструмент администратора MySQL (Workbench – для Windows, phpMyAdmin – для веб-сервера).

Триггеры, хранимые процедуры и индексация

В SQLite нет поддержки хранимых процедур, в остальном возможности совпадают с MySQL. Однако в среде разработки MVDB нет инструментов для реализации данных функций. Хотя система автоматически создает первичные и вторичные ключи, поддерживает целостность данных и добавляет возможность каскадного удаления связанных записей, на этом удобства среды разработки ограничиваются и для реализации триггеров и процедур необходимо использовать сторонние инструменты или создавать/модифицировать их программным способом через SQL-запросы каждый раз после того, как вы меняете структуру БД из среды разработки.

Безопасность и система прав

Многопользовательский доступ

Несмотря на существенные различия этих двух СУБД по обеспечению безопасного доступа, в MVDB эта разница нивелируется, так как поддержка множества пользователей, ролей и настройка прав доступа реализована на стороне клиента. Таким образом, при использовании встроенной системы прав, безопасность будет одинаково низкой. С другой стороны встроенная система многопользовательского доступа одинаково будет работать как на SQLite, так и на MySQL, что позволяет легко масштабировать приложение.

Стоимость покупки и владения

Обе СУБД распространяются свободно, однако использование СУБД MySQL предполагает наличие соответствующего оборудования и квалифицированных специалистов для настройки и обслуживания самой СУБД. Развертывание приложения SQLite сводится к копированию файлов, также возможен запуск и работа приложения со сменного носителя. А для развертывания клиент-серверного приложения потребуется предварительная установка и настройка сервера.

Совместимость стандарта SQL

MySQL имеет больше отличий от стандарта SQL, чем SQLite, это нужно учитывать при написании запросов, триггеров и хранимых процедур. Однако, если использовать стандартные инструменты no-code разработки MVDB, то об этих различиях вы никогда не узнаете. В то же время, если вы активно пользуетесь такой функциональностью, как вычисляемые поля, SQL-запросы для отображения таблиц или отчетов, то при смене СУБД необходимо внимательно проверять SQL-команды на совместимость.

Производительность

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

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

Работа через Интернет

Каждый второй клиент, обращающийся ко мне за разработкой, спрашивает о возможности совместной работы с приложением по сети интернет. Ответ на данный вопрос отрицательный: полноценной работы не получится, так как интернет является сетью без гарантированного сохранения соединения. Пересылаемые пакеты данных могут теряться, их могут “украсть” злоумышленники. Поэтому для обмена данных в сети интернет необходимо использовать защищенные протоколы с возможностью шифрования и возобновления передачи данных, например – HTTPS.

Но возможность использования интернета все же имеются для приложений, использующих СУБД SQLite и MySQL.

Облачное хранилище

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

Прямой доступ к серверу

К серверу MySQL можно подключиться по IP-адресу как в локальной сети, так и в глобальной, если выполнить проброску портов на маршрутизаторе, а IP-адрес будет фиксированным. Однако такое подключение может быть нестабильным, поэтому в приложении нужно предусмотреть действия по автоматическому переподключению при потере соединения с сервером базы данных. Также необходимо ограничивать объемы передаваемых данных, так как с увеличением размера вероятность потери пакета или обрыва соединения возрастает.

Удаленный доступ к компьютеру

Подходит для любой СУБД, так как пользователь подключается к своему рабочему компьютеру, находящемуся в локальной сети предприятия (вариант MySQL) или использующему файловую систему для доступа к данным (вариант SQLite). Этот способ безопасен не ограничивает производительность СУБД, но имеет свои особенности использования. В частности, распечатать отчет не получится, но можно выгрузить его в файл, а затем скачать.

Виртуальная рабочая станция

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *