优化保存和读取Django MySQL对象

时间:2019-04-09 15:44:51

标签: python mysql django optimization

我有一个django应用程序,该应用程序不断接收客户端更新并从数据库中读取数据。我注意到保存对象后,我的应用程序读取数据库的速度要慢得多。该表有超过2M个对象。

我正在使用django,python和mysql。

我已经使用django调试工具栏来监视处理这些事件所花费的时间以及我所看到的:

INSERT INTO `manager_readmodel` (`timestamp`, `index`, `value`)
VALUES ('2019-04-09 15:25:56', 0, 7777) [3.00ms]
INSERT INTO `manager_readmodel` (`timestamp`, `index`, `value`)
VALUES ('2019-04-09 15:25:56', 1, 7777) [4.01ms]
INSERT INTO `manager_readmodel` (`timestamp`, `index`, `value`)
VALUES ('2019-04-09 15:25:56', 2, 7777) [0.73ms]
INSERT INTO `manager_readmodel` (`timestamp`, `index`, `value`)
VALUES ('2019-04-09 15:25:56', 3, 7777) [1.75ms]

SELECT `manager_readmodel`.`id`,
       `manager_readmodel`.`timestamp`,
       `manager_readmodel`.`index`,
       `manager_readmodel`.`value`
FROM `manager_readmodel`
WHERE `manager_readmodel`
ORDER BY `manager_readmodel`.`timestamp` DESC,
         `manager_readmodel`.`index` ASC
LIMIT 4 [451.36ms]

这是我的代码:

value = 1 #example
for i in xrange(1, 5):
    insert_list.append(models.ReadModel(
        timestamp=local_time,
        index=i,
        value=value
    ))
models.ReadModel.objects.bulk_create(insert_list)
#
#
#
#
readings = readings.all().order_by('-timestamp', 'index')[:4]
reading_values = []
for i, r in enumerate(readings):
    reading_values.append(r.value)

这是创建模型的方式:

class ReadModel(models.Model):
    timestamp = models.DateTimeField(default=timezone.now)
    index = models.IntegerField()
    value = models.BigIntegerField()

这正常吗?有办法改善吗?对于这种用例来说,有时可能需要花费1500ms的时间才能读完。

0 个答案:

没有答案