数据库设计&文件存储服务器

时间:2011-05-11 11:12:34

标签: sql database database-design amazon-s3

我正在构建一个可以上传一些静态数据并需要一些建议的Web应用程序。

开始时,我想使用内部磁盘但是如果数据增长我计划使用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_serversstorage_servers_files表,只需...在server表中创建一个字段files,然后存储子域名。然后配置应存储在配置文件中。

是不是有点过度工程?

2 个答案:

答案 0 :(得分:1)

一些建议 -

使用S3,您不需要多个容器或桶来增加尺寸。 S3 Buckets拥有无限数量的对象(无限制,我的意思是,在AWS空间不足之前,您可能会用完要存储的物品或支付金钱)。创建多个存储桶的原因是针对不同的应用程序空间或安全性。使用AWS IAM,您可以限制对特定应用程序或用户的存储桶访问。

在这种情况下,如果您只有一个带有单个存储桶的应用程序,则可能需要将安全设置存储在配置中。

此外,根据我的经验,随着时间的推移,很多人可能最终会访问您的数据库(开发人员,分析师,项目经理,DBA等)。对源代码管理和服务器的访问通常更加有限,并且可以更好地跟踪更改。出于这个原因,我倾向于尽可能地将密码和令牌保留在DB之外。

如果您将来转移到CDN,您仍然需要CDN源文件的源来源。

不确定您的ip列是什么,但您可能会使用DnsName而不是ip,因为IP地址可能会发生很大变化(特别是使用AWS服务)。

答案 1 :(得分:0)

不,它不是过度设计的。看起来你的设计对我来说没问题。