相关疑难解决方法(0)

SQLite中并发读/写和读取的策略

我有一个SQLite数据库,我保持打开并在进程A中写入.我希望能够以只读方式从进程B使用它.

根据该文件,

  • 如果数据库是UNLOCKED,则可能无法读取(或写入)数据库 - 不合适
  • 如果数据库是SHARED,那么两个进程可以读取它但第一个不能写 - 不合适
  • 如果进程想要写它需要一个EXCLUSIVE锁,这意味着没有其他进程可以写 - 不合适

进程A将进行大量的小写操作,因此我不认为在每个事务提交上复制是有效的.

我能看到它的唯一方法是让读者等到数据库进入UNLOCKED状态,在读取期间获得SHARED锁定然后释放它.同时,进程A将要写入并将被阻塞,直到锁变为可用 - 如果有的话(如果进程B崩溃了怎么办?).这意味着进程A和进程B将争用锁 - B需要SHARED而A需要EXCLUSIVE,这会减慢速度甚至导致并发问题.

有没有办法实现我的并发写作和阅读目标?

sqlite concurrency

11
推荐指数
1
解决办法
8471
查看次数

R中SQLite数据库的并行查询

我有一个大型数据库(~100Gb),我需要从中提取每个条目,对其执行一些比较,然后存储这些比较的结果。我尝试在单个 R 会话中运行并行查询,但没有成功。我可以同时运行多个 R 会话,但我正在寻找更好的方法。这是我尝试的:

library(RSQLite)
library(data.table)
library(foreach)
library(doMC)



#---------
# SETUP
#---------


#connect to db
db <- dbConnect(SQLite(), dbname="genes_drug_combos.sqlite")


#---------
# QUERY
#---------
# 856086 combos = 1309 * 109 * 6

registerDoMC(8)

#I would run 6 seperate R sessions (one for each i)
res_list <- foreach(i=1:6) %dopar% {

  a <- i*109-108
  b <- i*109

  pb  <- txtProgressBar(min=a, max=b, style=3)
  res <- list()

  for (j in a:b) {

    #get preds for drug combos
    statement   <- paste("SELECT * from combo_tstats …
Run Code Online (Sandbox Code Playgroud)

parallel-processing foreach domc rsqlite

4
推荐指数
1
解决办法
2772
查看次数