2016-03-19 17 views
4

[]これについての議論がたくさんありますが、SQLのほとんどすべてのことを話していますので、多くのことは私の質問にはN/Aと言えます。 ]Firebase:効率的にユーザ/レコードの変更履歴を追跡する方法

私はreact/reduxでCRUDアプリを書いて、firebaseバックエンド、& AWS lambda機能、必要な場合。

私のユーザーは、何が変更されたのか、いつ記録に残るのかを知ることに興味がありますが、効率的な方法でこれに取り組んでいます。

私の現在の計画は、previousVal,changeDate、およびuserMakingChangeのようなフィールドを持つレコード更新レコードのコレクションを維持することです。 Reduxには、これをクライアント側でかなり簡単にする素晴らしいミドルウェアがいくつかあります。

imgは私が気にしていたデータベーススキーマです。 Firebaseは非常にフラットなデータ構造を強調しており、リビジョン履歴をユーザ/レコードとは別にオンデマンドでロードしたいので、revision historiesの中間テーブルが必要です。

だから、私の質問(複数可):

  1. はどのように改訂履歴システムは気球のストレージ要件に対処しますか?
  2. これはあまり複雑ではありませんか?私はこのようなもののための業界のベストプラクティスがなければならないと仮定します。

a rough sketch of the schema i'm considering

答えて

5

あなたがFirebaseを見送るために満足している場合は、Datomicは、あなたが何をしようとしてぴったりでしょう。 Clojureの永続的なデータ構造の構造共有技術を使用して、元のバージョンとできるだけ多くの構造を共有する効率的なデータのコピーを作成します。

これまでのバージョンに戻すことができる限り、Datomicはおそらく業界標準のソリューションだと思います。しかし、このテクニックはDatomic特有のものではなく、Firebaseを使用して実装することもできます。

しかし、Firebaseのインスタンスがサイズ制限を超えていることがわかるまで、それは価値があるとは思えません。代わりに、私は絶対的な最も簡単なアプローチに行くことをお勧めします。

データをフラットにして、各エンティティを値のリストとして扱います。新しいリビジョンを追加するたびに、そのリビジョンを最後まで押します。元に戻すには、必要な数の値をスタックからポップします。このようなすべての参照を扱うFirebaseラッパーを書くのはあまり手間がかかりません。

また、datascriptとClojureScriptの永続データ構造を組み合わせて、JSONにシリアル化してからFirebaseに格納し、それをDatomicのように使用することができます。

関連する問題