如何在react-native sqlite存储中启用预写日志记录

时间:2017-06-24 11:09:37

标签: android sqlite react-native

我在我的应用中使用https://github.com/aluxnimm/outlookcaldavsynchronizer。如何启用WAL以实现非锁定读取操作。基本上,我使用PRAGMA journal_mode=WAL启用了WAL,但仍然没有变化,我的读取查询仍然被阻止。

如何使用react-native-sqlite-storage实现WAL?我是SQLite的新手

1 个答案:

答案 0 :(得分:0)

对于那些不了解被质疑主题的人,让我告诉你什么是WAL,它是Write.Ahead Logging。这是什么意思?基本上,这个概念是改进DB上的写操作。

我们都不知道第三方lib是如何工作的,效率如何?直到我们深入到第三方,我们才知道它的效率。 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进行读取时存在性能问题   可能会受到大型WAL文件的影响,因为必须搜索数据   两个地方。