Тесты
RDM VS SQLite
Главная страница » ERP, WMS, MRP, MES, SCM, OMS, TMS, EAM для любого бизнеса.Маркировка и Инвентаризация.RFID, Data matrix и QR. » Raima » Тесты » Как RDM превосходит SQLite
Как Raima Database Manager превосходит SQLite
4 главные проблемы с SQLite и как Raima Database Manager их избегает
Задача 1: Масштабируемая производительность
RDM не имеет ограничений
Задача 2. Поддержка платформы
Независимость от платформы
Задача 3: Flash Media Lifetime
Оптимизирован для Flash Media
Задача 4: Интеграция со средой разработки
Коробочная сборка
Переходите с SQLite на RDM для масштабируемости и производительности
Raima Database Manager поддерживает почти тот же уровень SQL, что и SQLite. Таким образом , пользователю просто нужно будет экспортировать содержимое из базы данных в CSV, XML или формат SQL, запустить RDM -create на их файл схемы базы данных, а затем запустить RDM -import на CSV, XML или файл формата SQL и у пользователя будет RDM-эквивалент базы данных SQLite. Оттуда пользователю, возможно, придется перенести ваше приложение, но RDM поддерживает интерфейс ODBC SQL, интерфейс JDBC Java и интерфейс ADO.NET C #, поэтому, возможно, не потребуется существенных изменений кода. См. Руководство по миграции.
Пример сравнения производительности - Raima Database Manager (RDM) и SQLite
Большинство современных операционных систем и оборудования поддерживают многопоточность. SQLite не использует эту возможность из-за дизайна в SQLite. Когда имеется много одновременных записей в базу данных SQLite, пользователи приложения испытывают значительное снижение скорости, и приложение может не соответствовать ожиданиям пользователей по производительности. Хорошо известно, что доступ на запись в базу данных SQLite может быть предоставлен, только если другие запросы не обслуживаются. Это дизайн «одна запись за раз» в SQLite, который замедляет пропускную способность. Таким образом, многие владельцы приложений вынуждены искать альтернативные варианты встроенных баз данных для устранения узких мест в производительности.
Raima собрала тест, который доказывает различия между решением для баз данных RDM и SQLite. В этом тесте мы продемонстрируем, что RDM является хорошей альтернативой SQLite.
Как мы сделали тест
В этом сравнении производительности мы использовали стандартную тестовую среду TPC-B с сайта www.tpc.org . TPC-B измеряет пропускную способность с точки зрения того, сколько транзакций в секунду может выполнять система. Тест был изменен, чтобы можно было сравнивать, когда несколько клиентов выполняют параллельную работу.
Мы использовали одну и ту же тестовую среду и фреймворк как для SQLite, так и для RDM. В тесте RDM оказался значительно быстрее SQLite. См. Иллюстрацию ниже. Для тестирования использовалась платформа RDM версии 14.1, работающая с SQLite v3.23 на стандартной машине с процессором Windows 10, Intel i7 с 16 ГБ ОЗУ и стандартным жестким диском SATA.
Raima Database Manager имеет дизайн, оптимизированный для встроенных систем с современным и эффективным набором API, а также хорошо продуманный формат файлов для хранения баз данных. RDM допускает одновременную запись и чтение и, следовательно, может выполнять во много раз больше работы, чем SQLite.
Основные моменты тестирования:
из-за поддержки многопоточности RDM RDM выполняет значительно большее количество транзакций по сравнению с SQLite.
На диаграмме ниже RDM продвигает в четыре раза больше транзакций, чем SQLite может в те же временные рамки и аппаратные ограничения. Если этот тест выполняется с использованием дизайна в памяти , разница еще более заметна.
Разбивка приведенного выше теста дополнительно показывает количество транзакций, выполняемых в секунду на каждом клиенте базы данных.
Заключение
Как показано на приведенном выше рисунке, из-за свойственной конструкции SQLite, имеет переменное количество транзакций, которые он может выполнять в секунду на каждом клиенте базы данных. RDM обеспечивает до четырех раз увеличение количества транзакций в секунду на одного клиента. Если важны стабильность и последовательность, RDM отлично подойдет для таких задач.
RDM разработан для обеспечения согласованных и надежных транзакций в секунду, при этом он удобен и эффективен для многих пользователей.
Чтобы узнать больше о тестах производительности, нажмите здесь
RDM поддерживает почти тот же уровень SQL, что и SQLite.
Функции | Синтаксис / логика SQLite | Raima Синтаксис / Логика | Заметки |
---|---|---|---|
Инициализация | int sqlite3_config (int, …) — используется для внесения глобальных изменений конфигурации в SQLite, чтобы настроить SQLite для конкретных нужд приложения. | SQLSetConnectAttr () и используйте наши атрибуты, определенные драйвером, для установки параметров конфигурации на основе соединения. | |
Открытое соединение с БД | sqlite3_open («test.db», & db); | SQLAllocHandle () , за которым следует SQLConnect () . Как только соединение будет установлено, введите «USE»с помощью SQLExecute () или SQLExecDirect () . | SQLite позволяет использовать несколько файлов базы данных с одним подключением через оператор ATTACH DATABASE. |
Базы данных IN-MEMORY | Используйте опцию «: memory:»; sqlite3_open («: память:», & db); | Установите для атрибута подключения SQL_ATTR_RDM_STORAGE_MEDIA значение «INMEMORY_KEEP», вызвав SQLSetConnectAttr () . | SQLite не сохраняет базу данных в памяти на диск! Raima дает вам возможность сохранить на Диск. |
Выполнить SQL | (i) Сначала подготовьте оператор (ii) Затем выполнить с использованием | (i) Выполнить с помощью SQLExecDirect (SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength). (ii) Подготовьте с помощью SQLPrepare (SQLHSTMT StatementHandle, SQLCHAR * StatementText, SQLINTEGER TextLength), а затем выполните с помощью SQLExecute (SQLHSTMT StatementHandle). | В зависимости от кодировки SQLite может использовать sqlite3_prepare16 () для кодировки UTF-16 и int sqlite3_prepare16_v3 () |
Параметры привязки | sqlite3_bind_ * используется семейство функций; например, int sqlite3_bind_double (sqlite3_stmt *, int, double); int sqlite3_bind_int (sqlite3_stmt *, интервал, интервал); int sqlite3_bind_null (sqlite3_stmt *, интервал); int sqlite3_bind_text (sqlite3_stmt *, int, const char *, int, void (*) (void *)); int sqlite3_bind_pointer (sqlite3_stmt *, int, void *, const char *, void (*) (void *)); int sqlite3_bind_zeroblob (sqlite3_stmt *, int, int n); | SQLBindParameter ( SQLHSTMT StatementHandle, SQLUSMALLINT ParameterNumber, SQLSMALLINT InputType, SQLSMALLINT ValueType, SQLSMALLINT ParameterType, SQLUINTEGER LengthPrecision, SQLSMALLINT ParameterScale, SQLPOINTER ParameterValue, SQLLLEN ValueSize ); Вызовите SQLParamData () и SQLPutData () для обработки параметров большого двоичного объекта данных при выполнении, указанных в операторах вставки и обновления. | Райма использует SQLBindCol () для привязки переменной приложения к столбцу. В SQLite для СБРОСА подготовленного оператора в начальное состояние используйте — sqlite3_reset (sqlite3_stmt * pStmt) |
Сделки | Используются команды BEGIN-TRANSACTION, DEFERRED / IMMEDIATE / EXCLUSIVE, END-TRANSACTION или COMMIT, SAVEPOINT и ROLLBACK. | (i) Используйте команды «НАЧАТЬ ТРАНЗАКЦИЮ», «COMMIT», «ROLLBACK», «SAVEPOINT» и «ROLLBACK». (ii) Вызов SQLEndTran () для фиксации или отката «. | |
Получить набор результатов | INT sqlite3_step (sqlite3_stmt *) | SQLFetch () или SQLFetchScroll () для выборки следующего набора строк из набора результатов. Чтобы получить данные BLOB по частям , вызовите SQLGetData () . | Обе базы данных могут возвращать следующую строку или коды ошибок (подробно описаны ниже). |
Доступ к столбцу в строке | sqlite3_column семейство функций | (i) Доступ к значениям столбцов, извлеченным в переменные приложения, установленные с помощью SQLBindCol () перед выборкой . (ii) Вызвать SQLGetData () для нужного столбца (столбцов). | SQLite использует функции, основанные на типе столбца; double sqlite3_column_double (sqlite3_stmt *, int iCol) или int sqlite3_column_int (..) или int sqlite3_column_bytes (..) |
Закрыть заявление | sqlite3_finalize (sqlite3_stmt * pStmt) уничтожает подготовленный оператор и освобождает его ресурсы | Вызовите SQLFreeHandle () для дескриптора оператора, чтобы освободить все его ресурсы. | |
Закройте соединение с базой данных / дескриптор | int sqlite3_close (sqlite3 *) и int sqlite3_close_v2 (sqlite3 *) | SQLFreeHandle (), чтобы освободить дескрипторы соединения и среды. Это освобождает все дескрипторы базы данных, связанные с подключением. | В SQLite лучше использовать sqlite3_close_v2, поскольку он предназначен для использования с хост-языками, которые собирают мусор, и где порядок, в котором вызываются деструкторы, произвольный. |
Конфигурация | Интерфейс sqlite3_config () используется для внесения глобальных изменений конфигурации в SQLite, чтобы настроить SQLite для конкретных потребностей приложения. | Использует сценарий конфигурации для установки переменных среды. | |
Шифрование | int sqlite3_key (sqlite3 * db, const void * pKey, int nKey); int sqlite3_rekey (sqlite * db, | Вызовите rdm_tfsAllocEncrypt ( Передайте объект шифрования в SQLSetConnectAttr () с помощью атрибута SQL_ATTR_RDM_ENCRYPT. | SQLite использует платное расширение SQLite Encryption Extension (SEE). Raima использует шифр AES с поддержкой нескольких размеров ключей (128, 192 и 256 бит). |
Изоляция | Поддерживает «сериализуемую изоляцию» , но в режиме WAL с упреждающей записью обеспечивает «изоляцию моментальных снимков» . | Поддерживает «сериализуемую изоляцию» |
Причины из-за которых компании переходят работать на RDM
Ответ в реальном времени
Повышенная безопасность
Автономные возможности
Высокая стоимость облака
Ограничения широкополосного доступа