Краткое описание на Wikipedia:
http://ru.wikipedia.org/wiki/SQLite
Обычная энциклопедическая статья, которая в общих чертах описывает функциональность этой встроенной СУБД. Очень радует лицензия продукта, которая Public Domain.
Официальный сайт SQLite
http://www.sqlite.org/
.NET программисту особенно тут делать нечего. Однако стоит прочитать две статьи в разделе Documentation - "Appropriate Uses For SQLite" и "Distinctive Features" чтобы иметь четкое понимание того, как именно позиционируется данный продукт.
SQLite Management Tools
http://www.sqlite.org/cvstrac/wiki?p=ManagementTools
Утилиты, которые позволяют управлять и выполнять запросы к базе SQLite
SQLite Converter Tools
http://www.sqlite.org/cvstrac/wiki?p=ConverterTools
Утилиты для конвертирования форматов других баз данных в формат SQLite и, наоборот.
SQLite Wrappers
http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers
Библиотеки, которые позволяют обращаться к базе SQLite из различных языков программирования.
System.Data.SQLite
http://sqlite.phxsoftware.com/
Наиболее развитый на мой взглять ADO.NET Data Provider для SQLite.
На официальном сайте можно отметить следующие интересные возможности этого проекта:
- Полная поддержка стека ADO.NET 2.0
- Поддержка .NET, .NET Compact Framework, Mono
- Поддержка ADO.NET Entity Framework, который доступен в .NET 3.5
- Design-Time поддержка в Visual Studio 2008
- Есть возможность шифрования базы данных
Для того чтобы распространять .NET проект, в котором используется база данных SQLite достаточно включить в него сборку System.Data.SQLite.dll, которая сама уже содержит оригинальную библиотеку.
Кроме того, можно использовать альтернативный вариант распространения - включать в дистрибутив приложения сборку System.Data.SQLite.dll из каталога ManagedOnly + оригинальную sqlite3.dll.
[UPDATE 2009-11-26]
Пост вызвыл активную реакцию, чему я безмерно рад. Большое спасибо за фидбек, я получил целый ряд полезных "зацепок", которые в последствии могут пригодится.
Насчет ссылочной целостности в SQLite. Действительно, неделю назад обнаружил в документации что по-умолчанию в SQLite не включены FK Constraints. Да, не фонтан. Пусть даже это и встроенная СУБД, но я бы не отказался от такого полезного механизма контроля.
По ссылке ниже описывается как можно проверить включены ли они или нет и что нужно сделать чтобы их таки включить:
http://www.sqlite.org/foreignkeys.html
Из документации видно, что в будущих релизах FK Constraints могут быть включены.
Плюс еще довольно полезная информация по поводу того, чего SQLite не умеет из SQL92 стандарта:
http://www.sqlite.org/omitted.html
Пока для себя расставил такие приоритеты:
- если размер дистрибутива важен, и можно принебречь остутствием ряда продвинутых фич, то я предпочту SQLite;
- требовать уж очень высокой скорости работы от встроенной СУБД думаю что не стоит;
- Embedded Firebird выгодно отличается от SQLite возможностью с нее "соскочить" на полновесную Firebird. Предполагаю что это будет максимально безполезненно;
- Еще подумываю об необходимости использовании ORM + встроенная БД. Тогда и поставщиков БД можно будет менять как перчатки. Ну или почти...
Подписаться на:
Комментарии к сообщению (Atom)
8 комментариев:
Судя по описанию на вики, штука эта не очень юзабельная. По крайней мере по сравнению с MS SQL. Насколько я понял, в момент записи в одну таблицу блокируется вся БД - ну ничего себе "эффективная БД"! :-)
Дело в том, что SQLite это встроенная СУБД, которая не требует выделенного сервера БД.
Поэтому сравнение SQLite и MS SQL Server это не совсем корректно, поскольку у них совершенно разные ниши.
SQLite можно сравнивать с другими такими же встроенными СУБД, как например SQL Server Everywhere (http://demiliani.com/blog/archive/2006/04/10/3629.aspx).
Кроме того, я бы даже сравнивал вариант использования встроенных СУБД и использования данных в наборе XML файлов. Но никак не с "полновесными" СУБД.
Неудачно сравнил, но сути не меняет. Сравни с Firebird-ом, с db4o, с каким-нить ембеддед MySQL-ем. Или с упомянутым тобой решением от МС.
Насколько я понял, у SQLite ниша - однопоточное хранение данных для ПО одного пользователя. Конечно - что кому удобнее. Для дотнета, имхо, удобнее юзать db4o (причём без особых проблем с паралеллизмом). А если говорить о реляционках - то Firebird.
Уверен, есть ещё немало embedded СУБД без проблем SQLite-a.
Прошу прощения, я только сейчас понял что у Firebird есть встроенное решение.
До сегодняшнего дня я был в полной уверенности что Firebird это исключительно клиент-сервер.
Насчет db4o даже не знаю что и думать. Никогда в глаза не видел эту СУБД. Видимо не попадался человек, который смог бы ее хорошо попиарить ;)
Что касается встроенного решения от MySQL, то я пока отношусь к нему немного настороженно. Если не ошибаюсь оно не так давно и появилось, к тому же у меня есть некоторые опасения насчет лицензии этого продукта. Хотя, вероятно, они бессмысленны.
Решение от Firebird значительно уступает SQLite. Во первых, встроенная база Firebird блокируется даже при доступе на чтение. А SQLite'овская позволяет читать в несколько потоков и блокируется только при записи. Причем отложенные транзакции значительно решают и эту проблему. Во вторых, SQLite имеет несколько вкусных фишек, которых нет в Firebird. Например, crossdatabase-запросы. В третьих, SQLite легче и шустрее. Embedded решение от MySQL - полный УГ.
Во первых, встроенная база Firebird блокируется даже при доступе на чтение.
Бред. FireBird - версионник, не блокировочник. Читающие транзакции не блокируют ни читающих, ни пишущих.
Насчет шустрости по сравнению с FireBird - вранье. Тестировано, проверено.
И уж насчет возможностей - SQLite есть слабое подобие SQL - движка, такого хотя бы как FireBird. Развитые типы данных, домены, триггеры, процедуры, обработка исключений, сообщения, ссылочная целостность - все это было еще 10 лет назад, когда никаких SQLite не было и в помине. А уж нынешнее состояние FireBird таково, что с SQLite сравнивать просто смешно.
FireBird embedded, в зависимости от версии, весит в районе 3 мегов. Поддержка шифрации обеспечивается только в Embedded.
SQLite - хорошая встраиваемая БД. И все.
Насчет блокировки именно встроенной FireBird - соврал, таки есть такое.
Да, работа только в одном потоке.
Но проверено, что Embedded таки шустрее, чем SQLite, особенно на больших объемах.
А мы SQLite юзаем для некоторых интеграционных тестов.
Отправить комментарий