【问题标题】:Does Anorm support bulk insert?Anorm 是否支持批量插入?
【发布时间】:2014-09-04 13:50:16
【问题描述】:

我想将数据从 SQL 服务器复制到 Scala 中的 vertica,我正在考虑使用 Anorm,但我没有找到任何关于批量插入的文档。如果 Anorm 不支持批量插入,我应该使用什么库?

【问题讨论】:

标签: scala anorm


【解决方案1】:

确实如此,使用BatchSql。这是一个直接来自测试的示例

BatchSql(
  "SELECT * FROM tbl WHERE a = {a}, b = {b}",
  Seq(
    Seq[NamedParameter]("a" -> 0, "b" -> -1),
    Seq[NamedParameter]("a" -> 1, "b" -> 2)
  )
)

但是,正如 @LimbSoup 在 cmets 中指出的那样,这并不比按顺序执行多个插入更快,因为它在后台使用 executeBatch 向数据库发送包含查询序列的语句。

唯一的性能提升将来自网络延迟(因为单个语句被发送到数据库)。

请参阅此答案以了解替代方法:Batch insert with table that has many columns using Anorm

【讨论】:

  • 请记住,这将一次运行插入,而不是在单个语句中运行,如果要移动大量数据,这可能会非常慢。
  • 我查看了BatchSql 的实现,但无法验证您所说的。看起来 anorm 正确地执行了批处理查询,你能指出证明你假设的相关代码吗?
  • 让我纠正一下我的意思。它将批量发送查询到数据库,但它不会神奇地将 100 个插入更改为单个插入。如果 OP 想要移动大量数据,则会存在巨大的性能差异。
  • @LimbSoup 好的,我明白你的意思。我在答案中添加了注释。
  • 使用最新版本 2.5.1 给出:“Symbol BatchSql 已弃用,请改用 BatchSql(sql, first, other)”
猜你喜欢
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多