Страницы

Поиск по вопросам

пятница, 20 декабря 2019 г.

Какую локальную базу данных оптимальнее выбрать для простого проекта в Visual Studio?

#c_sharp #sql #база_данных #sqlite #linq


Здравствуйте. У меня есть проект. Это клиент сайта, которых хранит список просмотренных
вами сериалов. 
Запрос своего списка с сайта занимает время, особенно, если список большой. Самое
меньшее запрос тормозил работу программы 5(!) секунд. Без списка приложение не имеет
смысла, а значит и не может начать работать. 

В связи с этим я подумал решить проблемы следующим образом. Запрашивать список с
сайта при первом запуске программы и авторизации в локальную БД. Далее выводить информацию
с неё. Обновление БД осуществялось бы только данными с сервера посредством запроса
списка в определённым интервалом или же при внесении изменений в список пользователем. 

Пример. Пользователь впервые запустил программу. Программа запросила логин и пароль
и запомнила пользователя. Затем отправила запрос на сервер и получила список. Первый
запуск в любом случае будет долгим. Далее эти данные бы сохранялись в локальной БД.
Пользователю уже отображался бы список из БД. Дабы поддерживать данные локальной БД
актуальными, раз, например, в 5 минут, программа отправляла бы по новой запрос на сервер
и обновляла данные. Или же при инициировании пользователем в софте изменений (добавлении
просмотренных серий или прочего). Это бы уже делалось в отдельном потоке. 

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

Требования к БД


Локальная. БД с списком сериалов должны храниться на компьютере пользователя в папке
программы.
Портативная. БД не должна требовать от пользователя установки дополнительных библиотек
на компьютер пользователя, помимо разве что .Net Framework, который будет требовать
сама программа. Разве что это будут портативные библиотеки, которые будут внутри папки
самой программы. 
Не громоздкая. Так как БД будет на компьютере пользователя, то не хотелось, чтобы
таблица в 10 полей при 1000 строках весила под гигабайт. 
Поддержка LINQ. Нативно или посредством подключением сторонних библиотек, хотелось
бы выполнять все запросы через LINQ, а не SQLConnect. 


Скорее всего, будет одна база данных и 4 таблицы в ней. Каких-либо сложных вещей
вроде хранимых процедур или триггеров от неё не требуется. Только хранение. Все действия
с ней буду делать непосредственно через программу. 

Рассмативал как вариань sqlite, но не уверен, что в ней есть хорошая поддержка LINQ.
И решил сначала посоветоваться. Если знаете хороший способ подружить sqlite с LINQ
или же есть решение по лучше, то буду благодарен за помощь.
    


Ответы

Ответ 1



Можно использовать Access в качестве локальной БД, если не планируется хранить огроменное кол-во данных.(Access поддерживает бд не более 2гб). Наличие самого Office не требуется, можно поставить бесплатный Access Engine для работы с Access. Касательно LINQ, то вы можете работать с таблицами в памяти через LINQ запросы к DataTable, а потом при завершении работы, переносить данные в Access. Так же вместо работы через DataTable можно описать сущности в виде классов и с использованием Dapper написать свою ORM. Dapper имеет автомапинг, что позволяет отражать возвращаемые запросов данные автоматически на поля класса. Если изобретать велосипед не хочется, то можно поискать готовую ORM. Если не ошибаюсь, то NHibernate поддерживает работу с Access из коробки.

Ответ 2



Используйте обычную сериализацию, в любой нравящийся вам формат(XML, MS-NRBF, JSON, Protocol Buffers, или вообще в "собственноручно написанный на коленке за 5 минут") - из коробки это выполнит все вышепоставленные вами условия, в том числе и про LINQ. Я вполне серьезно. Не вижу особого смысла на данном этапе проекта, и с этими условиями использовать полноценную базу данных - минусов будет больше чем плюсов.

Ответ 3



Рассмотрите вариант использования MS SQL Server Compact, это, по сути, однопользовательская embedded версия SQL Server, есть полная поддержка Entity Framework. Несколько лет не обновлялась, но вполне себе полноценный рабочий продукт. Подключаете к своему приложению пару библиотек и можно хоть с флешки запускать. Ссылки по теме: Microsoft SQL Server Compact Edition (Wikipedia) Download Microsoft SQL Server Compact 4.0 (official) Microsoft SQL Server Compact Edition (nuget) EntityFramework.SqlServerCompact (nuget) CompactView download (простая но мощная смотрелка БД MS SQL Server CE)

Комментариев нет:

Отправить комментарий