У меня есть приложение WCF, которое в настоящее время использует устройство хранения данных XML-файла, чтобы хранить данные, которые привыкают для генерации отчетов. Помимо этой обработки решения приняты на основе информации, хранившей в этих XML-файлах.
Я теперь поражаю объемы приблизительно 30 000 текстовых файлов. Это является невероятно налоговым, и приложение время от времени приходит к стачивающемуся останову.
Я всегда хотел обменять DAL XML в пользу RDBMS, но менеджеры проектов просто не позволят его. Но они были бы готовы посмотреть на решение без сервера, например, SQLLite. Я действительно испытываю желание просто погрузиться прямо в и начать использовать его в качестве замены DAL (Уровень доступа к данным).
Мне были бы нужны не больше, чем приблизительно 20 таблиц в целом решении, и я буду ожидать получать не больше, чем приблизительно 20 000 - 100 000 транзакций в день, однако это - экстремальное значение, реальные объемы были бы меньше, чем это в большинстве случаев.
Обновление
Я не ожидаю много одновременных соединений, когда я скажу, что транзакции, я чрезвычайно средний 1 или 2 клиента, которые выполняют вызовы и выполняются против базы данных в порядке. Время от времени могла бы быть возможность внешних клиентов, выполняющих быстрые вызовы к DB. Но объем соединений с БД будет сделан моим сервисом WCF, который является запланированной задачей бэкэнда, не служа 100 людей через организацию.
Другая положительная сторона - то, что я только должен сохранить данные в течение 90 дней, таким образом, DB не должен становиться слишком большим.
Мои основные проблемы:
Насколько надежный SQLLite? Что, если Файл DB повреждается, будет я освобождать все Данные обработки. Как легкий DB должен создать резервную копию? Это обработает мои объемы? И наконец как хорошо делает работу поставщика .NET (расположенный здесь: http://sourceforge.net/projects/sqlite-dotnet2/).
Если у Вас есть опыт с SQLLite, отправьте свои события, таким образом, я могу сделать aan обоснованное решение переключиться или нет.
Заранее спасибо...
Учитывая объем ваших транзакций, я бы сказал, что проблемой может быть тот факт, что сама БД представляет собой один монолитный файл с доступной только блокировкой файловой системы.
Насколько я знаю, нет блокировки на основе строк.
SQLite так же надежен, как ваша ОС и оборудование.
Его скорость транзакций аналогична SQL-серверу и часто выше, потому что все в процессе.
Поставщик .NET ADO отлично работает.
Чтобы создать резервную копию БД, остановите службу и скопируйте файл. Если файл журнала присутствует, скопируйте и его.
РЕДАКТИРОВАТЬ: SQLite по умолчанию использует UTF-8, поэтому с поставщиком ADO-NET вы сможете избежать потери акцентов (при условии, что вы следуете типичному XML в строковых правилах).
Вы можете рассмотреть Sql Compact Edition от Microsoft.
Он похож на sqlite в плане того, что является однофайловой встроенной базой данных, но имеет лучшую интеграцию с .net framework :)
.
SQLite кажется надежным, и даже с Microsoft не стоит ожидать большой поддержки в случае повреждения базы данных.
finalize () используется JVM только для очистки ресурсов при сборе объекта. Для класса целесообразно определить, какие действия должны выполняться при сборе, для чего может потребоваться доступ к super.finalize (). Для внешнего процесса нет смысла вызывать finalize (), так как внешний процесс не имеет контроля над сбором объекта.
-121--1278244-Я столкнулся с ошибкой IIS и VS2010 - она решена повторным запуском версии aspnet_regiis .NET 3.5.
-121--2666439-Я использовал SQLite с поставщиком .Net без проблем в среде monouser, за исключением одной проблемы: акценты, которые не показаны правильно. Резервное копирование просто: база данных SQLite представляет собой обычный текстовый файл. Просто скопируйте его.
Я использую Sqlite для хранения данных конфигурации XML, и у меня не было проблем с этим. Я использую поставщика System.Data.Sqlite: http://sqlite.phxsoftware.com/ . Он прочный и имеет хороший форум поддержки. Он также включает поставщика LINQ. Он также интегрируется с VS 2008, поэтому вы можете использовать Server Explorer для запросов к таблицам. Примеры и документация также показывают, как использовать параметризованные команды и транзакции для повышения производительности.
Релиз-кандидат LinqPad теперь поддерживает Sqlite: http://www.linqpad.net/Beta.aspx .
Sqlite хранит все в одном файле, который может быть зарезервирован, как и любой другой двоичный файл.
Sqlite поддерживает только блокировку на уровне файлов, но не должен вызывать проблем с производительностью, поскольку не похоже, что у вас будет большое количество одновременных транзакций.
Unicode не должен быть проблемой. Эта ссылка на форуме относится к области, где кто-то пытался прочитать символы Юникода несовместимой утилитой http://sqlite.phxsoftware.com/forums/t/954.aspx .
На этом сайте показано, как выполнять сравнения UTF8 без учета регистра, используя System.Data.Sqlite через специальный подборщик, на примере русских символов: http://www.codeproject.com/KB/database/SQLiteUTF8CIComparison .aspx .