MySQL 10M中的每个用户的一个表或每个用户的单独表记录db

时间:2012-02-01 06:46:26

标签: mysql multiple-tables

我正在为可以为我的客户处理1000张图片的网站上工作。每个用户说20,000个文件,大约200个用户(希望很快就会有1000个)。

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

数据库困境是:

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

第二种解决方案似乎有一些优势:

  • 因为查询仅为一个用户搜索vFiles,第二个解决方案会减少数据库的负载。
  • vFiles的操作(如重命名,删除,重新排序)将影响更小的表格。

您的想法将不胜感激。

2 个答案:

答案 0 :(得分:1)

第二种解决方案似乎未考虑到网站功能的未来变化。例如,如果您希望以后允许用户共享图像,或允许具有不同权限级别的多个用户的图像池到文件中,该怎么办?如果您使用解决方案#2,添加这些功能将导致大量重复条目。一般来说,如果您有相同的信息,我读过的大多数内容建议将其放在一个表中,然后添加一个链接表以获得灵活性。选择与链接表中的user_id x匹配的项目应该非常快,即使有第三列用于其他过滤权限。

此外,即使您有一个巨大的单表搜索,向相关列添加索引也会大大加快搜索过程。我能想到#2可能更好的唯一情况是你是否锁定了桌子。

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

答案 1 :(得分:0)

使用以下表格结构

    User Id ownership, permissions, location size etc imageFileIndex

在一张表中 在另一张表中

    imageFileIndex vFile