我正在开发一个可以为我的客户处理1000张图像的网站。假设每个用户有20000个文件,大约有200个用户(希望很快能有1000个)。
- 图像由MySQL InnoDB数据库中的
vFile
(唯一id)记录表示,描述所有权和权限、文件夹树中的位置、S3上物理文件的位置、大小等 - 用户可以创建、删除、重新排序等
vFiles
- 每个用户只能更改自己拥有的
vFiles
数据库困境是:
- 一个表中的所有
vFile
记录,或 - 为每个用户提供单独的表格
第二种解决方案似乎有几个优点:
- 由于查询将只为一个用户搜索
vFiles
,所以第二种解决方案减少了数据库的负载 vFiles
上的操作(如重命名、删除、重新排序)将影响更小的表
如果您有想法,我们将不胜感激。
第二个解决方案似乎没有考虑到网站功能的未来变化。例如,如果以后您希望允许用户共享图像,或者允许多个用户共享对一个文件具有不同权限级别的图像池,该怎么办?如果使用解决方案#2,添加这些功能将导致大量重复条目。一般来说,如果你有相同的信息,我读过的大多数东西都建议把它放在一个表中,然后添加一个链接表以提高灵活性。在链接表中选择与user_id x匹配的项应该非常快,即使使用第三列获得额外的筛选权限也是如此。
此外,即使您有一个巨大的单表搜索,向相关列添加索引也会大大加快搜索过程。我能想到的唯一一种情况是,如果你锁定了表,#2可能会更好。
不过我不是专家,所以我想听听其他人的想法。
使用以下表格结构
放入
User Id ownership, permissions, location size etc imageFileIndex
在一张桌子上在另一个表中
imageFileIndex vFile