【问题标题】:Rsqlite takes hours to write table to sqlite databaseRsqlite 需要数小时才能将表写入 sqlite 数据库
【发布时间】:2016-04-22 15:09:42
【问题描述】:

我有一个简单的 R 程序,它从 sqlite 数据库中读取一个表(1000000 行,10 列)到一个 R data.table 中,然后我对数据进行一些操作并尝试将其写回一个新表中同一个sqlite数据库。读取数据需要几秒钟,但将表写回 sqlite 数据库需要几个小时。不知道到底要多久,因为一直没有完成,我试过最长的是8小时。

这是程序的简化版:

  library(DBI)
  library(RSQLite)
  library(data.table)

  driver = dbDriver("SQLite")
  con = dbConnect(driver, dbname = "C:/Database/DB.db")

  DB <- data.table(dbGetQuery(con, "SELECT * from Table1"))  

  dbSendQuery(con, "DROP TABLE IF EXISTS Table2")
  dbWriteTable(con, "Table2", DB)
  dbDisconnect(con)
  dbUnloadDriver(driver)

我使用的是 R 版本 2.15.2,包版本是:

data.table_1.8.6 RSQLite_0.11.2 DBI_0.2-5

我已经在多个系统和不同的 Windows 版本上进行了尝试,在所有情况下,将这个表写入 sqlite 数据库都需要花费大量的时间。查看 sqlite 数据库的文件大小时,它以大约每分钟 50KB 的速度写入。

我的问题是有人知道是什么原因导致写入速度慢吗?

Tim 有答案,但我不能这样标记它,因为它在 cmets 中。

如: ideas to avoid hitting memory limit when using dbWriteTable to save an R data table inside a SQLite database 我将数据分块写入数据库

  chunks <- 100

  starts.stops <- floor( seq( 1 , nrow( DB ) , length.out = chunks ) )

  system.time({
    for ( i in 2:( length( starts.stops ) )  ){

      if ( i == 2 ){
        rows.to.add <- ( starts.stops[ i - 1 ] ):( starts.stops[ i ] )
      } else {
        rows.to.add <- ( starts.stops[ i - 1 ] + 1 ):( starts.stops[ i ] )
      }

      dbWriteTable( con , 'Table2' , DB[ rows.to.add , ] , append = TRUE )
    }
  })

需要:

   user  system elapsed 
   4.49    9.90  214.26 

完成将数据写入数据库的时间。显然我在不知不觉中达到了内存限制。

【问题讨论】:

  • 我刚刚从 R 向 SQLite 表写入了一个 1e6 x 10 的数据帧,耗时 7 秒。你能在你的数据上分享str() 的输出吗?您能否提供有关您计算机的更多详细信息?
  • 你能向那个表写入少量数据吗(例如head(DB))?
  • 如果你尝试写入一个新的 table3 然后删除 table2 会发生什么?
  • 这可能是导致缓慢的中间件。这是一个可能相关的问题:stackoverflow.com/questions/14246683/…

标签: r sqlite


【解决方案1】:

对所有记录使用单个事务(提交)。添加一个

dbSendQuery(con, "BEGIN")

在插入之前和一个

dbSendQuery(con, "END")

完成。更快。

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多