7

私は datomic の初心者であり、システムがどのように構築されているかをまだ理解しようとしています。特に :db.part/db は、スキーマをインストールするたびに必要になるようで、どのような役割を果たしているのかわかりません。誰かがこれが何を意味するのかを解明できますか?

('[datomic.api :as d] が必要)
(def uri "datomic:mem://sample")
(d/create-database uri)
(def conn (d/connect uri))

(pprint (seq (d/entity dbval :db.part/db)))

;; =>
;; ([:db/doc "システム パーティションの名前。システム パーティションには、データ型のコアとユーザー スキーマが含まれます: タイプ定義、属性定義、パーティション定義、およびデータ関数定義。"]
;; [:db.install/function #{:db.fn/cas :db.fn/retractEntity}]
;; [:db.install/属性
;; #{:db/noHistory :db.install/partition :db/カーディナリティ
;; :db.install/attribute :db/index :db/unique :db/fulltext
;; :db/txInstant :db/lang :db/doc :db.install/valueType :db/code
;; :db/isComponent :db/fn :db.install/function :db/valueType :db/ident
;; :フレシアン/タグ}]
;; [:db.install/valueType
;; #{:db.type/uuid:db.type/bigint:db.type/uri:db.type/ref
;; :db.type/キーワード :db.type/bytes :db.type/string :db.type/instant
;; :db.type/fn :db.type/long :db.type/bigdec :db.type/boolean
;; :db.type/double :db.type/float}]
;; [:db.install/パーティション #{:db.part/db}]
;; [:db/ident:db.part/db])
4

1 に答える 1

10

:db.part/dbスキーマ エンティティのパーティションです (パーティションに関するスキーマ ドキュメントを参照してください)。これらの db.install 属性は、特定のエンティティのインストールでフックをトリガーするために使用されます。それらが主張されていることには:db.part/db特別な意味はありません (afaik)。これは、Datomic チームが属性のインストールなどを表すために選択した規則にすぎません。

たとえば、次のようなトランザクションを送信する場合:

[{:db/ident :person/name
  :db/cardinality :db.cardinality/one
  :db/valueType :db.type/string
  :db.install/_attribute :db.part/db
  :db/id #db/id[:db.part/db]}]

これは (Clojure では edn ではなく) 以下と同等です:

(let [id (datomic.api/tempid :db.part/db)]
  [[:db/add id :db/ident :person/name]
   [:db/add id :db/cardinality :db.cardinality/one]
   [:db/add id :db/valueType :db.type/string]
   [:db/add :db.part/db :db.install/attribute id]])

その後、Datomic は、 の値が追加されたことを通知:db.part/db:db.install/attribute、属性に必要な属性を提供したことを検証し、新しい属性をデータベースにインストールして、トランザクション後に使用できるようにします。

:db.install/_partition :db.part/db同様に、新しいパーティションをインストールするために使用できます。属性定義のインストールおよび新しいパーティションの作成に関するドキュメントを参照してください。

:db.install/valueTypeいつの日か独自のカスタム値タイプをインストールするために使用される可能性がありますが、この機能はまだ準備ができていません。:db.install/function内部使用のようです。その目的がよくわかりません。データベース機能をインストールする文書化された方法は異なります。

これらの属性 ( を除く:db.install/function) は、クエリやデータベースの検査にも便利です。たとえば、忘れた場合に備えて、インストールされているすべての値の型のセットを引き出すことができます。

user> (:db.install/valueType (datomic.api/entity db :db.part/db))
#{:db.type/uuid :db.type/bigint :db.type/uri :db.type/ref
  :db.type/keyword :db.type/bytes :db.type/string :db.type/instant
  :db.type/fn :db.type/long :db.type/bigdec :db.type/boolean
  :db.type/double :db.type/float}

または、既存の属性に対してクエリを記述できます。

user> (datomic.api/q '[:find ?ns (distinct ?attr) :where
                       [:db.part/db :db.install/attribute ?a]
                       [?a :db/ident ?attr]
                       [(namespace ?attr) ?ns]]
                     db)
[["db" #{:db/noHistory :db/cardinality :db/index :db/unique
         :db/fulltext :db/txInstant :db/lang :db/doc
         :db/code :db/isComponent :db/fn :db/valueType
         :db/ident}]
 ["db.install" #{:db.install/partition :db.install/attribute
                 :db.install/valueType :db.install/function}]
 ["fressian" #{:fressian/tag}]]
于 2013-02-12T01:12:47.597 に答える