【发布时间】:2015-03-04 22:21:48
【问题描述】:
我有一个带有 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)
Table1 有大约 50 条记录。 Table2 有大约 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 来检索数据库中的所有数据。我的机器有很好的配置,比如16GB内存。但是,加载所有数据大约需要 40 秒。太慢了。很明显有些不对劲。
我尝试了一些 Django 数据模型函数来提高性能
1) Django 查询集。如果有外键,我注意到 API 会检索所有表对象。 Table3 资源访问速度极慢。就我而言,我只想要 1 个表中的数据,对另一个表的内部连接结果不感兴趣。例如,它使用 models.Table3.objects.all()。
我尝试了 models.LabSpace.objects.select_relate()。一点帮助都没有。
2) 对于如此低性能的少量数据,我什至还没有想到 Tastypie API 缓存技术。我觉得哪里明显不对。
基本上,我不确定是 Django 还是 Tastypie 的问题。我应该去哪里看?
【问题讨论】: