0

Rich Hickey の講演「The Value of Values」では、正しい情報を得るには、古い事実を新しい事実に置き換えるのではなく、両方をタイムスタンプで保持する必要があると主張しています。

たとえば、ユーザーがメール アドレスを変更した場合、古いアドレスを新しいアドレスで上書きするのではなく、「[タイムスタンプ] の時点でアドレスは user5@example.com で、その後は user5new@example. [タイムスタンプ] の時点での com」.

これはデータの整合性の原則として理にかなっており、Datomic が構築されている原則であると私は信じています。しかし、それが本当なら、Datomic はどのようにミスを処理するのでしょうか? たとえば、ユーザーがメール アドレスを間違って入力した場合、以前は "luser5@example.com" だったと報告したくありません。その間違った情報を忘れたいのです。

これはどのように行われますか?

4

2 に答える 2

7

あなたの質問に答えるために、datomic は新しいトランザクションでの修正をサポートしています。これは、git、svn、cvs などが修正をサポートするのと同じ方法です。古い不正確なデータを保持しておくことは依然として価値があります。なぜなら、あなたが間違っていた (そしていつ!) かを知ることは価値があるからです。

ただし、時間について重要な点を指摘しています。事実が真実である時間と、事実が記録された時間です。Datomic の時間は、事実が有効だった時間ではなく、事実が記録された時間です。多くのアプリケーションでは、これらは同じものですが、場合によっては (特に金融では) 非常に明確に異なります。

Datomic の作成者は、データベースが管理している時間は記録時間であり、それ以外のものではないと強く主張しています。モデル化する必要がある別のタイプの時間がある場合は、事実を具体化して時間を主張するか、トランザクション レコードに他のタイプの時間を追加できます。

これについては、このスレッド (および他のスレッド)で、Datomic google グループの 2 つの異なる時間について詳しく説明しています。そのスレッドでは、アプリケーション ドメインの時間の概念 (つまり、「記録時間」ではない) を使用しながら、datomic の記録時間関数 (tx ログへの高速ソート アクセスなど) の便利さの一部を回復するためのいくつかの試みが示されています。一見の価値があります。

于 2013-10-29T14:04:19.147 に答える
1

現在のところ、それを行う方法はありません。最も近いのは、切り出しを使用して古いデータをパージ/削除することです。http://blog.datomic.com/2013/05/excision.html . 削除しても、何を削除したかの記録が残ります (例: 「属性 X の値が削除されました」)。

EDIT : Git に関連する便利なコメントがあります。類推を拡張すると、Gitではrebase、完全に異なる履歴パスを作成する破壊的な変更 (つまり、いつでも) を実行できます。問題は、そのレポで作業している他の人がそれらの変更を自動的に調整できないことです。

Datomic Peerは、データベースで動作するエンティティであると想像できます。履歴を変更した場合 (つまり、ファクトを修正した場合)、Transactor、Memcached、および影響を受ける属性を参照するピアのキャッシュ内にキャッシュされた Datom を無効にする必要があります。

于 2013-10-29T13:48:57.117 に答える