74

問題:

電話またはタブレット タイプのデバイス (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 行を超えると、ブラウザの動作が遅くなります。
  • ストレージ全体を反復処理して手動で検索する必要があるため、データに対して複雑なクエリを実行して必要なデータを引き出すことはできません。
  • 保存できる容量の制限

ウェブ 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 Database 標準を非推奨にしたのか、そしてなぜ W3C がそれを実現させたのか、私にはわかりません。おそらくそれらの間で、デスクトップ ブラウザ市場の 77% を占めています。高度なモバイル デバイスでは、 Safari、Opera、Android が市場シェアの 90% 以上を占めているため、 Mozilla と Microsoft の影響力はほとんどありません。Mozilla と Microsoft が、オフライン ストレージが使用される可能性が最も高いモバイル市場でどの標準を使用する必要があるかをどのように決定できるかは、意味がありません。

代わりに IndexedDB を使用する理由についてのMozilla からのコメントは、主に「開発者の美学」に関するものであり、JavaScript で SQL を実行するという考えが好きではありません。私はそれを買っていません。

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

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

  3. IndexedDB 仕様が標準化され、より多くの機能が追加され、主要なモバイル/タブレット ブラウザーに実装され、物事を簡単にするための優れたライブラリが提供される 3 ~ 5 年間、私たち開発者は何を使用することになっているのでしょうか?

W3C は、Web SQL データベース標準を並行して実行し続け、問題を修正するだけです。すでに主要なモバイルプラットフォームをサポートしており、かなりうまく機能します. 最も多くのデスクトップ ブラウザ シェアを持つ Mozilla と Microsoft がこの標準を廃棄することができたという事実はかなり疑わしく、彼らが追いついて提供できるようになるまで、モバイル Web プラットフォームでの進歩を妨げようとする試みと見なされる可能性があります。 iOS/Safari および Android に対する競合ソリューション。

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

解決策の助けに感謝します、ありがとう!

4

7 に答える 7

18

JayDataライブラリを確認することをお勧めします。これは、実際には、モバイル デバイス用のストレージに依存しないデータ アクセス レイヤーを作成するという正確な目的を持っています。JayData は、 JavaScript 言語クエリ (JSLQ)と JavaScript CRUD をサポートする抽象化レイヤーを提供し、さまざまなオフラインおよびオンライン データ ストア タイプでまったく同じ方法で作業できるようにします。JayData は、ローカルまたはリモートでの複雑なエンティティとエンティティ関係の処理をサポートしています。

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

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

WebSQL が 2012 年までに廃止されることについて: 執筆時点では、Samsung SmartTV や amazon Kindle を含む 95% のデバイスをカバーしているのは WebSQL です。JayData で WebSQL 単体テストを実行する kindle を確認してください

于 2012-05-18T10:42:42.600 に答える
13

CouchBase Lite をチェックアウトします。これは、Android と iOS で動作するCouchDBのほぼフル機能の実装です。

iOS

アンドロイド

アプリをPhoneGapのようなものでラップすると、両方のプラットフォーム用のネイティブ HTML 5 アプリを作成でき、CouchDB を実装するために Android/iOS 固有のプログラミングを少し行うだけで済みます。

長所:

  • 多数のデータ行にわたってクエリを実行するための Fast View エンジン。
  • シンプルで強力なレプリケーション サポートが組み込まれています。

短所:

  • Key-Value ストア - 慣れるまでに時間がかかります。
于 2011-10-15T07:56:07.907 に答える
6

自分のプロジェクトの解決策を探しながら、さらに調査を行いました。このライブラリはかなり有望なようです: http://nparashuram.com/IndexedDBShim/

舞台裏で WebSQL を持つ IndexedDB API を使用できます。

最近の iPad、iPhone 5、Android 4.2.2 ではテストに合格しています。

これが誰かに役立つことを願っています。

于 2013-06-06T17:53:12.203 に答える
2

「芝生のようなものを見たことがありますが、デフォルトではローカルストレージしか使用できず、他のストレージにフォールバックできると確信しています。WebSQL(デフォルト)を使用してから、より遅いオプションを使用したほうがいいと思います。 。」

これは構成可能であり、ストレージエンジンの各「アダプター」は自己完結型です。アダプターをLawnchairコンストラクターに渡すか、または、JavaScriptファイルを異なる方法で連結することにより、他のストレージオプションにフォールバックする順序を変更できます。ライブラリを作成します。たとえば、indexed-dbの場合は、sqliteにフォールバックしてから、sqliteをギアします。

git clone https://github.com/brianleroux/lawnchair.git  
cd lawnchair  
cat src/Lawnchair.js src/adapters/indexed-db.js src/adapters/webkit-sqlite.js src/adapters/gears-sqlite.js > my_lawnchair.js

もちろん、他の回答が示唆しているように、phonegapなどを使用してhtml5をネイティブアプリにラップすることができます。そうすれば、たくさんのオプションがありますが、Web標準に固執したい場合は、これがIndexedDBが広く採用されています。

于 2012-02-03T14:17:53.427 に答える
2

コロナを使えと言われます。これは、SQLite をサポートするクロスモバイル アプリケーションに使用されるプライベート プラットフォームです。

長所

  • 簡単で、SQLite を大きくサポートしており、Html5 ストレージで奇妙なことをする必要はありません。

短所

  • Android マーケットまたは iOS マーケットで使用する場合は、料金を支払う必要があります。

彼らがそれについて言っていることをここに貼り付けます:

コロナには、すべてのプラットフォームでの SQLite データベースのサポートが含まれています。これは、iPhone のビルトイン sqlite サポートと、Android の SQLite のコンパイル済みバージョンに基づいています。これにより、Android バイナリのサイズが 300K 増加することに注意してください。

SQLite は、Android、iPhone、iPad のすべてのバージョン、およびコロナ シミュレーターで利用できます...

于 2011-10-15T15:50:37.227 に答える
1

私のオープン ソース ライブラリをチェックする価値があります https://bitbucket.org/ytkyaw/ydn-db/wiki/Home

バージョンの移行、高度なクエリ、およびトランザクションをサポートする、Indexeddb、WebDatabase (WebSQL)、および WebStorage (localStorage) ストレージ メカニズム用の Javascript データベース モジュール。

NoSQL ライブラリなので、結合は手動ですが、不可能ではありません。ライブラリには、キー結合アルゴリズムが既に組み込まれています。

于 2013-05-30T15:14:46.343 に答える
1

シンプルなストレージ エンジンを JavaScript で作成してみませんか (「標準ベース」の部分をカバーしています)。どうやら、それほど派手なものは必要ないので、機能させるのにそれほど労力はかかりません。

私は次のことをします:

  • すべてを bson または同様のバイナリ形式で保存します。
  • ファイルのインデックスを解析して作成し、起動時に読み取ります。
  • JavaScript を使用してクエリを実行し、(明らかにオフラインの) Web アプリケーションから大きなファイルを読み取ります。
  • 更新されたオブジェクトを個別に保存します。

このソリューションは、データベースが十分に単純な場合にのみ実行可能です。しかし、うまくいくかもしれないと思います.JavaScriptのサポートは、モバイルデバイスで優れています.

インスピレーションとして、javascript での Btree+ 実装を次に示します

ローカル ファイルを読み取るには、ローカル ファイルへのアクセスに使用できるファイル APIが必要です。Safari 6を含め、最新のほとんどのブラウザでサポートされています。ただし、現在の iPhone ブラウザーがこの API をサポートしているかどうかは判断できませんでした。

于 2011-10-15T15:36:32.483 に答える