Я получаю финансовые данные для примерно 5000 инструментов каждые 5 секунд, и мне необходимо обновить соответствующие записи в базе данных. Модель выглядит следующим образом:
class Market(models.Model):
market = models.CharField(max_length=200)
exchange = models.ForeignKey(Exchange,on_delete=models.CASCADE)
ask = models.FloatField()
bid = models.FloatField()
lastUpdate = models.DateTimeField(default = timezone.now)
Что должно произойти, так это:
- После получения новых финансовых данных проверьте, существует ли запись в
база данных.
- Если запись существует, обновите поля ask, bid и lastUpdate
- Если запись не существует, создайте новую запись
Мой код выглядит следующим образом:
bi_markets = []
for item in dbMarkets:
eItem = Market.objects.filter(exchange=item.exchange,market=item.market)
if len(eItem) > 0:
eItem.update(ask=item.ask,bid=item.bid)
else:
bi_markets.append(item)
#Bulk insert items that does not exist
Market.objects.bulk_create(bi_markets)
Однако выполнение этого занимает слишком много времени. Примерно 30 секунд. Мне нужно сократить время до 1 секунды. Я знаю, что это можно сделать, как я делаю то же самое с пользовательским кодом SQL в .NET менее чем за 100 мс. Есть идеи, как улучшить производительность в Django?