0

什么是在 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

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

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

你有什么建议?谢谢

4

2 回答 2

2

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

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

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

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

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

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

于 2013-10-11T11:31:31.700 回答
0

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

于 2013-10-11T11:50:49.413 回答