問題タブ [datomic]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1270 参照

clojure - 「変数」の動的数をDatomic API関数に渡す

これは、私が Datomic google グループで行った質問の再投稿です (ここを参照してください - 最後の 3 つの投稿が最適です)。

この問題は、Datomic クエリを動的に生成しているという事実に関係しています。したがって、パラメーター (名前と値) の数は、関数に渡されるまでわかりません。クエリをうまく生成できます。核となる問題は、Clojure Datomic API を使用すると、動的な数の引数でdatomic.api/q関数を呼び出すことができないことです。したがって、以下の~@unquote-splice式は失敗します。partialapplyなど、他のいくつかのアプローチを試しましたが、役に立ちませんでした。

これは Datomic Clojure API のバグなのだろうか? または、動的な数の変数を渡す簡単な方法がある場合。渡される変数の量をハード コーディングすると、クエリを動的に生成する目的が無効になります。詳細については、ここの最後の3 つの投稿を参照してください。

ありがとう

0 投票する
3 に答える
798 参照

datomic - ある属性の値が最も高いエンティティを選択する

バックエンドにdateというinst属性を持つ 100 万の articleエンティティ、またはpointsというint属性を持つ 100 万のプレーヤーエンティティがあるとします。最新の 10 の記事またはトップ スコアのプレーヤーを選択する良い方法は何ですか?

何百万もの全体をピアにフェッチしてから、並べ替えてドロップする必要がありますか?

0 投票する
1 に答える
395 参照

time - 最後のトランザクションより古いデータを datomic にインポートする

私はこれを正しく理解していますか?

http://docs.datomic.com/transactions.html

:db/txInstant を明示的に設定して、トランザクションのクロック時間を上書きできます。その場合、既存のトランザクションよりも古くなく、トランザクションのクロック時間よりも新しくない :db/txInstant 値を選択する必要があります。この機能により、既存のデータの初期インポートが可能になります

これは、現在のクエリが機能するように、最後のトランザクションよりも古いファクトをデータに追加できないということですか?

これは大きな制限のようです。他のシステムと接続する場合はどうすればよいですか? たとえば、私は昨日の注文に関するデータを取得できますが、店員はそれをシステムに入力する時間が今日しかありません。今日誰かが事実を入力した場合、その古いデータを追加することはできませんか?

明示的な時間属性を追加し、それをすべてのクエリで使用することが唯一のオプションですか?

0 投票する
2 に答える
1768 参照

clojure - Datomic から最新のエンティティを取得する

エンティティとそのタイムスタンプに興味があります。基本的に、エンティティの時間順のリストが必要です。

そのために、次の関数を作成しました。

無知に根ざしたハックに違いないと私は感じています。

慣用的な Datomic の使用法に詳しい人が介入して、私のパラダイムをアップグレードしてくれるでしょうか?

0 投票する
2 に答える
227 参照

datomic - Datomic は修正をどのようにサポートしますか?

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

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

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

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