2016-09-17 125 views
0

我有我的「分佈式系統開發」類的項目,並且我的項目正在製作一個最小版本的雲存儲(就像Google Drive一樣)。在2個數據庫之間共享1個存儲庫

我這裏的做法是用2個用Rails編寫的後端服務器,用1個代理服務器來控制發送到服務器的請求,2個帶有主從複製關係的Postgres服務器。

但這裏的問題是如何存儲真正的資產(視頻,pdf,MP3 ...)。我沒有這方面的經驗。

示例: 如果1個用戶打開2個瀏覽器選項卡,然後在每個選項卡中他將1個具有相同名稱的視頻上傳到1個目錄,會發生什麼情況?

enter image description here

+0

當您同時上傳兩個視頻時,您預期結果如何?一個成功,一個失敗?都成功video_file.mp4和video_file(2).mp4 ...? – RedGlobe

+0

重命名,或只鎖定上傳1個請求,我仍在決定。那麼,哪種方式更好(或者更容易歸檔)? – user3448806

回答

1

因爲你很可能希望異步上傳,這是很容易處理:上傳(即文件名+哈希)之前產生某種令牌,然後用手上傳關閉的延遲工作。如果用戶嘗試上傳第二個文件,它將生成相同的標記並被拒絕。

跟蹤數據庫中上載的示例。在開始上傳之前生成記錄並保存文件名和散列。

Asset.create(filename: ..., hash: ...) 

一旦上傳完成後,您可以更新與S3網址或任何你用於存儲的記錄(通過資產ID來延遲工作)。驗證很容易:

validates uniqueness: { scope: :filename } 
+0

感謝:D但是這種情況如何:2瀏覽器標籤(或2瀏覽器)以2種方式(代理 - >導軌服務器1 - > postgres 1;代理 - >導航服務器2 - > postgres 2)發出請求,並由於網絡問題,那麼會有2個令牌? Sr對於這個問題,但我真的很新:( – user3448806

+1

你描述你的數據庫的方式我認爲奴隸將只讀,寫入只會發生在主人。無論是否是這種情況,你的上傳跟蹤需要一個或者讓你的文件存儲器處理它(例如,如果你上傳到S3併爲每次上傳嘗試生成相同的密鑰,那麼你的文件將不會被存儲兩次) –

+0

噢,是的,只有主控制器是可寫的,sr忘了吧:)這只是一個課程項目,所以我只用本地網絡做一些虛擬機的演示。 (沒有像S3這樣的外部服務) – user3448806

相關問題