次のことができるアプリケーションを作成するために、いくつかの SQLite API を組み込んだ HTML5 アプリケーションがあります。
- (ユーザー入力に基づいて) クライアント コンピューターで sqlite データベースを読み取り、その内容をメモリに読み込みます。
- Leaflet.js / Openlayers.js を使用して、データベースから画像ブロブを非同期に読み込み、切断されたマップビューアーを構築します。
- リーフレット内のレイヤーとして 1 つのセッションで N 個のこれらの sqlite データベースをロードします。ここで、N はクライアント コンピューターがクラッシュする前にメモリ内で処理できるデータベースの最大数です。
これにより、新しい電話/タブレット/PC ブラウザーで実行でき、何もインストールせずにコンテンツを開いたり表示したりできる、クリーンなアプリが作成されます。私のアプリケーションは、node.js の使用を目的としていると思われる JavaScript ライブラリを使用してこれを行います。
私の問題:
- sqlite 形式のマップ データは大きくなる可能性があります (簡単に 2GB を超えます)。私のアプリケーションは小さな sqlite db を問題なく処理しますが、単一の sqlite db が特定の GB 制限 (> 2.5GB など) を超えて開かれると、ブラウザーがクラッシュします。
- このライブラリは、sqlite データベースを javascript オブジェクトとしてメモリにロードします
- クライアント側のキャッシュ ストレージの制限により、特にモバイル デバイスでは十分なキャッシュ スペースがないため、IndexedDB を介して DB を「複製」できません。
DB全体をメモリにロードしない既存のsqlite javascriptライブラリはありますか? Web ワーカーを介して複数のプロセスをスレッド化または生成する方法はありますか?このメモリ負荷でブラウザ プロセスが過負荷にならないようにする方法はありますか? このタイプのマップ データ (タイル) は、特定の時点で DB から 8 ~ 12 行しか必要としないようなものです。
基本的に、私が考えることができる唯一の本当の答えは、このメモリのしきい値を超えないようにデータベースを作成し、ロードできるデータベースの総数を制限することです。私が見落としている他のオプションがあるかどうかを確認したいと思います。
TL-DR; javascript でギガバイト サイズのオブジェクトを作成していますが、結果としてブラウザーがクラッシュします。そうならないようにするにはどうすればいいですか?