- Вопрос или проблема
- Ответ или решение
- Факторы, влияющие на выбор базы данных
- Рекомендации по выбору базы данных
- 1. SQLite
- 2. Microsoft SQL Server Express LocalDB
- 3. Обмен файлами через сетевую папку и использование любой реляционной базы данных
- Архитектурные решения для обеспечения целостности данных
- Заключение
Вопрос или проблема
Нужны рекомендации по базе данных. Мне поручили написать настольное приложение на C# для малого бизнеса. Владельцу бизнеса не нужно, чтобы его данные хранились в интернете. У него есть два настольных компьютера. Он хотел бы, чтобы на каждом компьютере была копия приложения, и если один из настольных компьютеров потерпит катастрофический аппаратный сбой, он хочет иметь возможность включить другой компьютер и продолжить свою работу.
Я ищу способ легко сохранять и делиться данными, используемыми приложением, между двумя компьютерами. Признаюсь, я не гуру сетей и администрирования баз данных. В приложении будет только один пользователь одновременно. Объем данных, вероятно, оценится максимум в несколько сотен МБ до 1 ГБ. Схема будет очень проста, с 4 или 5 таблицами.
Что я могу сделать:
Некоторую базовую сеть между двумя настольными компьютерами (я не уверен как, но готов обучаться)
Купить недорогое оборудование для облегчения этого
Что я не могу сделать:
Купить другую машину, чтобы она была выделенным сервером
Любые предложения приветствуются. Спасибо!
Вы можете использовать mysql или аналог с открытым исходным кодом, такой как mariadb.
Затем настройте репликацию… предостережение: оба компьютера должны быть включены, чтобы репликация могла происходить.
Если вы хотите, чтобы компьютер B включался, когда компьютер A выходит из строя, то данные должны храниться на другом компьютере. Вы можете настроить сетевую папку или просто использовать встроенную сеть, как mariadb и т.д. Вы можете буквально загрузить mariadb на большинство операционных систем, и компьютер, на котором он установлен, может быть любым компьютером. Особенно с такой маленькой базой данных, пользователь, использующий ПК с mysql, вообще не заметит, что база данных с 5 таблицами работает в фоновом режиме. За исключением случаев, когда у вас начинают появляться сотни тысяч записей.
Где-то данные хранятся на жестком диске, и это ваша ключевая точка сбоя.
Каждая другая часть компьютера не имеет значения! Если процессор выйдет из строя, замените его. Готово. Если память выйдет из строя, замените ее. Готово. Вы даже можете установить базу данных, такую как mariadb, практически на любой ПК с windows, mac или linux и скопировать данные с жесткого диска неработающего компьютера, подключив его к новому работающему ПК через внешний USB-корпус. Однако если жесткий диск выйдет из строя… игра окончена.
Вы можете уменьшить вероятность сбоя, заменив жесткий диск на SSD. Жесткие диски имеют движущиеся части, подверженные поломкам, а SSD – нет. SSD тоже в конечном итоге выйдет из строя, но вы устраняете один крупный фактор, влияющий на надежность жесткого диска.
К сожалению, остальная часть стандартных практик стоит значительно дороже.
RAID 5/6 может защитить от отказа одного или двух жестких дисков, но требует минимум 3/4 жестких дисков.
Вам все равно нужна резервная копия с версионированием, чтобы защитить себя от вируса, шифрующего ваши файлы.
Вы даже можете повысить свои шансы, сделав это веб-приложением. Тогда им можно будет получить доступ с любого ПК. Вы можете использовать встроенный брандмауэр Windows, чтобы заблокировать любой IP-адрес, к которому не хотите предоставлять доступ к ПК. Вы можете установить apache, mariadb и php на windows, и тогда не нужно ничего устанавливать, кроме сервера (это может быть любой стандартный ПК). Используя PHP-фреймворк, такой как laravel (или любой другой), вы можете создать красивый графический интерфейс для клиента. Многие фреймворки даже позволяют легко реализовать вход по имени пользователя и паролю для защиты.
Почему бы вам просто не указать обоим ПК на одну и ту же папку с данными (общую папку)? Вы можете использовать любую базу данных здесь. Я бы предложил sqlite.
Кроме того, вы можете делать резервные копии данных в отдельные папки (на случай, если вам нужно будет восстановить более раннюю версию)
Почему бы просто не использовать SQL express, он не требует отдельной системы, только чтобы тот, на котором он работает, был включен. Он работает очень легко и предназначен именно для таких задач, + бесплатно, он даже установится для вас с VS Community edition для создания подобных проектов.
Похоже на то, как вы настраиваете многопользовательский QuickBooks или другие сетевые “общие” приложения, один является мастер-версией, другой взаимодействует с ним.
Я делаю это постоянно и делал это в течение ГОДОВ.
Ответ или решение
При разработке приложения для небольшого бизнеса, которому требуется синхронизация данных между двумя настольными компьютерами без хранения информации в облаке, важно выбрать правильное решение для базы данных. В этой статье мы рассмотрим несколько подходов, которые отвечают вашим требованиям, и предложим оптимальные решения с точки зрения надежности и простоты использования.
Факторы, влияющие на выбор базы данных
-
Отсутствие облачного хранения: Как указано в запросе, данные не должны храниться в интернете. Это важный аспект для соблюдения конфиденциальности и безопасности вашей информации.
-
Ограниченное количество пользователей: Ваша база данных должна поддерживать работу с одним пользователем в данный момент времени, что упрощает архитектуру решения.
-
Размер данных: Предполагается, что объем данных не превысит 1 ГБ, что позволяет использовать легковесные решения для хранения данных.
-
Простота разработки: Возможность быстрого внедрения и минимальная сложность настройки являются критически важными.
Рекомендации по выбору базы данных
1. SQLite
SQLite — это встроенная база данных, которая идеально подходит для приложений с одним пользователем. Она не требует установки сервера и может хранить данные в одном файле. Вот преимущества использования SQLite в вашем случае:
- Простота использования: SQLite не требует отдельного сервера и может быть развернута непосредственно с приложением.
- Переносимость: База данных хранится в одном файле, что делает ее легкой для копирования и резервного копирования.
- Хранение данных на локальном диске: Данные будут оставаться на компьютерах, что соответствует вашим требованиям по конфиденциальности.
Однако имейте в виду, что SQLite не поддерживает одновременный доступ к данным с нескольких компьютеров, что может стать ограничением, если вы решите изменить архитектуру приложения в будущем.
2. Microsoft SQL Server Express LocalDB
LocalDB — это облегченная версия SQL Server, которая может быть установлена на одном из компьютеров и предоставляет возможность многопользовательского доступа. Каковы преимущества?
- Легкость установки: LocalDB можно установить вместе с Visual Studio, что позволяет упростить процесс разработки.
- Поддержка транзакций: Вы сможете использовать мощные возможности реляционной базы данных и управлять данными эффективно.
- Отсутствие необходимости в выделенном сервере: LocalDB работает с одним файлом данных, что соответствует требованиям вашего бизнеса.
Однако для работы с LocalDB один из компьютеров должен быть включен в момент работы другого, что может стать ограничением для вашего сценария.
3. Обмен файлами через сетевую папку и использование любой реляционной базы данных
Если есть возможность настройки сетевого обмена, два компьютера могут использовать общую сетевую папку для хранения базы данных. Это решение потребует немного более сложной настройки, но оно позволит:
- Устранить необходимость копировать данные вручную между компьютерами.
- Использовать такие базы данных, как MariaDB или MySQL для хранения более сложной схемы данных.
Однако, при таком подходе важно учитывать вопросы безопасности и производительности.
Архитектурные решения для обеспечения целостности данных
-
Регулярное резервное копирование: Настройте автоматическое резервное копирование данных на случай аппаратного сбоя. Это поможет избежать потери данных и обеспечит контингент на случай, если один из компьютеров выйдет из строя.
-
Использование SSD вместо HDD: Замените традиционные жесткие диски на твердотельные накопители. Это повысит надежность хранения данных и снизит риск потери информации в результате механических сбоев.
-
Создание сценариев аварийного восстановления: Разработайте протокол действий на случай, если один из компьютеров выйдет из строя. Например, создайте сценарий, позволяющий легко перенастроить рабочую среду на второй компьютер за минимальное время.
Заключение
Исходя из вышеизложенного, лучше всего подойдут SQLite для простоты и надежности или Microsoft SQL Server Express LocalDB для небольших сетевых сценариев. Оба решения удовлетворяют условиям конфиденциальности и безопасности данных, что является главным приоритетом в этой ситуации. Не забывайте про резервное копирование и улучшение аппаратного обеспечения для повышения надежности хранения данных. Выберите подходящее решение, и ваш бизнес сможет продолжать работать эффективно, даже в условиях отказа оборудования.