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

Php 目录/数据库级别的最佳媒体存储解决方案,php,mysql,media,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

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

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和rid

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


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

这是Ruby on Rails框架中使用的方式。我认为在php中也可以采用这种方法

您可以看到一个RoR示例,说明如何将注释与多个对象关联:


您还可以查看cakePHP bakery的这篇文章:

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

我认为这会奏效,而且非常灵活。一个小缺点是,您不能拥有从媒体到新闻帖子的外键,因此无法获得引用完整性。(您可能最终会得到孤立的媒体文件。)如果这是一个问题,您可以拥有从媒体到所有可能使用它的表的可空链接,并有一个约束,其中一个链接必须是非空的。

如果您真的需要高性能,您可以尝试

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

添加新项目:

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可以非常有效地使用内存。

我没有ROR方面的经验,有这样的数据库吗?@Jens,哈希是Redis中的一种键类型。您可以使用常用的字符串值、列表、集合、排序集合和散列。有关数据类型的详细信息: