【问题标题】:How can I enable write-ahead logging in react-native sqlite storage如何在 react-native sqlite 存储中启用预写日志记录
【发布时间】: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


    【解决方案1】:

    对于所有不了解问题的人,让我告诉你,什么是 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 文件的影响,因为必须在其中搜索数据 两个地方。

    【讨论】:

    • 我启用 WAL 的原因是为了避免在写入操作运行时锁定读取。但是启用 WAL 并没有帮助:(。我的读取查询在写入过程中被阻止。
    • 感谢您的宝贵时间。我同意必须在两个地方搜索数据。那么可以做些什么来解决这个锁定问题呢?请查看stackoverflow.com/questions/8104832/… 欢迎任何其他建议。
    • 您可以使用异步等待、setTimeout、回调、承诺等待一个函数完成执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 2018-07-23
    • 1970-01-01
    • 2011-07-09
    • 2020-11-07
    • 2016-02-11
    • 2017-01-14
    相关资源
    最近更新 更多