【发布时间】:2017-06-24 11:09:37
【问题描述】:
我在我的应用程序中使用react-native-sqlite-storage。如何启用 WAL 来实现非锁定读取操作。基本上,我使用PRAGMA journal_mode=WAL 启用了 WAL,但仍然没有变化,我的读取查询仍然被阻止。
如何使用 react-native-sqlite-storage 实现 WAL?我是 SQLite 新手
【问题讨论】:
标签: android sqlite react-native
我在我的应用程序中使用react-native-sqlite-storage。如何启用 WAL 来实现非锁定读取操作。基本上,我使用PRAGMA journal_mode=WAL 启用了 WAL,但仍然没有变化,我的读取查询仍然被阻止。
如何使用 react-native-sqlite-storage 实现 WAL?我是 SQLite 新手
【问题讨论】:
标签: android sqlite react-native
对于所有不了解问题的人,让我告诉你,什么是 WAL,它是 Write.Ahead Logging。这是什么意思?基本上,这个概念是为了改进对 DB 的写操作。
我们都不知道第三方库是如何工作的,它们的效率如何?在深入了解第三方之前,我们不知道它的效率。 react-native-sqlite-storage 是一项出色的工作,所以没什么好担心的,但是我们必须在我们这边实现一些功能来让事情看起来更好。
PRAGMA journal_mode=WAL 是将新数据添加到预写日志文件的查询。我的意思是每当我们在 DB 中写入新数据时,发生的情况是它将先前写入的数据复制到回滚文件中,并将新数据直接写入 DB 文件因此,当写入大量数据时,这不是一个好习惯因此,在 DB 文件中,每次 DB 更改都会导致两次磁盘写入。
WAL 可以通过不将新数据直接写入数据库而不是将新数据写入日志文件来让您平静地生活。因此,这会导致单磁盘写入。
现在让我们看看它是如何工作的:
在下面的代码中,当你第一次打开数据库时,这个函数将被调用,你可以在模式查询之后通过在这个函数中执行另一个查询来填充你的数据库。
populateDatabase(db) {
const selectMode = 'PRAGMA journal_mode=WAL;'
db.executeSql(selectMode, [],
() => {
console.log('running query...')
},
(error) => {
console.log('error implementing', error)
})
}
一切看起来都很酷。请不要犹豫,提出问题。
干杯:)
编辑1:
使用 WAL 时出现性能问题,Performance for reads 可能会受到大型 WAL 文件的影响,因为必须在其中搜索数据 两个地方。
【讨论】: