Серверы проектирования баз данных и хранения файлов - PullRequest
4 голосов
/ 11 мая 2011

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

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

Также у меня есть следующая структура базы данных:

CREATE  TABLE IF NOT EXISTS `storage_servers` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  `ip` INT(20) NOT NULL ,
  `access_url` LONGTEXT NULL DEFAULT NULL , // storing server access URL
  `username` LONGTEXT NULL DEFAULT NULL , //storing server username
  `password` LONGTEXT NULL DEFAULT NULL , // storing server password
  `token` LONGTEXT NULL DEFAULT NULL , // storing server access token, if any
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;'

CREATE  TABLE IF NOT EXISTS .`storage_servers_files` (
  `server_id` INT NOT NULL ,
  `file_id` BIGINT(25) NOT NULL ,
  INDEX `fk_servers_files_1` (`file_id` ASC) ,
  INDEX `fk_servers_files_2` (`server_id` ASC) ,
  CONSTRAINT `fk_servers_files_1`
    FOREIGN KEY (`file_id` )
    REFERENCES `files` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_servers_files_2`
    FOREIGN KEY (`server_id` )
    REFERENCES `storage_servers` (`id` )
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Однако я не пользователь, если мой подход справедлив в этом вопросе.

Насколько я знаю, мне нужно было создавать субдомены для каждого отдельного контейнера хранения (cdn1.example.com, cdn2.example.com ... cdn15.example.com). Как бы вы разработали таблицы для этого?

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

Разве это не слишком сильно?

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Пара предложений -

С S3 вам не нужно несколько контейнеров или контейнеров только для увеличения размера. S3 Buckets содержит неограниченное количество объектов (под неограниченным я имею в виду, что у вас, скорее всего, не хватит предметов для хранения или денег для оплаты до того, как в AWS не хватит места). Причина создания нескольких сегментов - для разных областей применения или безопасности. Используя AWS IAM, вы можете ограничить доступ к корзинам для определенных приложений или пользователей.

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

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

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

Не уверен, для чего предназначен ваш столбец ip, но вы можете захотеть использовать DnsName вместо ip, поскольку адрес ip может сильно измениться (особенно в сервисах AWS).

0 голосов
/ 31 мая 2011

Нет, это не слишком сильно.Похоже, твой дизайн мне подходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...