RFC: Что хороший подход к удаленно редактировать очень большие двоичные файлы?
-
01-10-2019 - |
Вопрос
У меня есть ряд довольно больших двоичный Файлы (записи фиксированной длины, макет которой описан в другом -текстовый- файл). Файлы данных могут получить максимум 6 ГБ. Файлы макета (копировальные книги Cobol) небольшие по размеру, обычно менее 5 КБ.
Все файлы данных сосредоточены на сервере GNU / Linux (хотя они были сгенерированы в мэйнфрейме).
Мне нужно предоставить тестерами средствами редактирования этих двоичных файлов. Есть бесплатный продукт, называемый RecordedIt (http://record-editor.sourceforge.net/), но имеет два тяжелых недостатка:
Это заставляет тестеров загружать огромные файлы через SFTP только для того, чтобы загрузить их еще раз каждый раз, когда было сделано небольшие изменения. Оченьнеэффективно.
Он загружает весь файл в рабочую память, что делает его бесполезным для всех, кроме относительно небольших файлов данных.
То, что я имею в виду, это архитектура клиент / сервер в Java:
Сервер будет запущен постоянный процесс, прослушивающий для редактирования запросов, исходящих от клиента. Такие запросы будут включать в себя такие вещи, как
Вернуть список доступных файлов
Блокировка определенного файла для издания
Изменить эти данные в этой записи
Верните N-Th страницу записей
и так далее…
Клиент может принять любую форму (на основе RCP на рабочем столе - что мой первый кандидат-, NCURSES На том же сервере, среднее веб-приложение ...) до тех пор, пока он способен отправлять запросы на сервер.
Я изучал Nio (из-за его буферов) и Mina (из-за прозрачности протокола), чтобы реализовать схему. Однако перед любым дальнейшим прогрессом этого усилия я хотел бы собрать свои экспертные мнения.
Мой разумный способ оформить проблему?
Это возможно, чтобы сделать это, используя язык и рамки, о которых я думаю? Это удобно?
Знаете ли вы о каких-либо узорах, синих принтах, случаях успеха или открытые проекты, которые напоминают или должны делать с тем, что я пытаюсь сделать?
Решение
Мой разумный способ оформить проблему?
ИМО, да.
Это возможно, чтобы сделать это, используя язык и рамки, о которых я думаю?
Я так думаю. Но есть и другие альтернативы. Например:
Поместите записи в базу данных и доступа к ключу, состоящей из имени файла + записи записи. Может быть полный RDBMS или более легкое решение.
Реализуйте как спокойный веб-сервис с помощью UI, реализованный в HTML + JavaScript.
Внедрить с использованием масштабируемой распределенной файловой системы.
Кроме того, из вашего описания, кажется, не настраивается на необходимость использования высокомасштабируемого / транспортировки независимого слоя ... Если вам не нужно поддерживать сотни одновременных пользователей.
Это удобно?
Удобно для того, кто? Если вы говорите о вас, разработчик, это зависит, если вы уже знакомы с этими рамками.
Другие советы
Как я вижу это, сложная вещь здесь декодирует файлы на сервере. Как только вы написали это, это должно быть довольно легко.
Я бы предположил, что все, что вы используете на стороне клиента, она должна в основном загружать «различие» изменений человека.
Может иметь смысл сделать то, что действует как база данных (или использовать существующую базу данных) для этих данных? Или это слишком много всего?
В зависимости от того, сколько людей необходимо сделать это, быстро-грязное решение состоит в том, чтобы запустить программу через X переадресацию - что исключает ряд проблем .. Пока что этот сервер имеет довольно много бесплатно.
Вы рассматривали, используя распределенную файловую систему, как Openafs? Это должно быть в состоянии обрабатывать очень большие файлы. Затем вы можете написать приложение для клиента для редактирования файлов, как будто они являются локальными.