我正在构建一个可以上传一些静态数据的 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_servers
和 storage_servers_files
表完全和只是...创建一个字段server
在files
表,然后存储子域名。然后配置应该存储在配置文件中。
是不是有点过度设计了?
最佳答案
一些建议 -
有了 S3,您不需要多个容器或桶来增加规模。 S3 Buckets 包含无限数量的对象(无限我的意思是在 AWS 空间用完之前,您可能会用完要存储的元素或需要支付的钱)。创建多个桶的原因是为了不同的应用空间或安全性。使用 AWS IAM,您可以将对存储桶的访问限制为特定应用程序或用户。
在这种情况下,如果您只有一个应用程序和一个存储桶,您可能希望在配置中存储您的安全设置。
此外,根据我的经验,随着时间的推移,很多人最终可能会访问您的数据库(开发人员、分析师、项目经理、DBA 等)。对源代码控制和服务器的访问通常受到更多限制,并且可以更好地跟踪更改。出于这个原因,我更愿意尽可能将密码和 token 保留在数据库之外。
如果您将来要迁移到 CDN,您仍然需要一个文件源,以便 CDN 从中提取文件。
不确定您的 ip 列的用途,但您可能想使用 DnsName 而不是 ip,因为 ip 地址可能会发生很大变化(尤其是使用 AWS 服务)。
关于sql - 数据库设计和文件存储服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5963275/