2017-01-26 2 views
1

Я ищу руководство по проекту, над которым я работаю. Для справки, я хорошо разбираюсь в HTML, CSS и хорошо знаком с JavaScript, и вот где мои знания в области кодирования прекращаются. Я пытаюсь создать веб-приложение позволяет рабочих процессов, следующих на высоком уровнеПоиск совета по созданию веб-приложения, которое разбивает наборы данных

  1. добавляемые пользователем CSV файл через веб-интерфейс

  2. расколов Применение данных файла случайным образом на две группы

  3. Приложение создает два CSV-файла, каждый из которых содержит один из двух наборов данных

  4. Использование поверхностей приложений через веб-интерфейс пользователя эр, чтобы загрузить каждый из файлов

Вот более конкретный пример:

  1. добавление пользователя CSV файлы со следующим набором данными «1, 2, 3, 4, 5, 6, 7 , 8, 9, 10 '.
  2. Приложение преобразует это в два одинаковых набора данных случайных данных, таких как: «2, 3, 5, 6, 9» и «1, 4, 7, 8, 10».
  3. Приложение создает два файла. Первый содержит «2, 3, 5, 6, 9» и второй содержит «1, 4, 7, 8, 10 '
  4. Участник с двумя ссылками« Набор данных 1 »и« Набор данных 2 », который нажимает либо инициирует загрузку файла.

Мне комфортно строить передние части этого, но ища советы о том, как проектировать бэкэнд. Ищите путь наименьшего сопротивления здесь, и любое руководство ценится. Спасибо!

ответ

0

jQuery-csv будет читать файл в браузере и POST-строки как JSON на сервер - только хороший вариант, если файлы будут находиться под 5000 строк, потому что вы делаете браузер на всю тяжесть работы. Самое приятное в этом - ваша логика, как разбить файл, может быть в JavaScript, где вам удобно. Недостатком является то, что вам наверняка понадобится база данных для хранения данных, пока она не получит флаг вашего JavaScript, чтобы передача была завершена. Тогда вы несете ответственность за сбор файла из этих данных. Если вы сделаете это по требованию, когда они нажмут на ссылку, он будет медленным и тяжелым на вашем сервере.

Существует также jQuery File Upload, который отправит файл, как <input type = "file"/>. С этим вы можете уйти с большими файлами и, вероятно, уйти без базы данных, если файл не превышает пары MB. После того, как файлы будут записаны где-то на вашем сервере, вы можете отправить обратно идентификатор файла. Недостатком является то, что вы храните файлы в своем приложении вместе с потенциальными последствиями для безопасности.

Третий вариант заключается в том, что файлы огромны и/или много людей будут загружать, что направляет их загрузки на носитель данных, такой как FTP или Amazon AWS. Затем другой, отдельный процесс считывает файл, выполняет то, что ему нужно, с данными, а затем записывает файлы обратно на носитель данных. Отдельный процесс отвечает за отправку обратных ссылок на файлы либо путем помещения их в базу данных для этого пользователя, либо отправки электронной почты и т. Д. Преимущества здесь - это файлы, которые могут быть гигабайтами, если вы делаете это правильно, и это проще всего масштабировать если вы получите больше пользователей. С другой стороны, вы делаете серьезные серверные вещи.

Редактировать: Поскольку это направление, которое вы ищете, я добавлю к этому. Вам обязательно понадобятся два отдельных приложения - ваш сайт, который просто выгружает файл, а затем рабочее приложение за кулисами, которое передает файл через вашу логику в два потока, которые добавляются к вашим новым файлам. Простая версия будет плановой, которая будет проверять новые файлы каждый раз так часто, а затем перемещает или удаляет их и отправляет ссылки на ваш пользователь. Он может быть увеличен с увеличением, например, с использованием очереди Amazon, поэтому ваш сайт ставит в очередь сообщение работнику о том, что файл готов, вызывая его сразу, а не ожидая определенного запланированного времени. Другим было бы использование SignalR, чтобы рабочий мог уведомить пользователя на веб-сайте в режиме реального времени, что «ваши файлы готовы, нажмите здесь, чтобы загрузить их».

Какой бы подход вы ни выбрали, убедитесь, что ссылка на файл довольно случайная и длинная, а не что-то вроде увеличивающегося числа или метки времени, или вы рискуете, что какой-то слегка подкованный пользователь сможет следить за файлы других пользователей.

Возможно, вашим лучшим решением будет некоторая комбинация вышеизложенного после взвешивания плюсов и минусов.

+0

Большое вам спасибо за подробный ответ. Действительно информативный. К сожалению, я думаю, мне нужно выбрать вариант № 3, так как эти файлы могут превышать 1 миллион строк данных. Я чувствую себя комфортно, создавая простой шрифт-конец, который позволяет пользователям загружать файлы на S3, но особенно создание службы, которая достигает моих «данных синтаксического анализа, разделения данных и создания новых файлов», - это то, где я новичок. Любые рекомендации о том, как подойти к этому? Использовать Лямбда-функции - хороший подход? Это все новое для меня, и я играю за погружение, но просто ищу руководство на пути наименьшего сопротивления. – user2603286

+0

Я изучал это дальше, и я думаю о том, чтобы сделать следующее: - Создание простого интерфейса для пользователей для загрузки файлов, которые будут перенаправлены в ведро S3 - Создать функцию (и) лямбда на Java, которая анализирует данные набор, включенный в CSV, а затем создает два отдельных файла, каждый со случайным набором из половины данных, а затем сохраняет эти новые файлы обратно в S3 . Затем покройте эти ссылки на новые файлы в интерфейсе Я принимаю Я смогу подключить некоторые точки в этом процессе с темами SNS или что-то в этом роде, но все же немного нечеткое. Мысли? – user2603286

+0

Звучит примерно так. В этом случае я добавил к своему ответу. –

Смежные вопросы