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

4

我正在构建一个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表,并在files表中创建一个server字段,然后存储子域名。然后应该将配置存储在配置文件中。

这不是有点过度设计了吗?

2个回答

1

几个建议 -

使用S3时,您无需为大小增长而创建多个容器或存储桶。S3存储桶可以容纳无限数量的对象(通过“无限”我指的是在AWS耗尽空间之前,您可能会用完存储项目或支付资金)。创建多个存储桶的原因是为了不同的应用程序空间或安全性。使用AWS IAM,您可以将对存储桶的访问权限限制为特定的应用程序或用户。

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

另外,根据我的经验,随着时间的推移,许多人可能会获得对您的数据库的一些访问权限(开发人员、分析员、项目经理、DBA等)。对源代码控制和服务器的访问通常更加有限,并且变更更易于跟踪。出于这个原因,我更喜欢在可能的情况下将密码和令牌从数据库中删除。

如果您将来要迁移到CDN,您仍需要一个文件来源以供CDN拉取。

不确定您的IP列是用于什么目的,但您可能想使用DnsName而不是ip,因为IP地址可能经常更改(特别是使用AWS服务时)。


0

不是过度设计。在我看来,你的设计还不错。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接