我在我的应用中使用了react-native-sqlite-storage。如何使WAL实现非锁定读操作。基本上,我使用PRAGMA journal_mode=WAL启用了WAL,但仍然没有变化,我的读取查询仍然被阻塞。
如何使用react-native-sqlite-storage实现WAL?我是SQLite新手
发布于 2017-06-24 20:23:42
对于那些没有意识到这个问题的人,让我告诉你什么是WAL,它是Write.Ahead日志。什么意思?基本上,这个概念是为了改进DB上的写操作。
我们都不知道第三方lib是如何工作的,它们的效率有多高?直到我们深入到第三方,我们才知道它的效率。react-native-sqlite-storage是一个很棒的作品,所以没什么好担心的,但是我们必须在我们这边实现几个特性来让事情看起来更好。
PRAGMA journal_mode=WAL是一个用于向预写日志文件添加新数据的查询。我的意思是,每当我们在数据库中写入新数据时,发生的情况是,它会将以前写入的数据复制到回滚文件中,而新数据会直接写入到数据库文件中。因此,当大量数据写入数据库文件时,这不是一个好的做法。因此,对于每个数据库更改,都会导致两个磁盘写入。
WAL可以通过不直接将新数据写入数据库而不是将新数据写入日志文件来使您平静地生活,因此,这将导致单盘写入。
现在让我们来看看它是如何工作的:
在下面的代码片段中,当您第一次打开DB时,此函数将被调用,并且您可以通过在模式查询之后在此函数中执行另一个查询来填充您的DB。
populateDatabase(db) {
const selectMode = 'PRAGMA journal_mode=WAL;'
db.executeSql(selectMode, [],
() => {
console.log('running query...')
},
(error) => {
console.log('error implementing', error)
})
}一切看起来都很酷。请不要犹豫提出问题。
干杯:)
编辑1:
使用WAL时存在性能问题,由于必须在两个位置搜索数据,因此读取性能可能会受到大型WAL文件的影响。
https://stackoverflow.com/questions/44735753
复制相似问题