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

标签 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表完全和只是...创建一个字段serverfiles表,然后存储子域名。然后配置应该存储在配置文件中。

是不是有点过度设计了?

最佳答案

一些建议 -

有了 S3,您不需要多个容器或桶来增加规模。 S3 Buckets 包含无限数量的对象(无限我的意思是在 AWS 空间用完之前,您可能会用完要存储的元素或需要支付的钱)。创建多个桶的原因是为了不同的应用空间或安全性。使用 AWS IAM,您可以将对存储桶的访问限制为特定应用程序或用户。

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

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

如果您将来要迁移到 CDN,您仍然需要一个文件源,以便 CDN 从中提取文件。

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

关于sql - 数据库设计和文件存储服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5963275/

相关文章:

mysql - 在表中选择 (SQL)

postgresql - 在 PostgreSQL 中创建 "table of tables"或实现类似功能?

sql - 第二规范化阶段/正常形式和第三规范化阶段/正常形式之间的区别

mysql - SQL/Knime - 带 "Group By"的转置表

MySQL根据SUM列别名计算两列之间的百分比差异(不变)

mysql - MySQL View 的自动递增序列号

sql - 选择查询以从 xml 列中删除节点

PHP - 使用另一个表插入数据库

ruby-on-rails - 具有不同 key 的 Mongoid upsert

mysql - 复杂定价矩阵的数据库结构