您确定要并且需要将图像存储在数据库中吗?在许多情况下,您可以通过将图像存储在文件系统而不是数据库上来显着提高效率。
将图像存储在数据库之外
当您将图像存储在文件系统上时,您可以直接从您的网络服务器或云主机(如 Amazon S3 或内容分发网络或 memcached 等)提供它们。
元数据
在您自己的数据库中,要存储的好信息(恕我直言)是有关图像的元数据,例如可搜索的文件名(如果您的用户将使用这种方式进行搜索)、像素尺寸(如果您想按大小搜索或提供图像的高度和宽度)在您的 HTML 中)、mime 内容类型(如果这对您有用)等。
对于您对不同类型图片的描述,取决于您要存储的每种类型的不同信息类型。
sti 还是多个表?
你的图像种类基本相同吗?[按种类,我的意思是像 Company、Profile、Machine 等。] 如果是这样,我会为所有这些(即元数据)使用一个带有枚举类型字段的表。根据您的数据库,您可以使用字符串名称(例如“company”、“profile”等)或使用 int 常量(例如 1 代表公司、2 代表个人资料等)来执行此操作。Django 有几种继承方式. 其模式名称是单表继承 (STI)。我相信 Django 并不完全支持这一点,但是如果您搜索它,您将获得正确的实现方法。
你的图像种类有本质上的不同吗?如果您的各种图像具有非常不同类型的数据,那么可以,使用单独的表。
据我所知,使用一个带有索引的表与使用单独的表之间的速度差异应该是相似的,因为在这两种情况下,每个请求基本上都有一个查找来找出图像行的范围。您可以确定基准。
干草堆的教训
在您编写一些代码之前,请阅读 Facebook 是如何实现这一点的——这是一个很好的概述。
http://www.facebook.com/note.php?note_id=76191543919