2012-02-01 35 views
3

我正在为可以为客户处理1000个图像的网站工作。说每个用户20,000个文件,大约200个用户(希望很快就会有1000个)。为MySQL 10M记录中的每个用户提供的所有用户或单独的表的一个表db

  • 图像通过在MySQL的InnoDB数据库vFile(唯一ID)记录描述所有权和权限,在文件夹树中的位置,对S3的物理文件的位置,大小等
  • 用户可以创建,删除表示,重新排序等这些vFiles
  • 每个用户只能更改他拥有的vFiles

数据库困境是:

  • 所有vFile记录在一个表中或为每个用户
  • 单独的表。

二的解决方案,似乎有几个优点:

  • 的查询会为vFiles搜索一个用户只,第二个解决方案上的分贝降低负荷。
  • vFiles的操作(如重命名,删除,重新排序)将影响更小的表。

您的想法将不胜感激。

+0

为什么不直接使用S3的权限? – ajreal 2012-02-01 10:46:19

回答

1

第二个解决方案似乎没有考虑将来对网站功能所做的更改。例如,如果您希望在以后的日期允许用户共享图像,或允许多个用户对文件具有不同权限级别的图像池,那该怎么办?如果您使用解决方案#2,添加这些功能会导致大量重复条目。一般来说,如果你有相同的信息,我已阅读的大部分内容建议将它放在一张表中,然后添加一个链接表以提高灵活性。在链接表中选择与user_id x匹配的项目应该非常快,即使有第三列以获取额外的过滤权限。另外,即使您有大量单表搜索,向相关列添加索引也会大大加快搜索过程。我能想到的唯一情况是#2可能更好,如果你锁定了桌子。

虽然我不是专家,所以我想听听其他人的想法。

0

使用下表结构

User Id ownership, permissions, location size etc imageFileIndex 

在一个表 而在另一个表

imageFileIndex vFile 
相关问题