在2个数据库之间共享1个存储库

时间:2016-09-17 02:36:36

标签: ruby-on-rails postgresql database-replication

我的项目是用于我的分布式系统开发"我的项目正在制作云存储的最小版本(就像Google云端硬盘一样)。

我的方法是使用2个用Rails编写的后端服务器,1个代理服务器来控制发送到服务器的请求,2个Postgres服务器使用主从复制关系。

但问题是如何存储真实资产(视频,pdf,mp3 ......)。我没有这方面的经验。

例如: 如果1个用户打开2个浏览器选项卡,则在每个选项卡中他将1个同名视频上传到1个目录,会发生什么?

enter image description here

1 个答案:

答案 0 :(得分:1)

由于你可能想要异步上传,这很容易处理:在上传之前生成某种令牌(即文件名+哈希),然后将上传文件移交给延迟的作业。如果用户尝试上传第二个文件,它将生成相同的令牌并被拒绝。

跟踪数据库中上传的示例。在上载开始之前生成记录并保存文件名和哈希。

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

上传完成后,您可以使用S3 URL或用于存储的任何内容更新记录(将资产ID传递给延迟的作业)。然后验证很简单:

validates uniqueness: { scope: :filename }