我正在设计一个文件管理系统,用户可以在其中将文件上传到我们服务器上的“文件夹”。实际上,文件被上载到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)。
这些解决方法听起来是否过于复杂?还是我应该继续存储每个文件,而不管它们是否重复并且都可以完成?在企业中通常情况如何?