6

エンティティが遅延しているのに、datomic のクエリ結果が遅延していないことに驚いています。

私が見逃しているこの選択の明白な根拠はありますか? 誰かが (some-fn をマップする (数百万のクエリ結果を含む 100 のクエリ結果を取得)) したいというのは理にかなっているように思えますが、これはエンティティ ID のセット全体の評価を強制することになりますよね?

(エンティティ ID の) 遅延 seq をクエリから直接取得する方法はありますか? それとも、常に最初にメモリにロードする必要がありますか?

4

1 に答える 1

6

fn を使用しdatomic.api/datomsて、遅延した方法でエンティティにアクセスできます。

呼び出し時にインデックス タイプを指定する必要があり、使用できるインデックスのタイプは、関心のある属性のタイプによって異なることに注意してくださいdatoms。たとえば、インデックスは、属性がスキーマに設定されて:avetいる場合にのみ使用でき、 index は、属性のタイプが の場合にのみ使用できます。:db/index:vaet:db.type/ref

作業では次のようなものを使用します (注: これが機能するには、属性ref-attrが of である必要があります:db.type/ref)。

(defn datoms-by-ref-value
  "Returns a lazy seq of all the datoms in the database matching the
  given reference attribute value."
  [db ref-attr value]
  (d/datoms db :vaet value ref-attr))

ドキュメントはdatoms少しまばらですが、試行錯誤を繰り返すことで、おそらく必要なものを見つけることができます。August Lilleaas による:avetインデックス (データトミック スキーマ内の属性のインデックスが必要) の使用に関する投稿があり、これは多少役に立ちました。

于 2014-07-08T12:52:30.540 に答える