Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
sigmov
579 / 366 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
Завершенные тесты: 2
1

Сравнение SqlCe и SQLite

17.02.2011, 05:57. Просмотров 6255. Ответов 7
Метки нет (Все метки)

Пишу приложения для Windows Mobile + CF и встал вопрос выбора базы данных для приложения.

Надеюсь что мои изыскания будут вам полезны:

Прочитав несколько статей в кандидатах осталось 2 типа провайдера:
Sql Server Compact v3.5
SQLite Datafile v3

Сразу же оговорю их сравнительные особенности на 1м этапе.

Развертка:
1) SqlCe требует развертывания CAB файлов. SQLite подобного не требует, но зато требует носить с собой native sqlite.interop.dll.

Хранимые БД фалы:
1) SQLite базы имеют расширение *.3db, SQLCE - *.sdf.
2) Если sdf можно редактировать в стандартном SQL манаджере и в самой VS, то для 3db найти редактор значительно сложнее - на мой взгляд лучший - sqliteadmin и он же бесплатный.
3) Размерчики sdf файла значительно превосходят 3db аналогичной комплектации

Поддержка:
1) Сразу же обращает внимание что в SQLite отсутствует тип DATETIME - что для меня было весьма неудобно. Его приходится компоновать из 2х полей - DATE и TIME, а при использовании из C# приходиться "сращивать" 2 DateTime в один. Не айс.
2) Оба провайдера поддерживают многостолбцовые индексы, что для меня весьма важно
3) SQLite в отличии от SQLCE поддерживает даже хранимые процедуры(правда пользоваться ими пока-что мне не доводилось)

Скорость.

Сразу оговорюсь - что для SQLCE.3.5 провозглашена поддержка транзакций. НО(!) она у меня лично нифига не работала. Все делалось по 1й записи. А вот SQLite транзакции очень даже поддерживает.

Ну и естественно самое важное - скорость работы основных операций - вставка\апгрейд\выборка
Результат для позиций примерно такие:

- Выборка данных(SELECT)
В зависимости от числа записей в БД. SQL опережает SQLITE в N раз.
Т.е. если при 50 записях скорости были примерно равны то уже при 500 разница была в 2 раза в пользу SQLCE.

- Вставка данных(INSERT)
По одиночным вставкам SQLCE выигрывал примерно в 3-6 раз.
Однако если объеденить блок вставок в транзакцию - лидировать с отрывом в 2 раза начинает уже SQLITE.

- Обновление данных(UPDATE)
По одиночным обновлениям лидирует SQLCE в 2 раза.
Если объеденять обновления в транзакции - в 4-10 раз начинает лидировать SQLITE

Вообщем после данной инфы я все еще колебался.

Но покопавшись в Гугле открыл себе замечательный инструмент(доступен в CF с v3.5) - SqlCeResultSet
Работать с ним зачастую не так удобно, зато очень эффективно.

Вставки и апгрейд данных через SqlCeResultSet быстрее аналогичных транзакционных операций в SQLite в 2-4 раза.

После этого сомнений не осталось - SQLCE(!!!) и использование ResultSet

Мои исходники тестов под WM6 прилагаются.
3
Вложения
Тип файла: zip SQLCE_SppedTest.zip (390.1 Кб, 119 просмотров)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2011, 05:57
Ответы с готовыми решениями:

Сортировка sqlce
SqlCeEngine engine = new SqlCeEngine(db); SqlCeConnection connection = new...

Название таблицы в sqlce
Хелп!? Короче, название таблицы равно введеному в текстбокс значению. Если в текстбокс вписываю...

Арифметические операции SQLCE
Уважаемые разработчики есть следующая таблица: id br sum st 1 47 548 2 89 487 3 51 ...

Импорт Excel в SqlCe
Сделал экспорт базы данных из ListView в Excel Помогите пожалуйста разобраться как сделать...

Sqlce поиск по колонкам по порядку
как в sqlce сделать следующее допустим два столбца, ищешь значение в первом столбе, если...

7
beespace
1 / 1 / 0
Регистрация: 03.09.2009
Сообщений: 20
16.10.2011, 20:12 2
Спасибо за сравнение. Сам недавно сделал выбор в пользу SQLite но после статьи стоит задумать.
кстати для работы с SQLite лучше всего подходит SQLite Expert
0
sigmov
579 / 366 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
Завершенные тесты: 2
17.10.2011, 10:42  [ТС] 3
Цитата Сообщение от beespace Посмотреть сообщение
Спасибо за сравнение. Сам недавно сделал выбор в пользу SQLite но после статьи стоит задумать.
кстати для работы с SQLite лучше всего подходит SQLite Expert
Мне больше нравится Navicat For Sqlite

