2011年にiOS/Android向けのHTML5オフラインストレージソリューションを開発する質問する

2011年にiOS/Android向けのHTML5オフラインストレージソリューションを開発する質問する

問題:

携帯電話やタブレット タイプのデバイス (iOS/Android など) で 250,000 行以上のデータをオフラインで保存およびクエリするための、デバイスに依存しない (HTML5 など) ソリューションが必要です。アイデアとしては、携帯電話のデータ接続がない遠隔地で作業している人々がいて、オフラインでこのデータに対してクエリを実行し、編集する必要があることです。部分的には地理位置情報に基づいているため、彼らがいるエリアに資産がある場合 (GPS を使用)、それらの資産が表示され、編集できるようになります。オフィスに戻ったら、データをオフィス サーバーに同期できます。

私が Web 標準の観点からこのアプローチをとっている理由は、基本的に、Objective C と Java で 2 回書くのではなく、HTML5 で 1 回書いて複数のプラットフォームで動作するようにすることで、費用と時間を節約するためです。また、プラットフォームに依存しないものを書いておけば、誰もが新しいプラットフォームに移行しても、縛られることなく、時代遅れになることもありません。Windows Mobile 5 用に同様のアプリを書いたことがありますが、そのプラットフォームが廃止されたため、今では役に立たなくなっています。

デバイス上のオフライン データベースは次の条件を満たす必要があります。

  • 高速(2秒以内の応答)
  • 潜在的に結合を実行し、データベースを照会できる他のテーブルとの関係を持つ
  • GPS 読み取り値に基づいて、特定の範囲または基準 (例: x および y 座標) 内でデータを選択します。

オプション:

HTML5 ローカルストレージ:

5,000 個未満のキー/値の少量データには適しており、JSON に変換すれば配列/オブジェクトを保存することもできます。

短所:

  • 10,000 行を超えると、ハイエンドのマシンであってもブラウザの速度が非常に遅くなります。
  • ストレージ全体を反復処理して手動で検索する必要があるため、データに対して複雑なクエリを実行して必要なデータを取得することはできません。
  • 保存できるストレージ容量の制限

Web SQL データベース:

  • 要件を満たしています。
  • 250,000 行のクエリを高速に実行 (1 ~ 2 秒)
  • 複雑なクエリや結合などを作成できます
  • Safari、Android、Operaでサポートされているため、iOSおよびAndroidデバイスで動作します。

短所:

  • 2010 年 11 月時点で廃止
  • クロスディレクトリ攻撃によるセキュリティ上の欠陥。共有ホスティングを利用しないので、それほど問題にはなりません。

インデックスDB:

インデックスを除いてローカル ストレージに似たキー/値オブジェクト ストア。

短所:

  • 200,000 行のクエリを実行するのに時間がかかる (15 ~ 18 秒)
  • 複雑なクエリを実行できません
  • 他のテーブルとの結合はできません
  • メインの電話やタブレットデバイス(iPad/Androidなど)ではサポートされていません
  • 標準が未完成

これにより、非推奨の Web SQL メソッドを実装する唯一のオプションが残されますが、これはあと 1 年ほどしか機能しない可能性があります。IndexedDB とローカル ストレージは現在使用できません。

MozillaとMicrosoftがどのようにしてWeb SQLデータベース標準を廃止に追い込んだのか、そしてなぜW3Cがそれを許したのかはよく分からない。両社合わせてデスクトップブラウザ市場の77%を占めていると言われている。高度なモバイルデバイスでは、MozillaとMicrosoftの影響力はほぼゼロだ。Safari、Opera、Androidは市場シェアの90%以上を占めているオフライン ストレージが最も使用される可能性が高いモバイル市場で、どの標準を使用するかを Mozilla と Microsoft が指示できるというのは意味がありません。

の中にMozillaからのコメント代わりに IndexedDB を使用したい理由については、主に「開発者の美学」に関するもので、JavaScript で SQL を実行するという考えが気に入らないとのことです。私は納得できません。

  1. 現在提案されている標準は劣っており、非常に基本的な NoSQL 実装で、速度が遅く、データベースに必要な高度な機能さえサポートしていません。データベースを確立してデータを取り出すための定型コードが多数ありますが、その上に優れた抽象化ライブラリを作成して、より高度な機能を提供するようになると主張しています。2011 年 10 月現在、そのようなライブラリはどこにも見当たりません。

  2. 彼らは、実際に機能し、主要なモバイル/タブレット ブラウザーに実装されている既存の Web SQL 標準を非推奨にしました。一方、彼らの「新しい」および「より優れた」標準は、主要なモバイル ブラウザーでは利用できません。

  3. IndexedDB 仕様が標準化され、より多くの機能が追加され、主要なモバイル/タブレット ブラウザーに実装され、作業を容易にする優れたライブラリが登場する可能性がある今後 3 ~ 5 年間、開発者として私たちは何を使用すればよいのでしょうか。

W3C は Web SQL データベース標準を並行して実行し、問題を修正するべきです。この標準は既に主要なモバイル プラットフォームをサポートしており、非常にうまく機能しています。デスクトップ ブラウザーのシェアが最も大きい 2 つのプレーヤーである Mozilla と Microsoft がこの標準を廃止できたという事実は、かなり疑わしく、モバイル Web プラットフォームが追いついて iOS/Safari や Android に対抗できるソリューションを提供できるまで、モバイル Web プラットフォームの進歩を妨げようとする試みと見ることができます。

結論として、iOS/Androidの電話/タブレットデバイスで機能する私の問題の解決策を持っている人はいませんか。バックグラウンドで複数のデータベース実装をクエリ機能とともに使用し、どのデータベースを優先するかを選択できる優れたラッパーAPIがあるかもしれません。次のようなものを見たことがあります。芝生用椅子しかし、デフォルトではローカル ストレージのみを使用でき、他のストレージにフォールバックするはずです。遅いオプションよりも、Web SQL (デフォルト) を使用する方が良いと思います。

解決策についての助言をいただければ幸いです。ありがとうございます!

ベストアンサー1

ぜひチェックしてみてくださいジェイデータライブラリは、モバイルデバイス用のストレージに依存しないデータアクセス層を作成することを目的としています。JayDataは、JavaScript 言語クエリ (JSLQ)また、JavaScript CRUD をサポートしており、さまざまなオフラインおよびオンライン データ ストア タイプでまったく同じ方法で作業できます。JayData は、ローカルまたはリモートでの複雑なエンティティおよびエンティティ リレーションシップの処理をサポートします。

執筆時点で、JayData は次のストアまたはプロトコルをサポートしています: webSQL(sqLite)/IndexedDB/OData/YQL/FBQL。

異なるストレージ エンジンを提供するさまざまなシステムに関する特定の問題は、JayData のプロバイダー フォールバック機能で簡単に解決できます。この機能は、コンシューマー コードに対して同じ API を提供しながら、見つかったストレージ レイヤーを使用します。

WebSQL は 2012 年までに廃止される予定ですが、執筆時点では、Samsung SmartTV や Amazon Kindle を含む 95% のデバイスで WebSQL がサポートされています。JayData で WebSQL ユニット テストを実行する Kindle を確認する

おすすめ記事