跟踪各种用户上传的重复文件的有效方法

时间:2019-07-02 10:48:08

标签: mysql amazon-s3 storage

我正在设计一个文件管理系统,用户可以在其中将文件上传到我们服务器上的“文件夹”。实际上,文件被上载到s3,我将文件的哈希值作为存储密钥。当不同的用户将相似的文件上传到不同的文件夹时,这有助于避免重复存储。捕获在删除部分中。当用户删除文件时,不能保证从s3安全删除该文件,因为我使用哈希作为键,并且同一用户可能已经由多个用户上传了该文件。我该如何解决这个问题?如何通过多次存储同一文件来管理删除并同时避免冗余?

这应该使问题更清楚:

+----+-----------+------------------+----------------------------------+
| id | file name |      folder      |             md5 hash             |
+----+-----------+------------------+----------------------------------+
|  1 | file1     | /storage/folder1 | e2fc714c4727ee9395f324cd2e7f331f |
|  2 | file2     | /storage/folder1 | 1f7690ebdd9b4caf8fab49ca1757bf27 |
| 3  | file1     | /storage/folder2 | e2fc714c4727ee9395f324cd2e7f331f |
+----+-----------+------------------+----------------------------------+

如果有请求从/ storage / folder1删除file1的请求,我将无法从存储中删除该文件,因为它存在于/ storage / folder2中。

我始终可以在数据库中检入要删除文件的哈希,如果该哈希存在于其他任何行的哈希列中。但是,当要维护的文件数量达到数百万个级别时,这种扩展性可扩展吗?

还是我维护一个不同的表,该表从哈希映射到具有相同哈希的文件数。此数字在上载期间增加1,在删除期间减少1。当计数达到零时,可以安全地从存储中删除文件(s3)。

这些解决方法听起来是否过于复杂?还是我应该继续存储每个文件,而不管它们是否重复并且都可以完成?在企业中通常情况如何?

0 个答案:

没有答案