如何提高Django Tastypie Web服务器的性能

时间:2015-03-04 22:21:49

标签: django-models tastypie

我有一个带有Tastypie API的django Web服务器。性能非常慢,我不知道在哪里看。

这个问题可以这样抽象出来。它只有3个表。

class Table1(models.Model):
    name = models.CharField(max_length=64)

class Table2(models.Model):
    name = models.CharField(max_length=64)
    table1 = models.ForeignKey(Table1)

class Table3(models.Model):
    name = models.CharField(max_length=64)
   table2 = models.ForeignKey(Table2)

表1有大约50条记录。表2有大约400条记录。表3有大约2000条记录。使用MySQL。

它有3个模型资源:

class Table1Resource(ModelResource):
  class Meta(object):
    """Define options attached to model."""
    queryset = models.Table1.objects.all()
    resource_name = 'table1'

class Table2Resource(ModelResource):
  class Meta(object):
    """Define options attached to model."""
    queryset = models.Table2.objects.all()
    resource_name = 'table2'

class Table3Resource(ModelResource):
  class Meta(object):
    """Define options attached to model."""
    queryset = models.Table3.objects.all()
    resource_name = 'table3'

前端使用ajax调用3个Web服务API来检索数据库中的所有数据。我的机器配置非常好,例如16 GB内存。但是,加载所有数据大约需要40秒。太慢了。很明显有些事情是不对的。

我尝试了一些Django数据模型函数来提高性能

1)Django查询集。我注意到,如果有外键,API将检索所有表对象。 Table3Resource访问速度极慢。在我的例子中,我只想要1个表中的数据,对另一个表的内部连接结果不感兴趣。例如,它使用models.Table3.objects.all()。

我尝试过models.LabSpace.objects.select_relate()。没有任何帮助。

2)对于如此低性能的少量数据,我甚至都没有考虑过Tastypie API缓存技术。我觉得某处显然是错误的。

基本上,我不确定它是Django还是Tastypie问题。我应该在哪里看?

1 个答案:

答案 0 :(得分:1)

您应指定资源ForeignKey字段。默认为False我相信,所以你必须这样做:

class Table2Resource(ModelResource):
    table1 = fields.ToOneField(Table1Resource)

    class Meta(object):
        """Define options attached to model."""
        queryset = models.Table2.objects.all()
        resource_name = 'table2'

 # etc ...

如果没有,你可以尝试明确地设置它:

table1 = fields.ToOneField(Table1Resource, 'table1', full=False)