問題:
携帯電話またはタブレット型のデバイス(iOS/Androidなど)で250,000行以上のデータをオフラインで保存およびクエリするために、デバイスに依存しない(HTML5など)ソリューションが必要です。私が考えているのは、セルラーデータ接続なしで遠隔地で働く人々がいて、このデータに対してクエリを実行し、オフラインで編集する必要があるということです。一部はジオロケーションベースであるため、資産が存在するエリアにある場合(GPSを使用)、それらの資産が表示され、編集できるようになります。オフィスに戻ったら、データをオフィスサーバーに同期できます。
私がウェブ標準の観点からこれにアプローチしている理由は、基本的にHTML5で1回記述することでお金と時間を節約し、Objective CとJavaで2回記述するのではなく、複数のプラットフォームで機能するためです。また、プラットフォームにとらわれない何かを書く場合、誰もが新しいものに移動するときに、閉じ込められず、船に降りて行くことはありません。 Windows Mobile 5用に作成された同様のアプリがありましたが、今ではそのプラットフォームは死んでいるので役に立たなくなりました。
デバイス上のオフラインデータベースは次のとおりである必要があります。
オプション:
HTML5ローカルストレージ:
キー/値が5,000未満の少量のデータには問題ありません。JSONに変換する場合は、配列/オブジェクトを格納することもできます。
短所:
Web SQL Database:
短所:
IndexedDB:
キー/値オブジェクトストアは、インデックスを除いてローカルストレージに似ています。
短所:
これにより、非推奨のWeb SQLメソッドを実装する唯一のオプションが残り、これは1年程度しか機能しない可能性があります。 IndexedDBとローカルストレージは現在使用できません。
MozillaとMicrosoftがWeb SQL Database標準を非推奨にした理由と、W3Cがそれを実現させた理由はわかりません。おそらくそれらの間で、彼らはデスクトップブラウザ市場の77%を持っています。高度なモバイルデバイスでは、MozillaおよびMicrosoftは Safari、OperaおよびAndroid市場シェアの90%を超える 。オフラインストレージが使用される可能性が最も高いモバイル市場で、MozillaとMicrosoftがどの標準を使用すべきかを指示する方法は意味がありません。
Mozillaからのコメント では、なぜIndexedDBを使用したかったのかについては、主に「開発者の美学」についてであり、JavaScriptでSQLを実行するという考えは好きではありません。私はそれを買っていません。
現在、提案されている標準は劣っており、非常に基本的なNoSQL実装であり、低速であり、データベースに必要な高度な機能もサポートしていません。データベースを確立してデータを取得するための定型的なコードがたくさんありますが、彼らは人々がより高度な機能を提供するニースの抽象化ライブラリをその上に書くと主張しています。 2011年10月の時点で、彼らはどこにも見当たりません。
彼らは、実際に動作し、メインのモバイル/タブレットブラウザに実装されている既存のWeb SQL標準を廃止しました。一方、それらの「新しい」および「より良い」標準は、主要なモバイルブラウザでは使用できません。
開発者が今後3〜5年間使用することになっているのは、IndexedDB仕様が標準化され、より多くの機能を備え、メインのモバイル/タブレットブラウザーに実装され、作業を簡単にするニースのライブラリがあるためです。
W3Cは、Web SQL Database標準を並行して実行し続け、問題を修正するだけです。すでに主要なモバイルプラットフォームをサポートしており、かなりうまく機能しています。最も多くのデスクトップブラウザーを共有する2つのプレーヤーであるMozillaとMicrosoftがこの標準を廃止できたという事実はかなり疑わしく、追いついて提供できるようになるまでモバイルWebプラットフォームの進歩を妨げる試みと見ることができます。 iOS/SafariおよびAndroidに対する競合ソリューション。
結論として、誰もが私の問題の解決策を持っていますか?それは、携帯電話/タブレットデバイスのiOS/Androidで動作します。おそらく、クエリ機能を備えたバックグラウンドで複数のデータベース実装を使用でき、どのデータベースに優先度があるかを選択できるニースラッパーAPIです。 lawnchair のようなものを見てきましたが、デフォルトではローカルストレージのみを使用でき、他のものにフォールバックすることは間違いありません。遅いオプションよりもWeb SQL(デフォルト)を使用した方がいいと思います。
ソリューションのヘルプは大歓迎です、ありがとう!
JayData ライブラリをチェックアウトすることをお勧めします。実際には、モバイルデバイス用のストレージに依存しないデータアクセスレイヤーを作成するという正確な目的があります。 JayDataは、 JavaScript Language Query(JSLQ) およびJavaScript CRUDサポートを備えた抽象化レイヤーを提供し、異なるオフラインおよびオンラインデータストアタイプでまったく同じ方法で作業できるようにします。 JayDataは、ローカルまたはリモートでの複雑なエンティティとエンティティの関係の処理をサポートしています。
執筆時点で、JayDataはwebSQL(sqLite)/ IndexedDB/OData/YQL/FBQLのストアまたはプロトコルをサポートしています。
異なるストレージエンジンを提供する異なるシステムの特定の問題は、JayDataのプロバイダーフォールバック機能で簡単に対処できます。JayDataは、消費者コードに対して同じAPIを提供しながら、検出可能なストレージレイヤーを使用します。
WebSQLは2012年までに非推奨になります。執筆時点では、Samsung SmartTVやAmazon Kindleなど、95%のデバイスをカバーしているのはWebSQLです。 JayDataでWebSQL単体テストを実行しているKindleをチェックしてください 。
私は自分のプロジェクトの解決策を探している間に、さらに調査を行いました。このライブラリはかなり有望なようです: http://nparashuram.com/IndexedDBShim/
WebSQLをバックグラウンドで持つIndexedDB APIを使用できます。
最近のiPad、iPhone 5、Android 4.2.2。
これが誰かを助けることを願っています。
「lawnchairのようなものを見てきましたが、デフォルトではローカルストレージのみを使用し、他のものにフォールバックすることを確信しています。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が広く採用されています。
Corona を使用するように指示します。これは、SQLiteをサポートするクロスモバイルアプリケーションに使用されるプライベートプラットフォームです。
長所
短所
私は彼らがそれについて言うことをここに貼り付けます:
Coronaには、すべてのプラットフォームでのSQLiteデータベースのサポートが含まれています。これは、iPhoneの組み込みsqliteサポート、およびAndroidのSQLiteのコンパイル済みバージョンに基づいています。これにより、Androidバイナリのサイズが300K増加します。
SQLiteは、Android、iPhone、iPadのすべてのバージョンとCorona Simulatorで利用可能です...
私のオープンソースライブラリをチェックアウトする価値があります https://bitbucket.org/ytkyaw/ydn-db/wiki/Home
バージョン移行、高度なクエリ、トランザクションをサポートするIndexeddb、WebDatabase(WebSQL)、WebStorage(localStorage)ストレージメカニズム用のJavascriptデータベースモジュール。
NoSQLライブラリであるため、結合は手動ですが、不可能ではありません。ライブラリには、すでにキー結合アルゴリズムが組み込まれています。
Javascript(「標準ベース」の部分をカバーする)で単純なストレージエンジンを作成してみませんか?どうやら非常に派手なものは必要ないので、動作させるのにそれほど労力をかけるべきではありません。
私は次のことをします:
このソリューションは、データベースが十分に単純な場合にのみ実行可能です。しかし、私はそれがうまくいくかもしれないと思う-javascriptのサポートはモバイルデバイス上で良いです。
インスピレーションのため here はjavascriptのBtree +実装です。
ローカルファイルを読み取るには、 ファイルAPI が必要です。これは ローカルファイルへのアクセス に使用できます。 Safari 6 であっても、ほとんどの最新ブラウザーでサポートされています。しかし、現在のiPhoneブラウザーがこのAPIをサポートしているかどうかを判断できませんでした。