【问题标题】:Best way to design database for Image Hosting site?为图像托管网站设计数据库的最佳方法?
【发布时间】:2013-10-11 11:23:47
【问题描述】:

在 mysql 中为图像托管站点设计数据库的最佳方法是什么,这样可以减少高流量站点的服务器负载。

这将是只读数据库。 这就是为什么我打算使用:MYISAM 数据库引擎和 sphinx 以实现更快的全文搜索。

sphinx 最适合加入/联合查询吗?

案例 - 1:

#######Database: image_host##########

/////////////table name : image////////////

id (int)(11) (auto-increment)
hash (varchar)(32)
name (varchar)(255)
og_name (varchar)(255)
size (int)(11)
datetime (datetime)
user_id (int)(11)
nsfw int(1) default 0
verified int(1)  default 0


///////table name : image_categories///////

id (int)(11) (this is from image table)
category_id (int)(3)

///////table name : categories/////////

category_id (int)(3)
category_name (varchar)(255)

///////table name : image_user///////////

id (int)(11) (this is from image table)
user_id (int)(11)

/////////table name : users////////

user_id (int)(11)
username (varchar)(255)
email (varchar)(255)
paswword (varchar)(32)

案例 - 2: 把所有东西放在一张桌子上

#######Database: image_host##########

/////////////table name : image////////////

id (int)(11) (auto-increment)
hash (varchar)(32)
name (varchar)(255)
og_name (varchar)(255)
size (int)(11)
datetime (datetime)
category_name (varchar)(255)
username (varchar)(255)
email (varchar)(255)
paswword (varchar)(32)
nsfw int(1) default 0
verified int(1)  default 0

用户上传图片时将有数百万条记录。我正在寻找基于性能的解决方案,因为每天会有数百万次读取。 我希望得到 ​​p>

图片的id,hash,name,datetime,username,email,category,size,nsfw都在一个查询中,这可能吗?

你有什么建议? 谢谢

【问题讨论】:

  • 如果是我,我会为后端使用现成的产品,例如 Gallery3 或 Coppermine(我认为这两者都使用 MySQL)。我喜欢 Gallery3,因为它非常可定制——尽管你确实会被一些令人讨厌的 EAV 东西所困。
  • 谢谢,但我正在寻找定制的东西。
  • 嘿,不管你的船是什么;-)

标签: mysql database-design sphinx database-performance


【解决方案1】:

真正的高流量图像托管 CND 与源服务器一起使用,如果您在 CDN 上请求某些内容,CDN 会在源服务器上执行相同的请求。这一切都由 HTTP 标头处理,它们甚至没有数据库。

在您的情况下,我想说选择完美的数据库结构取决于许多实际的事情。我会将所有用户名和密码字段设为二进制。

更有趣的问题是,复制、分片、集群、引擎(MyISAM / Aria 用于 FULLTEXT 搜索,InnoDB 用于参考)。

Google 用于数据库规范化,因为这对于引用和集成非常重要。当然你可以加入这些表。仅在分区/分片或集群时要小心,因为首选的规则和引擎不同。

也可以根据您的目的考虑其他数据库,例如 MongoDB。

如果这是关键业务,您应该考虑咨询数据库专家。

【讨论】:

  • 如果 OP 采用第二种创建表的方法,则 NoSQL MongoDB +1。
  • 我从来没有听说过cdn上的数据库,你是说云上的?对于全文搜索,我计划使用 sphinx,我计划使用 myisam,因为这仅用于读取 sql 数据,并且不会对 db 进行任何写入操作。对于大型数据库,mongo db 是否比 mysql 更好的解决方案?
  • 当我第一次阅读 图像托管网站,对于高流量网站来说,这将减少服务器上的负载 - 我认为这正是 CDN 所做的。但他们不使用数据库。他们只从您的服务器请求一次,然后从他们的服务器发送,直到我们重新验证文件或发送 GIMS 或直到缓存过期。我会把登录的东西等放在 MySQL InnoDB 中,把文件放在 NoSQL 中,在这种情况下,面向文档的数据库会更快。
【解决方案2】:

对我来说,你必须使用MyISAM,如果所有数据都在一个表中,它会更快,但如果你在同一个表中有图像和类别,那将是一团糟。
我的观点是,如果您使用用户名或类别进行搜索,那么拥有 1 或 2 个表会更快......而不是 3 个(图像和用户)。如果您不关心使用类别和用户名进行搜索,那么最好使用 3 个表。别忘了INDEXES

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2014-12-25
    • 1970-01-01
    相关资源
    最近更新 更多