2017-06-24 15 views
0

私のアプリでreact-native-sqlite-storageを使用しています。 WALで非ロック読み取り操作を実現する方法基本的には、私はPRAGMA journal_mode=WALを使ってWALを有効にしましたが、変更はありません。私の読み込みクエリはまだブロックされています。反応ネイティブsqliteストレージで先読みログを有効にする方法

反応ネイティブsqliteストレージでWALを達成するにはどうすればよいですか?私はSQLiteを初めて使用しています

答えて

0

質問の対象が分からない人は、WALとは何か、Write.Ahead Loggingです。どういう意味ですか?基本的には、DB上の書き込み操作を改善することです。

サードパーティのlibがどのように動作するのか、どれくらい効率的なのかわかりません。第三者に深く掘り下げられるまで、効率はわかりません。 react-native-sqlite-storageは謎の作品なので、気にするものは何もありませんが、私たちはいくつかの機能を実装して、見栄えを良くする必要があります。

PRAGMA journal_mode = WALは、先行書き込みロギングファイルに新しいデータを追加するためのクエリです。つまり、DBに新しいデータを書き込むと、以前に書き込まれたデータがロールバックファイルにコピーされ、新しいデータが直接DBファイルに書き込まれるということです。大量のデータが書き込まれるしたがって、DBファイルでは、の場合、の2つのディスク書き込みが行われます。

WALは、新しいデータをロギングファイルに書き込むのではなく、新しいデータを直接DBに書き込まないようにして、平和な生活を送ることができます。

今、それがどのように動作するかしてみましょう:

以下のコードではこの関数が呼び出されます、あなたがモードクエリの後に、この関数で別のクエリを実行することで、あなたのDBを移入することができます初めてのDBを開いたとき。

populateDatabase(db) { 
    const selectMode = 'PRAGMA journal_mode=WAL;' 
    db.executeSql(selectMode, [], 
      () => { 
       console.log('running query...') 
      }, 
      (error) => { 
       console.log('error implementing', error) 
      }) 
    } 

すべてがクールだと思います。ご遠慮なくご質問ください。

乾杯:)

EDIT 1:

WALを使用しながら、パフォーマンスの問題があり、のパフォーマンスは、データが 2つの場所で検索する必要があるため が大きいWALファイルに苦しむことができ読み込みます。

+0

私がWALを有効にしたのは、書き込み操作が実行されている間に読み取りがロックされないようにするためです。しかし、WALはまだ書き込みが進行している間、私の読取り問合せがブロックされている。:(助けにはならない。 –

+0

有効に編集内容を確認してください。.. – Codesingh

+0

はお時間をいただき、ありがとうございます。 私は、データが2つの場所で検索する必要があることに同意します。だから、このロック問題を解決するために何ができるのですか?https://stackoverflow.com/questions/8104832/sqlite-simultaneous-reading-and-writing#answer-16205732 その他の提案は歓迎します –

関連する問題