1

下午好,

我正在设计一个应用程序,但我似乎无法解决这个问题。我的应用程序将有不同类型的图片:公司、个人资料、机器等……我们期待有很多图片。现在,由于我们将有很多不同类型的图片,我正在考虑在 Django 中创建一个名为“图片”的基类,然后从中创建所有子类。这将在我的数据库中提供 n 个表。因此查询会更快,因为我不会有一个包含所有图片的巨型表,并且当我想要某种类型的图片时必须在类别表上执行 JOINS。

为此,我将不得不在 Django 中使用通用外键。这是好习惯吗?我的设计是不是一个好的实践?有人告诉我通用外键不是一个好主意……为什么?

谢谢!

编辑:我不会将图像本身存储在表中,只是 AWS S3 存储桶中的路径!

4

1 回答 1

1

您确定要并且需要将图像存储在数据库中吗?在许多情况下,您可以通过将图像存储在文件系统而不是数据库上来显着提高效率。

将图像存储在数据库之外

当您将图像存储在文件系统上时,您可以直接从您的网络服务器或云主机(如 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

于 2012-04-24T01:28:05.400 回答