为Image Hosting网站设计数据库的最佳方法?

时间:2013-10-11 11:23:48

标签: mysql database-design sphinx database-performance

在图像托管站点的mysql中设计数据库的最佳方法是什么,这对于高流量站点的服务器负载会降低。

这将是READ-Only数据库。 这就是为什么我打算使用:带有sphinx的MYISAM数据库引擎,以便更快地进行全文搜索。

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

CASE - 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)

CASE - 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

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

图片的id,哈希,名称,日期时间,用户名,电子邮件,类别,大小,nsfw都在一个查询中,这可能吗?

你有什么建议吗? 感谢

2 个答案:

答案 0 :(得分:2)

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

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

更有趣的问题是,复制,分片,聚类,引擎(用于FULLTEXT搜索的MyISAM / Aria,用于引用的InnoDB)。

Google 数据库规范化,因为这对于引用和集成非常重要。当然你可以加入这些表格。请注意分区/分片或群集,因为有不同的规则和引擎。

考虑其他数据库也是如此,例如MongoDB。

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

答案 1 :(得分:0)

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