2015-04-10 3 views
0

У меня есть задача проектирования и вы хотите получить мнение экспертов. Я хочу сохранить некоторые данные, которые выглядит следующим образом:разработка приложения больших данных с использованием django

идентификатор, имя пользователя, пройти, small_pdf_doc, very_large_file -> (бинарный 30GB)

Я хочу использовать Python, но есть свобода выбора:

  • NoSQL БД
  • реляционная БД
  • хранят данные в реляционной БД, кроме very_large_file и хранить, что на диске и отображение имени файла БД

Мне нужно, чтобы решение было масштабируемым. Как вы думаете, лучшее решение? Я провел некоторое расследование, и я рассматриваю возможность использования mondodb или cassandra.

Как вы думаете, они оба будут масштабируемыми? Будут ли замедление запросов со временем? Кроме того, я прочитал документ mongodb, и он говорит, что параллельные записи не поддерживаются, но есть блокировка. Если две параллельные записи являются requeste, будет ли db ломаться или выходить из строя второй или планировать выполнение обоих?

И, наконец, не лучше ли хранить большие файлы с именем файла, которое соответствует идентификатору на диске, а не помещать их в базу данных? Это облегчает резервное копирование и позволяет параллелизм.

+2

прилипает очень большой файл где-нибудь, кроме вашей БД не всегда вещей очень больших файлов в БД исключения случаев, когда вам абсолютно необходимо. Прикрепите его на диске где-нибудь, который будет скопирован. –

ответ

1

Вы должны отделить для хранения файлов и базы данных:

  • Для id, username, pass вы должны использовать классический relationnal дб как PostgreSql. нет большого количества данных для хранения, и он будет хорошо скакать.

  • Для pdf_file и binary data вы должны использовать внешнее хранилище как Amazon S3 bucket. В результате этот способ обеспечит вам («бесконечную») масштабируемость.

Некоторые Полезные ссылки:

  • Django Storages позволяют обрабатывать Джанго exernal хранилищами.
  • Django direct S3 uplaod Поскольку ваши файлы будут очень большими, очевидным решением является непосредственная загрузка файлов на сервер хранения S3. Я не тестировал это приложение, но это дает пример.

Вы можете найти много больше на Google при поиске «прямой загрузки Django амазонка S3»

+0

Отлично.О большом хранилище файлов на s3 я забыл сказать, что мне запрещено использовать хранилище вне компании. Есть ли способ сделать его масштабируемым на локальных серверах частной компании? – max

+0

Это больше вопрос для sysadmin, и именно поэтому я использую aws s3. Решение состоит в том, чтобы развернуть персональный OpenStack, но это очень сложно построить и продолжать работать и масштабировать серверы с несколькими серверами ... Если у вашей компании есть квалифицированный системный администратор, вы можете пойти на это, если нет, то вам следует полностью подумать о том, чтобы пойти для S3, * он просто работает * ... –

1

Я бы рекомендовал использовать реляционную БД для хранения id, username и pass и поставить большие файлы в файловую систему или даже лучше что-то вроде амазонки s3. Это будет хорошо масштабироваться. На мой взгляд, большинство ваших данных выглядит как типичные реляционные данные, поэтому я бы пошел с ним.

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