У меня есть приложение django, которое постоянно получает обновления клиентов и считывает данные из базы данных.Я заметил, что после сохранения объекта мое приложение намного медленнее читает базу данных.В этой таблице содержится более 2 млн. Объектов.
Я использую 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()
Это нормально?Есть ли способ улучшить это?Иногда чтение может показаться слишком длинным для этого варианта использования до 1500 мс.