Closed11
hiveのドキュメントを読んだチラ裏
これを眺める。
Box
- 何でも入れられる箱。RDBMSのテーブルに近くもできるけど、ゆるい。
- type parameterで入れるものを制限することもできる。
読み書き
読み込み
- Boxからデータを取り出すには、キーを指定する。
- 同じキーからは同じインスタンスが取得される。
書き込み
- マップと同じように扱う。
- putで即座に書き込まれる。他で参照している場合は書き込み終了前なら前の値が…みたいなことを自動でやってくれる。
- lazy boxという違うものもある。
削除
- deleteで消す。
Flutter対応
保存場所
- iOS、Androidで異なる場所に保存するが、hive_flutterパッケージのinitFlutterで隠蔽される。
データが更新されたときのウィジェットの更新
ValueListenableBuilderをbuilderにかぶせて…みたいな使い方っぽい。
割と便利かも。
オートインクリメントとインデックス
あるって。
カスタムオブジェクト
- カスタムなものもTypeAdapterで使える
- プリミティブな型はすべて対応しているが、カスタムなものもTypeAdapterでできる。
- ほぼどんなクラスもOK。
- クラスの定義の更新ができる。
- 列挙型を定義できる
- HiveObjectから派生して作ると、カスタムなタイプは扱いが楽
- HiveListで関連が作れる
チュートリアル
- ダークモード
- 好きな本
- スケッチパッド
-
連絡先
-
Hive.openBox(contactsBoxName)
ではなくてHive.openBox<Contact>(contactsBoxName)
- 型を指定しないと、
Hive.box<Contact>(contactsBoxName).listenable()
でThe box "contacts" is already open and of type Box<dynamic>.
というエラーになる。 - https://github.com/hivedb/hive/issues/334
-
高度な
Lazy Box
小〜中規模のときには普通のBoxでよいけど、大規模になったときにキーだけメモリに展開して、値は実際に必要になったときに読み込むやり方を取れるLazyBoxを使うとよさそう。
Encrypted Box
データの値を暗号化して保存する。
キーは暗号化されない。
圧縮
hiveは追加専用のデータストアなので、書き込み削除を繰り返しているとファイルサイズが肥大化する。
そこで、削除された穴を詰めるcompactをやると、起動時間の削減に役に立つ。
自動的に圧縮するルールを設定することもできる。
ベストプラクティス
- hiveにはクエリ言語がない。Dartにやらせると速い。
- キーオーダーは辞書順。逆順も指定可。カスタムキーオーダーも定義できる。
- リストの保存の仕方は配列でまとめて保存と、ひとつずつ追加する方法がある。
- アイテムのフィルタリングがある。クエリ言語がないけど、これがあれば十分そう。
全体を眺めての感想
- Elastic Searchを思い出した。boxはRDBMSのテーブルよりはElastic Searchのindexと思ったほうが近そう。
- 親子関係のあるデータはひとつのindex/boxに入れるべきとか、tipsが似ていそう。
- クエリはないが、フィルタはあるので、アプリを作るには十分かも。複雑なリポジトリパターンを書かなくてもよさそう。
テスト
公式にテストについての記述がない。
いくつか参考を探そうと思ったけど、そんなにない…。
前から参考にしていた↓が一番しっくりくるかも。
このスクラップは2022/02/28にクローズされました