Почему я должен использовать SQLite в базе данных Jet
Кто-то спросил меня об этом на днях, и я не мог придумать хороший ответ. Переносимость платформы совершенно не имеет отношения к проекту.
Фактически, у Jet есть некоторые функции, которые не выполняет SQLite, а именно внешние ключи.
Так может кто-нибудь подумать, почему SQLite следует использовать вместо базы данных Jet?
Ответы
Ответ 1
Вопреки тому, что говорят другие люди, Jet не мертв и далеко от него: ACE - это новая версия Jet, и она довольно надежная и обратная совместимость.
Оба SQLite и Jet/ACE имеют свои сильные и слабые стороны, и вам нужно получить дополнительную информацию о конкретных моментах, которые важны для вас и вашего приложения.
- В любом случае вы можете перераспределить двигатель.
- Jet/ACE немного интегрирован и поддерживается из инструментов MS и Visual Studio.
- Jet/ACE имеет более узкую блокировку, что может быть важно, если ваше приложение позволяет многопользовательским пользователям или требует многопоточного доступа к базе данных.
- Jet/ACE имеет больше возможностей с точки зрения того, что вы ожидаете от базы данных (объединения, объединения и сложные запросы).
- Jet/ACE имеет простой путь миграции к SQL Server, поэтому, если ваша база данных станет большой, вы можете легко перейти на SQL Server.
- SQLite является кросс-платформенным, поэтому, если ваше приложение нужно портировать в Linux/Mac под Mono, тогда SQLite - лучший выбор.
- SQLite-механизм более жесткий, поэтому перераспределение может быть проще.
- Типы данных в SQLite довольно слабы.
- SQLite имеет более либеральные права перераспределения (поскольку вы можете в основном делать все, что хотите с ним).
Люди, которые говорят, что базы данных Jet corrupts застряли в 1995 году.
В конце концов, если ваше приложение не имеет каких-то очень специфических требований, которые нажимают границы обоих движков баз данных, то, вероятно, не имеет значения, какой из них вы выбрали.
Просто используйте тот, который вам легче всего включить в ваш проект.
Ответ 2
SQLite превосходит Jet по той причине, что SQLite ACID-совместимый, в то время как Jet, к сожалению, нет. Если целостность данных является проблемой, SQLite предлагает гораздо более "надежную" платформу для ваших требований к хранилищу данных. См. "SQLite Is Transactional" и "Atomic Commit In SQLite" для более подробной информации.
SQLite действительно не хватает нескольких функций (таких как внешние ключи), однако это связано прежде всего с тем, что SQLite специально разрабатывается как чрезвычайно маленькая и легкая база данных, которая также безсерверна.
Безсерверный аспект SQLite также является основным преимуществом Jet над тем, что ничто не должно быть установлено на машине, которая будет запускать вашу базу данных. Например, я использовал SQLite в веб-приложении ASP.NET, и все, что мне нужно, это SQLite DLL (в данном случае это отличный System.Data.SQLite) в папке "bin" приложения и моей базе данных в папке "App_Data" приложения. Затем я могу загрузить эти файлы на свой веб-хостинг, и все это "просто сработало". Это не требует фактической установки или регистрации чего-либо на целевой машине.
Небольшой dowside SQLite обусловлен тем, что база данных основана на файлах. Запись базы данных будет блокировать весь файл базы данных, а не конкретную строку или таблицу, тогда как Jet предложит вам более гранулированный уровень блокировки. Еще одна небольшая проблема, основанная на тех же основанных на файлах рассуждениях, - это concurrency, однако сама Jet не предлагает высокий уровень concurrency.
Ответ 3
Это все еще вопрос, который возникает время от времени. Я рассматриваю все плюсы и минусы для обоих сейчас для нового проекта. Я пишу много финансовых приложений, которые занимаются денежными ценностями, поэтому одним из самых важных "плюсов" для Access/JET/ACE/what-they're-call-it-today (я просто называю Access) являются его сильные типы, Не стоит недооценивать силу наличия сильных типов, когда вы имеете дело с деньгами. Доступ - единственная однофайловая база данных, которую я видел с поддержкой типа money/decimal, который может хранить реальные денежные значения.
Один из моих основных розничных продуктов использует SQLite в качестве бэкэнд, и я могу сказать, что у меня практически не было проблем с его развертыванием даже в самых сумасшедших ситуациях. SQLite определенно спроектирован как однопользовательский, но у меня много клиентов, использующих его по SMB. Вам нужно записывать проверки в ваше программное обеспечение, чтобы проверять возвращаемые значения SQLITE_BUSY при выполнении запросов, но если вы завершите это с помощью автоматического повтора, он "просто работает".
Есть только несколько причин, по которым я бы выбрал Access over SQLite - один из них - типы данных. Если я когда-либо буду писать программное обеспечение, которое должно выполнять математику по денежным ценностям (налог и т.д.), Я буду использовать Access. Единственной убедительной причиной использования Access является путь обновления к SQL Server. Поскольку я никогда не использовал SQL-сервер в своей жизни (и не планирую), это не имеет большого значения.
В конце концов, оба являются чрезвычайно надежными базами данных - я бы без колебаний использовал их в производственной среде. Просто не забудьте использовать правильный инструмент для задания, а иногда это означает, что сервер базы данных (PostgreSQL лечил меня в течение последних 13 лет, это точно!).
Ответ 4
Jet больше не поддерживается. SQLite также проще установить, так как это одна dll, которая может быть легко упакована вместе с вашим приложением. Использование SQLite также может предотвратить блокировку vender, просто потому, что языковая или кросс-платформенная переносимость не является проблемой сейчас, это не значит, что она не станет позже. Подробнее о выходе на пенсию в Jet см.
http://en.wikipedia.org/wiki/Microsoft_Jet_Database_Engine
Ответ 5
Мы использовали Jet в течение длительного времени и недавно перешли на SQLite. Почему?
1: Когда база данных получает около 2 ГБ или часто используется, она становится поврежденной в Jet в конечном итоге. Это вызвало у нас много горя! Это не было исправлено в Jet или ACE, хотя у Microsoft есть отдельный инструмент, который может якобы исправить файлы базы данных.
2: Microsoft устарела Jet лет назад, в пользу ACE, но если вы прочтете подробности, Microsoft сама говорит, что ACE НЕ является заменой для реактивного самолета и действительно хочет, чтобы вы использовали SQL Server.
3: Jet больше не является стандартной частью Windows, а частью Microsoft Office, хотя вы можете загружать и устанавливать дистрибутив. Тем не менее, вы не можете одновременно устанавливать 32 и 64-битные двигатели. Если у вас установлен 32-разрядный Office 2007, и вы пытаетесь установить 64-разрядный механизм ACE, он говорит вам, что вам нужно сначала удалить Office 2007.
Так что по этим причинам мы просто решили достаточно. Установка SQL Server не является решением, потому что это большая сложная инвазивная установка, а не очень портативная.
Наше программное обеспечение С++ напрямую поддерживает SQLite через файл sqlite3.c, и оно работает очень хорошо. Я реализовал антивирусные интерфейсы для OCILIB, Oracle, SQL Server, MySQL и т.д., И это было одним из самых простых. Это также намного быстрее, чем у Jet, и в результате файлы могут быть на треть от размера Jet. У нас есть некоторые коды VB6 и VBA и .NET, которые также должны использовать наши файлы базы данных, и для этого мы используем драйвер SQLite ODBC (просто Google). Хорошо работает.
SQLite отлично работает как в 32, так и в 64-битных. И если вы прочитаете это, вы увидите, что он серьезно протестирован и удивительно стабилен. Он также поддерживает более стандартный SQL и ближе к Oracle/SQL Server, чем Jet.
Ответ 6
Стоимость не является проблемой. Если ваш интерфейс построен в чем-то другом, кроме MS-Access, пользователям приложения не нужно платить какие-либо платы за установку драйверов Jet. Visual Studio будет включать эти драйверы во время сборки (по крайней мере, это были версии для версии .NET).
Я предполагаю, что у вас нет личных предпочтений и они одинаково квалифицированы в развитии в любой среде. Если у ваших пользователей уже есть лицензии MS-Access, и они хотели бы иметь возможность писать свои собственные отчеты (о, не дай бог, чтобы любой не-хакер пытался такой потрясающий подвиг!), Используйте Jet.
Ответ 7
SQLite - это новый Jet. Даже если кросс-платформа не имеет отношения к вам, это может быть не для ваших клиентов. Использование Jet блокирует их в Windows и больше не поддерживает DB, ни одна из которых не является хорошей. И SQLite работает практически с любой средой разработки.
Джет известен тем, что имеет странные проблемы с коррупцией, поэтому я стараюсь держаться подальше от него.
Вы можете создавать внешние ключи в SQLite, а также SQLite 3.6.19 также добавлены ограничения внешнего ключа.
Ответ 8
Сверху моей головы, свободной и перекрестной платформы; но что более важно... как вы думаете, он более стабилен и масштабируемо, чем Jet/MS Access/.mdb? Будет ли дольше жить, что его преемник (ACE/.accdb)
Если он используется не только несколькими людьми, я не беспокоюсь о Jet. Я перехожу прямо к MS-SQL (даже бесплатная версия). Это просто не стоит боль от поврежденной БД (о которой Джет известен - хотя, возможно, они ее исправили - я не хочу быть их тестовым примером, хотя).
Ответ 9
Если вы хорошо программируете на Python, Pearl, Lua или на многих других языках, SQLite будет естественным выбором.