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

时间:2018-01-20 12:42:18

标签: python sql postgresql insert

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

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

  1. 由于频繁向db发送少量行的开销,这是否合理?
  2. 如果是这样,列表会明智吗?我担心如果我的程序意外终止,也许某种形式的序列化数据会更好?

1 个答案:

答案 0 :(得分:0)

每秒150次插入可以成为数据库上的负载并可能影响性能。改变你的方法有利有弊。以下是一些需要考虑的事项:

  • 数据库实现ACID,因此插入是安全的。使用缓冲方案很难实现。
  • 查询的最新信息有多重要?
  • 什么是查询加载?
  • .arrows .right { position: absolute; color: white; top: 8em; right: 0.4em; border: 0.02em solid #fefefe; border-radius: 0.14em; padding: 0em 0.4em 0.2em; background: #F2B8A2; } 非常简单。替代机制可能需要重新发明轮子。
  • 您是否对插件有其他要求,例如确保它们特别有序?

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

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

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

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