Оптимизируйте сохранение и чтение объектов django mysql - PullRequest
1 голос
/ 09 апреля 2019

У меня есть приложение 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 мс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...