SQL插入上的开销有意义吗?

问题描述 投票:0回答:1

我有一个python脚本,它每10秒就会触及几十个API端点,将气候数据写入数据库。让我们说平均而言我从10个不同的线程每10秒插入1,500行。

我正在考虑制作一个批处理系统,插入查询不会在它们进入时写入数据库,而是添加到等待列表中,当列表达到一定大小时,该列表将被批量插入,并且当前列表清空。

  1. 由于经常向db写入少量行的开销,这是否合理?
  2. 如果是这样,列表是明智的吗?我担心如果我的程序意外终止,也许一种形式的序列化数据会更好?
python sql postgresql insert
1个回答
0
投票

每秒150个插入可能是数据库的负载,可能会影响性能。改变你的方法有利有弊。这里有一些要考虑的事情:

  • 数据库实现ACID,因此插入是安全的。使用缓冲方案更难实现。
  • 查询的最新信息有多重要?
  • 什么是查询负载?
  • insert非常简单。替代机制可能需要重新发明轮子。
  • 您对插件有其他要求,例如确保它们特别有序吗?

毫无疑问,还有其他一些考虑因素。

以下是一些可能的替代方法:

  • 如果不关心最近的数据,请将数据库快照以进行查询 - 例如每天一次或每小时一次。
  • 批量插入应用程序线程。单个插入可以插入多行。
  • 投资更大的硬件。减慢单个处理器速度的插入负载可能对较大的机器影响很小。
  • 投资更好的硬件。更多的内存和更快的磁盘(特别是固态)并产生很大的影响。

毫无疑问,还有其他方法。

© www.soinside.com 2019 - 2024. All rights reserved.