目录/数据库级别的最佳媒体存储解决方案

时间:2011-07-01 16:47:54

标签: php mysql media

我正在开发一个网站,其中包含不同部分的大量图片。例如,将有用户照片和文章照片。我想将所有媒体合并到一个媒体数据库表中,并根据上传日期存储图像:

id: 1564
name: 55821325202772db75de084b2919cabb (hashed)
path: images/2011/07/01/
date: 01-07-2011
ext: jpg
type: image
rtype: news (relation type)
rid: 153 (relation parent id)

如果我需要链接到新闻帖子153的所有图像,我需要查询数据库中的特定rtype并删除。

这是存储网站媒体的好方法吗?

编辑:如果我将rtype和rid合并到1(哈希)列中,这会导致更快的查询吗?

4 个答案:

答案 0 :(得分:1)

这是以前在Ruby on Rails框架中的方式。我想你也可以在php中遵循这种方式。

您可以看到有关如何将评论与多个对象关联的RoR示例:http://asciicasts.com/episodes/154-polymorphic-association

您还可以从cakePHP面包店查看这篇文章:http://bakery.cakephp.org/articles/AD7six/2008/03/13/polymorphic-behavior

答案 1 :(得分:1)

我认为这样可行,而且很灵活。一个小的缺点是你不能拥有从媒体到新闻帖子的外键,所以你没有得到参照完整性。 (你可能最终得到孤立的媒体文件。)如果这是一个问题,你可以从媒体到可能使用它的所有表的可空链接,以及一个约束,说明其中一个链接必须是非空的。

答案 2 :(得分:0)

这似乎是一种非常实用的方法。

答案 3 :(得分:0)

如果您需要真正的 HIGH 效果,可以尝试Redis

对于此问题,您可以尝试hash

添加新项目:

hset id:1564 name 55821325202772db75de084b2919cabb
hset id:1564 path images/2011/07/01/
hset id:1564 date 01-07-2011
hset id:1564 ext jpg
hset id:1564 type image
hset id:1564 rtype news
hset id:1564 rid 153

读取id 1564的路径:

hget id:1564 path

阅读所有密钥:

hgetall id:1564

Redis工作非常快(比memchached快100多倍),并且所有数据都将备份到磁盘(异步),因此即使重启后您的数据也不会丢失。 RAM的大小应足以存储您的数据库,但请确保 - Redis可以非常有效地处理内存。