問題タブ [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.
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 に挿入されているかどうかを確認する必要があるかもしれません。