Django批量更新/插入性能

编程入门 行业动态 更新时间:2024-10-26 16:25:53
本文介绍了Django批量更新/插入性能的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我每5秒钟接收大约5000种工具的财务数据,并且需要更新数据库中的相应条目.该模型如下所示:

I'm receiving financial data for approximately 5000 instruments every 5 seconds, and need to update the respective entries in the database. The model looks as follows:

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秒.我知道可以做到这一点,因为我可以在100毫秒内在.NET中执行相同的自定义SQL代码.知道如何提高Django的性能吗?

However executing this takes way too long. Approximately 30 seconds. I need to reduce the time down to 1 second. I know this can be done as I do the same wth custom SQL code in .NET in under 100ms. Any idea how to improve the performance in Django?

推荐答案

如果您要获得这种性能,我不明白为什么您不只是闯入原始SQL.批量创建尚不存在的东西听起来像是不是真正针对Django的高级SQL查询.

If it’s this kind of performance you’re going for, I don’t see why you wouldn’t just break out into raw SQL. Bulk creating things that don’t exist yet sounds like the advanced SQL querying that Django isn’t really made for.

docs.djangoproject/en/2.0/topic/db/sql/

您也可以(抱歉在移动设备上):

You can also do (sorry on mobile):

bi_markets = [] for item in dbMarkets: rows = Market.objects.filter(exchange=item.exchange, market=item.market).update(ask=item.ask, bid=item.bid) if rows == 0: bi_markets.append(item) Market.objects.bulk_create(bi_markets)

也许这种组合会生成更好的SQL,并且也避开了 exists()调用( update 返回它更改了多少行).

Maybe that combination will generate some better SQL and it sidesteps the exists() call as well (update returns how many rows it changed).

更多推荐

Django批量更新/插入性能

本文发布于:2023-10-26 10:05:20,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1529821.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:批量   性能   Django

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!