克隆Django模型或在第二个模型中添加差异化字段?

时间:2014-08-01 07:11:50

标签: python mysql django django-models

我必须存储实时流式传输'测试' mysql数据库中的数据和训练数据。我需要制作相同的Django模型。现在数据的结构完全相同,即time, value, label。两个模型之间的唯一区别是一个用于训练数据,另一个用于保存实时测试数据(生产数据)。

哪种方式是在性能方面创建模型的更好方法:

  1. 创建两个模型TrainDataModel和TestDataModel。
  2. 创建单个模型'数据'并添加一个布尔字段说' training'指示数据是否是测试/训练数据集的一部分。
  3. 现在,培训将在初始阶段完成,并且与测试数据相比尺寸要小得多。此外,测试数据量将是巨大的(~20-30GB)。

    处理数据涉及对收集的数据运行分类算法。在我的特定情况下,必须经常访问每个分类任务的训练数据。

    • 对于第一种情况,我将不得不查询两个表。由于数据量非常小,因此查询训练数据的速度很快。
    • 对于第二种情况,数据库会变得很大,这会影响查询响应时间,但只能访问一个表。

    哪个用例会更快?

    我是数据库查询优化的新手。因此,建议/指针将不胜感激。如果有其他方法可以做同样的事情(除了上面提到的两个),也欢迎这些建议。

2 个答案:

答案 0 :(得分:1)

使用模型继承

class DataModel(model):
    time = ...
    value = ...
    label = ...

class TrainDataModel(DataModel):
    pass

class TestDataModel(DataModel):
    pass

对于优化,你可以使用索引,就像Lara说访问django文档

答案 1 :(得分:0)

我会介意创建2个不同的模型,因为你会将它们用于不同的东西,即使数据几乎相同。你不知道,也许在将来你会因为一个特定的原因需要新的属性,你将不得不拆分模型......我认为你现在做得更好。

即使您的案例只有一个模型,您也需要查询两次,因为首先必须按标志“trainDataModel”进行过滤,然后对标志“testDataModel”进行过滤,我仍然认为分割它们会更好现在

关于查询优化,您可以在Django文档中查看此主题:

https://docs.djangoproject.com/en/dev/topics/db/optimization/

不要忘记在必要时创建索引,在最后一种情况下,您可以进行压力测试......

http://en.wikipedia.org/wiki/Stress_testing_(software)

祝你好运!