Sql 数据库设计与开发;文件存储服务器

Sql 数据库设计与开发;文件存储服务器,sql,database,database-design,amazon-s3,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(

我正在构建一个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\u servers
storage\u servers\u文件
表。。。在
文件
表中创建一个字段
服务器
,然后存储子域名。然后,配置应存储在配置文件中


它不是有点设计过度吗?

不,它不是设计过度。看来你的设计对我来说还行。

有几点建议-

使用S3,您不需要多个容器或桶来实现大小增长。S3存储桶可以容纳无限数量的对象(我的意思是,在AWS耗尽空间之前,您可能会用完要存储的物品或要支付的钱)。创建多个bucket的原因是为了不同的应用程序空间或安全性。使用AWS IAM,您可以限制特定应用程序或用户对存储桶的访问

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

另外,根据我的经验,随着时间的推移,很多人最终可能会访问您的数据库(开发人员、分析师、项目经理、DBA等)。对源代码管理和服务器的访问通常更为有限,并且可以更好地跟踪更改。出于这个原因,我更喜欢尽可能不让密码和令牌进入数据库

如果您将来要移动到CDN,您仍然需要文件的源代码,以便从中提取CDN

不确定您的ip列的用途,但您可能希望使用DnsName而不是ip,因为ip地址可能会发生很大变化(尤其是使用AWS服务时)