問題タブ [better-sqlite3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
3352 参照

reactjs - React Web App と質問をサポートする SQlite/PouchDB を構築していますか?

私の目標


Service Workersを介してオフラインで動作し、バックエンドなしで SQlite ファイルをクエリできるReact JS WEB APPを作成します。Linux OS を実行しています。

問題


React Js Web アプリケーションでの SQlite の使用に苦労しています。create-react-appを使用して、SQLite データベースにクエリを実行しようとしています。

sqlite3から始まります

sqlite3を npm パッケージとして完全にインストールすることはできません。これにはaws-sdkという依存関係が必要であり、このパッケージをインストールした後に次のように出力されるためです。

それから...私はbetter-sqlite3のような別のsqliteサポートライブラリの検索に移りました

ベター-Sqlite3

better-sqlite3をインポートすると、ブラウザ画面に次のような出力が表示されます。

それが何を意味するのか、私にはわかりません。ライブラリのトラブルシューティング セクションには何もないため、デバッグすることはできません。

クリプケンの Sql.js

Javascript と軽量で構築されたものを試してみましょう。

コンパイルしようとしてメモリ ヒープが爆発しました。

さて、sqlite ライブラリは忘れて、PouchDB を試してみましょう!

現在のソリューション


PouchDB

この混乱の後、私は SQlite ライブラリの使用をあきらめ、オフラインで最初に使いやすいものを試みました: Pouch DB です。SQlite ファイルを Pouch にロードすることは可能だと思いました。

だから私はこの質問をしました: What is the correct way to load prebuilt SQlite databases with or without PouchDB in a React App

いいえ、それはnoSQLデータベースです。可能性はありません...

次に、すべての SQlite データベースを .json ファイルに変換する必要があり、すべて手動で行いました...

次に、データベースを作成し、.json ファイルからデータをインポートしましょう。

編集1:

私の SQlite ファイルには、各テーブルに 5k に近いレジストリが含まれています。したがって、SQlite テーブルから変換したすべての .json ファイルには、必要に応じて 5 k のオブジェクトまたはドキュメントがあります。これらの .json ファイルは 19 個あり、それぞれがテーブルを表しています。

AAAAND...クエリを実行するには、.json ファイル (テーブル) 間で変更する必要がありますが、ファイル変換後、_rev 属性がないため、bulkDocs を使用してレジストリを読み込むたびに、テーブル間で競合が発生します。 _rev 属性がありません。

これは私のdbサービスのコードです:

ドキュメントの例:

表1:

表 2:

最初の (dbLoad(Table1)) 呼び出しで、すべてのドキュメントがロードされ、_rev 属性が最初のテーブルに作成されます。

Table2.json を使用して別の呼び出し (dbLoad(Table2)) を行うと、新しいファイルに _rev 属性がなく、Pouch がこの属性を作成すると同じになるため、競合します。

編集2:

コードを次のように変更しようとしました。

.json ファイルは load 関数と同じディレクトリにありましたが、データは読み込まれません。

だから私はbulkDocsバージョンに固執しています。

質問

非常に長い投稿で申し訳ありません。すべての文脈化の後、質問があります。

  • React Web App 環境で sqliteライブラリをセットアップする可能性はありますか?
  • バックエンドなしで?
  • .json テーブルを切り替える推奨される方法は何ですか?
  • 保存されている前のものを削除して、次のものをロードする必要がありますか?
  • または、すべてのテーブルを手動でロードしてから、次を使用してダンプしますポーチダンプcli?

ご不明な点がございましたら、お気軽にお問い合わせください。

お時間をいただきありがとうございます!

考えられる答え


さて、このようなコードを作成することで問題を解決できました。

switch ステートメントはテーブルの名前であり、IndexedDB に挿入するためのテーブル ドキュメントを返します。.json ファイルごとに新しいデータベースを作成し、クエリを実行するために、React を使用しているため、コンポーネントの状態で DB の参照を保存しています。

テーブル間で変更するたびに、bulkDocs を使用する関数を呼び出しているため、最適化が不足していると思います。テーブルが既に IndexedDB に挿入されているかどうかを確認する必要があるかもしれません。