Формат файла многопользовательского приложения для автономного настольного приложения - PullRequest
0 голосов
/ 17 марта 2019

Я работаю над простым программным обеспечением для управления проектами, которое позволяет менеджерам создавать / редактировать проекты и назначать сотрудников. Он должен работать в основном как Excel / Word / PowerPoint, то есть локально установленное настольное приложение считывает / записывает данные из / в файл. Этот файл может находиться в локальной файловой системе или в общей сетевой папке, поэтому его можно использовать с нескольких компьютеров, на которых запущено программное обеспечение.

Я провел обширное исследование о том, как лучше всего хранить данные приложений в локальном файле, и, по сути, нашел эти два жизнеспособных подхода:

  • Сериализация модели предметной области : Сериализация графа объекта модели предметной области в файловой системе с использованием двоичного представления (например, с помощью встроенных языковых функций, таких как сериализация Java) или в более читаемом формате ( например, XML).

    Недостатки: изменения в модели предметной области приводят к тому, что ранее сериализованные данные становятся нечитаемыми.

  • Встроенная база данных: Удобный доступ к данным в стиле SQL через OR-Mappers, в то же время сохраняя локальный файл, который можно хранить в любом месте, где хочет пользователь. Например, SQLite кажется идеальным выбором для хранения данных приложения в локальном файле [1].

    Недостатки: SQLite может привести к повреждению данных при хранении на сетевом диске из-за некорректной блокировки файлов во многих реализациях сетевой файловой системы [2].

Простота встроенной базы данных чрезвычайно заманчива по сравнению с накладными расходами, которые вызывает сервер БД (настройка, обслуживание, резервное копирование и т. Д.). Как другие приложения (например, Excel) поддерживают целостность своих файлов при хранении на NAS? Мне известно, что в большинстве случаев есть файл блокировки, но это может снова вызвать нежелательное состояние (если приложение вылетает и, следовательно, не удаляет файл блокировки).

Что вы думаете о такой ситуации? Как мое приложение может хранить свои данные простым, но надежным способом? Существуют ли другие решения, кроме архитектуры клиент / сервер, для обеспечения целостности данных приложения?


[1] https://sqlite.org/aff_short.html

[2] https://sqlite.org/whentouse.html

...