これは何?
ブラウザに無限のストレージが用意されました。
- COOKIEは4KBまで
- LocalStorageは5MBまで
- 外部ファイル?セキュリティのためアクセスできません。
この軛がようやく解消された。
どうして決戦なのか
どうしてこの仕様になったかわからない仕様だらけ。この苦難のため2年ほど足踏みした。どうしてもクライアントサイドで大量データを扱わなければいけないので・・・
- 非同期、非同期非同期の連続、そしてバージョンという概念
- UIスレッドをノンブロッキングなのはわかりますが・・・非同期処理のいなし方知らないと詰む・・・
- キーが外部もちとデータ内保持と二種類あった。
- ここを理解しないと目的のデータを取り出せない。
- キーが外部もち:KVSのようなイメージ:OutLine−Key
- キーがデータ内保持:RDBMSの様に一部のプロパティーがキー:InLine−Key
- なにも知らずにデータ投入するとキーが外部もちになって自動連番がキーに成るため、目的のレコードを取り出せなくなってしまう。
- 数万オーダーのデータ処理を考えると取り出すときに全件取得はありえない。多分メモリ不足でブラウザが落ちる。
- DBのバージョンという概念がありまして・・・
- 追加、修正、削除、CRUDのCUDはバージョンアップが必要
- バージョンを正確に記述しないとObjectStoreの削除と作成がうまくできない。
- 一つのDBの中に複数のObjectStoreが有る状態で同時複数のDropCreateをトランザくショナルにやろうとするとなかなか壮観な非同期入れ子状態に成る。
- ここを理解しないと目的のデータを取り出せない。
- 溢れるエラー
- DBのバージョン違いはひどかった
- エラーの内容もわかりづらい。UnknownErrorってなんなんだー
- もちろんPK違反はわかるんだけどね。ConstraintError
- KeyPathという未解明の仕様
- 名前からしてパスのようにKeyを構成できるように聞こえるが利用方法がよくわからない。
- keyにピリオドは入れられない。
- もしかしたら1オブジェクトストア内に入れ子でデータ持って検索できるかもと思ったがに駄目だった。
- めまぐるしく変わる仕様
どうあれば嬉しかったか
- 普通のSQLだったら良かったのに
- WebSQLが退けられた理由をまだ把握していない。
- 非同期の他に同期のオプションもあればよかったのに
- 非同期はハードル高いよ
特徴
以下RDBMSに比較して
- キーは基本一個です。
- 複数キーは出来るようだが、めんどくさくてやってない。
- 検索にはキーを使えます。
- 範囲絞り込みが可能です。
- RDBMSの様に使おうとするとキー設計に親子関係を練り込むことを考えてしまいます。
- jsに処理を移譲するのはやはりですね・・・ネイティブで済ませられるならソレで。
- 複数のキーを連携させることはできません。できる?
- Indexは複数作成可能なようですが。
- 範囲絞り込みが可能です。
- Indexで検索が出来るようです。
- できるようです。
- ただし、複雑な条件を受け付けるAPIはないです。
- いったんjs上にオブジェクトを展開してそこで比較するなどの条件適用が必要になります。
- JOIN系、GroupBy、UnionのAPIは無いです。
- 非同期につぐ非同期なので変な処理をはさむと遅いです。
- 変な処理がなければLocalStorageよりは速い気がする。
- FirefoxとChromeは普通に動く。
- Chromeには削除する方法があるがFirefoxはCookie前消しでのみ対応
- 自前でDB初期化ロジックが必要