Страницы

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

пятница, 2 ноября 2018 г.

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

Здравствуйте. У меня есть проект. Это клиент сайта, которых хранит список просмотренных вами сериалов. Запрос своего списка с сайта занимает время, особенно, если список большой. Самое меньшее запрос тормозил работу программы 5(!) секунд. Без списка приложение не имеет смысла, а значит и не может начать работать.
В связи с этим я подумал решить проблемы следующим образом. Запрашивать список с сайта при первом запуске программы и авторизации в локальную БД. Далее выводить информацию с неё. Обновление БД осуществялось бы только данными с сервера посредством запроса списка в определённым интервалом или же при внесении изменений в список пользователем.
Пример. Пользователь впервые запустил программу. Программа запросила логин и пароль и запомнила пользователя. Затем отправила запрос на сервер и получила список. Первый запуск в любом случае будет долгим. Далее эти данные бы сохранялись в локальной БД. Пользователю уже отображался бы список из БД. Дабы поддерживать данные локальной БД актуальными, раз, например, в 5 минут, программа отправляла бы по новой запрос на сервер и обновляла данные. Или же при инициировании пользователем в софте изменений (добавлении просмотренных серий или прочего). Это бы уже делалось в отдельном потоке.
При последующих запусках программы, она бы запускалась мгновенно, отображая пользователю сохранённый локально список, при этом инициировала бы запрос на обновление в отдельном потоке.
Требования к БД
Локальная. БД с списком сериалов должны храниться на компьютере пользователя в папке программы. Портативная. БД не должна требовать от пользователя установки дополнительных библиотек на компьютер пользователя, помимо разве что .Net Framework, который будет требовать сама программа. Разве что это будут портативные библиотеки, которые будут внутри папки самой программы. Не громоздкая. Так как БД будет на компьютере пользователя, то не хотелось, чтобы таблица в 10 полей при 1000 строках весила под гигабайт. Поддержка LINQ. Нативно или посредством подключением сторонних библиотек, хотелось бы выполнять все запросы через LINQ, а не SQLConnect.
Скорее всего, будет одна база данных и 4 таблицы в ней. Каких-либо сложных вещей вроде хранимых процедур или триггеров от неё не требуется. Только хранение. Все действия с ней буду делать непосредственно через программу.
Рассмативал как вариань sqlite, но не уверен, что в ней есть хорошая поддержка LINQ. И решил сначала посоветоваться. Если знаете хороший способ подружить sqlite с LINQ или же есть решение по лучше, то буду благодарен за помощь.


Ответ

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

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

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