当你有太多行时,django数据库设计

时间:2017-09-02 07:42:51

标签: sql django database

我有一个带有postgres db的django网络应用程序;一般操作是每天我都有一个值数组需要存储在其中一个表中。 没有可预见的需要查询数组的值,但需要能够绘制特定日期的值。 问题是这个数组非常大,如果我将它存储在数据库中,我每年有6000万行,但如果我将每一行存储为blob对象,我就有6万行每年一行。

当您不想使用值行查询时,使用blob对象减少表大小是一个很好的决定吗? 以下是两个选项:

option1 :保留所有

group(foreignkey)| parent(foreignkey) | pos(int) | length(int)
  A              |  B                 |  232     |  45
  A              |  B                 |  233     |  45
  A              |  B                 |  234     |  45
  A              |  B                 |  233     |  46
...

option2 :将数组折叠为blob:

group(fk)| parent(fk) | mean_len(float)| values(blob)
  A      |  B         |    45          |[(pos=232, len=45),...]
...

所以我不想查询pos或长度,但我想查询组或父。 我正在谈论的阅读查询的一个例子是:

SELECT * FROM "mytable"
LEFT OUTER JOIN "group"
ON ( "group"."id" = "grouptable"."id" )
ORDER BY "pos" DESC LIMIT 100

这是典型的django admin list_view页面主要查询。

1 个答案:

答案 0 :(得分:0)

我尝试加载数据并尝试在django管理页面中显示表而不进行任何复杂查询(只是读取查询)。 当我通过150万行时,管理页面冻结。所需要的只是该表上的一些计数查询导致应用程序崩溃所以我绝对应该将数据保存为blob或者根本不将它保留在db中并改为使用文件系统。

enter image description here

我想强调一下,我使用django 1.8作为我的测试平台,所以这不是一个postgres评估,而是django admin和postgres的系统评估。