2011-05-11 47 views
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,然後存儲子域名。然後應該將配置存儲在配置文件中。

是不是被過度工程化了一下?

回答

0

不,它不是過度工程。看起來你的設計對我來說可以。

1

一些建議 -

隨着S3你不需要多個容器或桶只是規模的增長。 S3 Buckets可容納無限數量的對象(無限制,我的意思是您可能會在AWS耗盡空間之前耗盡商品或付款)。創建多個存儲桶的原因是針對不同的應用程序空間或安全性。使用AWS IAM,您可以限制對特定應用程序或用戶的存儲區訪問權限。

在這種情況下,如果您只有一個應用程序使用單個存儲桶,則可能需要將安全設置存儲在配置中。另外,根據我的經驗,隨着時間的推移,很多人可能最終會對數據庫(開發人員,分析師,項目經理,DBA等)有一些訪問權限。訪問源代碼管理和服務器通常更有限,並且更好地跟蹤更改。出於這個原因,我寧願在可能的情況下將密碼和令牌保存在數據庫之外。

如果您將來轉移到CDN,您仍然需要CDN從您的文件的源出處。

不知道你的ip列是什麼,但你可能不想使用DnsName而不是ip,因爲ip地址可以改變很多(特別是使用AWS服務)。