在图像托管站点的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都在一个查询中,这可能吗?
你有什么建议吗? 感谢答案 0 :(得分:2)
真正的高流量图像托管CND与原始服务器一起工作,如果您在CDN上请求某些内容,CDN会在源服务器上执行相同的请求。它全部使用HTTP标头处理,他们甚至没有数据库。
在您的情况下,我说这取决于许多实际的事情来选择完美的数据库结构。我将所有用户名和密码字段设为二进制文件。
更有趣的问题是,复制,分片,聚类,引擎(用于FULLTEXT搜索的MyISAM / Aria,用于引用的InnoDB)。
Google 数据库规范化,因为这对于引用和集成非常重要。当然你可以加入这些表格。请注意分区/分片或群集,因为有不同的规则和引擎。
考虑其他数据库也是如此,例如MongoDB。
如果这是关键业务,您应该考虑咨询数据库专家。
答案 1 :(得分:0)
对我来说,你必须使用MyISAM
,如果所有数据都在一张表中,它会更快但如果你在同一张表中有图像和类别,那么它将是一团糟。
我的意见是,如果您使用用户名或类别进行搜索,那么拥有1或2个表格会更快...而不是3个(图像和用户)。如果您不关心使用类别和用户名进行搜索,那么最好使用3个表。别忘了INDEXES