Добавлено через 9 часов 34 минуты
Добавлюсь в качестве исправлений и добавлений.

1. Транзакции

SqlCe транзакции очень даже поддерживает.(я ошибался по поводу их остутсвия)
Однако использование\неиспользование транзакции нисколько не ускоряет\замедляет процесс вставки и апгрейда.
Сколько не экспериментировал с размером буфера для журнала - ноль реакции.

Sqlite транзакции же ускоряют работу именно за счет размещения журнала в ОП.

2. Скорость

Sqlite все-таки значительно быстрее производит разбор выражения чем SqlCe.

Однако при использовании Sqlite из под NET много времени тратится на PInvoke взаимодействие с Native библиотеками самого Sqlite.
Перенос части кода взаимодействия с sqlite на С++ творит чудеса со скоростью в 2-10 раз!

Вывод: Если Вы разрабатываете приложение не на NET - то выбор - однозначно Sqlite, однако если на NET - то sqlce все-таки предпочтительнее.
1
beespace
1 / 1 / 0
Регистрация: 03.09.2009
Сообщений: 20
17.10.2011, 14:32 4
sigmov,
можно тогда у вас узнать, немного не по теме.
Такая ситуация, я вот сейчас использую в своем приложение SQLite и обдумываю над переходом на SQLCE. но задача моя остается открытой при использовании любой из этих баз.
если коротко то : Как обновлять приложение? Если при обновления касаются не только самой программы а и базы данных.(добавление\изменение таблиц). имеется введу удаленного обновления...
0
17.10.2011, 14:32
sigmov
579 / 366 / 63
Регистрация: 22.07.2009
Сообщений: 875
Записей в блоге: 4
Завершенные тесты: 2
17.10.2011, 15:01  [ТС] 5
Цитата Сообщение от beespace Посмотреть сообщение
sigmov,
можно тогда у вас узнать, немного не по теме.
Такая ситуация, я вот сейчас использую в своем приложение SQLite и обдумываю над переходом на SQLCE. но задача моя остается открытой при использовании любой из этих баз.
если коротко то : Как обновлять приложение? Если при обновления касаются не только самой программы а и базы данных.(добавление\изменение таблиц). имеется введу удаленного обновления...
DDL командами - CREATE, DROP, ALTER

Я сделал следующим образом:
В SqlCe есть одна таблица с настройками приложения. В том числе там есть значение db_version(int) - текущая версия локальной БД.
На вервере есть таблица с 2мя столбцами - db_version, up_command;
Каждый раз при коннектре с сервера запрашиваются все комманды, которые "выше" текущей версии и последовательно применяются к БД увеличивая ее версию до максимальной.

А как Вы с Sqlite делаете?

И что за приложение разрабатываете?(из любопытства)
0
beespace
1 / 1 / 0
Регистрация: 03.09.2009
Сообщений: 20
17.10.2011, 15:13 6
C SQLite я никак не делаю еще, но думаю воспользуюсь ваши советом.
Приложение для удаленного контроля и мониторинга. Для охранных систем. Есть приборы которые кладут свои данные в базу, их надо обработать локально и сохранить в базе. Обновления последуют потому как приборы все время совершенствуются и отправляют больше данных, а значит и таблицы и запросы придется модифицировать.
0
Frustrator
7 / 7 / 0
Регистрация: 25.05.2010
Сообщений: 38
14.11.2011, 16:56 7
В SqlCe, силами независимого разработчика, появилась поддержка bulk копирования.
С ним процесс чтения и записи просто реактивный. К примеру база размером 100мб(12 полей с 80'000м кортежем) у меня сохраняется за 5-6 сек.
1
enzo_brn
195 / 13 / 4
Регистрация: 26.04.2011
Сообщений: 129
20.01.2014, 10:29 8
Цитата Сообщение от Frustrator Посмотреть сообщение
силами независимого разработчика
Это шедевр! Спасибо)))
0
20.01.2014, 10:29
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2014, 10:29

Работа с Базой Данных SQLCE 2
Уважаемые разработчики, подскажите пожалуйста как можно решить данную задачу Суть в следующим:...

SQLCE 3.5 INSERT INTO не добавляет данные
нужно на кпк запихать данные через запросы, работаю с SQLCE 3.5, на компе всё отлично, на кпк не...

Ошибка индексированного изображения sqlce image
Если кто сможет помогите пожалуйста понять найти и устранить ошибку сохраняю в базу ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.