Global Tag Network Программное обеспечение для приложений и периферии

Как Raima Database Manager превосходит SQLite

4 главные проблемы с SQLite и как Raima Database Manager их избегает

Задача 1: Масштабируемая производительность

SQLite сталкивается с проблемами производительности, при добавлении в систему пользователей или дополнительного оборудования, из-за «однократной записи за один раз» и однопоточности.

RDM не имеет ограничений

RDM не имеет такой проблемы, поскольку его производительность улучшается по мере добавления оборудования и пользователей. RDM оптимизирован для масштабирования и использования любого дополнительного оборудования, добавленного в систему. Дополнительные пользователи также имеют очень стабильный набор производительности. SQLite, по замыслу, отдает приоритет случайному пользователю. Это несправедливо делает работу одних пользователей лучше, чем других.
Подробнее

Задача 2. Поддержка платформы

SQLite не поддерживает столько платформ, сколько RDM.

Независимость от платформы

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

Задача 3: Flash Media Lifetime

SQLite не оптимизирован для хранения на флэш-накопителях.

Оптимизирован для Flash Media

RDM оптимизирует и минимизирует количество операций записи на носитель данных, продлевая срок службы устройства. Это означает, что требуется меньше обслуживания и меньше замен в течение срока службы приложения. Кроме того, RDM лучше работает на этих устройствах благодаря оптимизации, которую он имеет.
Подробнее

Задача 4: Интеграция со средой разработки

SQLite не поставляется со встроенными файлами проекта и поддержкой всех стандартных сред разработки.

Коробочная сборка

Поддержка RDM включает Visual Studio, XCode, Makefiles, CMake, Wind River Workbench, Green Hills MULTI с предварительно упакованными файлами проекта и интеграцию со средой разработки.
Подробнее о интеграции

Переходите с 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.

ФункцииСинтаксис / логика SQLiteRaima Синтаксис / ЛогикаЗаметки
Инициализацияint sqlite3_config (int, …) — используется для внесения глобальных изменений конфигурации в SQLite, чтобы настроить SQLite для конкретных нужд приложения.SQLSetConnectAttr () и используйте наши атрибуты, определенные драйвером, для установки параметров конфигурации на основе соединения.

SQLite Список параметров конфигурации

Raima Список параметров

Открытое соединение с БД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) Сначала подготовьте оператор
int sqlite3_prepare (
sqlite3 * db, / *
Дескриптор базы данных * / const char * zSql, / * оператор SQL, в кодировке UTF-8 * /
int nByte, / * Максимальная длина zSql в байтах. * /
sqlite3_stmt ** ppStmt, / * OUT: дескриптор
оператора * / const char ** pzTail / * OUT: указатель на неиспользуемую часть zSql * /
);

(ii) Затем выполнить с использованием
int sqlite3_step (sqlite3_stmt *)

(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,
const void * pKey, int nKey / * Новый ключ * /
);

Вызовите rdm_tfsAllocEncrypt (
const char *
passcode , RDM_ENCRYPT * enc
), чтобы создать объект шифрования.

Передайте объект шифрования в SQLSetConnectAttr () с помощью атрибута SQL_ATTR_RDM_ENCRYPT.

SQLite использует платное расширение SQLite Encryption Extension (SEE).

Raima использует шифр AES с поддержкой нескольких размеров ключей (128, 192 и 256 бит).

ИзоляцияПоддерживает «сериализуемую изоляцию» , но в режиме WAL с упреждающей записью обеспечивает «изоляцию моментальных снимков» .Поддерживает «сериализуемую изоляцию»

Причины из-за которых компании переходят работать на RDM

Ответ в реальном времени

Повышенная безопасность
Автономные возможности

Высокая стоимость облака

Ограничения широкополосного доступа

Заполните форму >>>

или отправьте сообщение

укажите  удобное время для  консультации 

Ваш продукт в итоге получается дешевле на 40-%  в сравнении с аналогами.

ERP-система как программный продукт стоит сравнительно дорого, независимо от разработчика. Для успешного внедрения потребуется сотрудничество с опытными специалистами. И если бюджета хватает только на оплату программы, то в результате «коробка» оказывается невостребованной, то есть , компания впустую тратит значительную сумму. Рассчитывайте свои возможности заранее.


Консультация