[JAVA] Verfolgen Sie das Datomic-Tutorial mit Datascript

Es handelt sich um eine OSS-Bibliothek, die API-kompatibel mit dem in der Clojure-Welt bekannten Produkt Datomic ist. Ich war an Datascript interessiert, also habe ich es berührt.

Als Thema werde ich Datomics Erste Schritte verfolgen.

1. Installation

Fügen Sie [Dataskript" 0.16.1 "] zu : Abhängigkeiten hinzu

2. Stellen Sie eine Verbindung her


(require '[datascript.core :as dc])
(def con (dc/create-conn))

3. Transaktionsschema

In diesem Beispiel modellieren wir einen Film. Es wird angenommen, dass der Film ein Erscheinungsjahr, ein Genre und ein Titelattribut hat.

Folgendes ist erforderlich, um das Attribut zu definieren.

Es wird auch empfohlen, ein Attribut docstring in einem der folgenden Elemente zu definieren: db / doc.

Das Attribut wird in der Karte der Daten definiert.

Der Titel ist wie folgt definiert


{:db/ident :movie/title
 :db/valueType :db.type/string
 :db/cardinality :db.cardinality/one
 :db/doc "The title of the movie"}

Das Genre ist wie folgt


{:db/ident :movie/genre
 :db/valueType :db.type/string
 :db/cardinality :db.cardinality/one
 :db/doc "The genre of the movie"}

Da das Veröffentlichungsjahr eine Ganzzahl ist, ändern Sie : db / valueType in: db.type / long und definieren Sie Folgendes


{:db/ident :movie/release-year
 :db/valueType :db.type/long
 :db/cardinality :db.cardinality/one
 :db/doc "The year the movie was released in theaters"}

Schemata können einzeln abgewickelt werden, aber hier werden wir sie alle zusammen abwickeln.

(dc/transact con [{:db/ident :movie/title
                   :db/valueType :db.type/string
                   :db/cardinality :db.cardinality/one
                   :db/doc "The title of the movie"}

                  {:db/ident :movie/genre
                   :db/valueType :db.type/string
                   :db/cardinality :db.cardinality/one
                   :db/doc "The genre of the movie"}

                  {:db/ident :movie/release-year
                   :db/valueType :db.type/long
                   :db/cardinality :db.cardinality/one
                   :db/doc "The year the movie was released in theaters"}])

Wenn Sie con bewerten, können Sie sehen, dass etwas drin ist.

user> con
#<Atom@4afb7219: 
{1 :db/cardinality,
 1 :db/doc,
 1 :db/ident,
 1 :db/valueType,
 2 :db/cardinality,
 2 :db/doc,
 2 :db/ident,
 2 :db/valueType,
 3 :db/cardinality,
 3 :db/doc,
 3 :db/ident,
 3 :db/valueType}

4. Versuchen Sie, die Daten zu verarbeiten

Definieren Sie die folgenden Daten


(def first-movies [{:movie/title "The Goonies"
                    :movie/genre "action/adventure"
                    :movie/release-year 1985}
                   {:movie/title "Commando"
                    :movie/genre "action/adventure"
                    :movie/release-year 1985}
                   {:movie/title "Repo Man"
                    :movie/genre "punk dystopia"
                    :movie/release-year 1984}])

Transaktion und Hinzufügen zur DB wie im Schema

(dc/transact con first-movies)

Wenn Sie con erneut bewerten, können Sie sehen, dass etwas zunimmt.

user> con
#<Atom@4afb7219: 
  {1 :db/cardinality,
   1 :db/doc,
   1 :db/ident,
   1 :db/valueType,
   2 :db/cardinality,
   2 :db/doc,
   2 :db/ident,
   2 :db/valueType,
   3 :db/cardinality,
   3 :db/doc,
   3 :db/ident,
   3 :db/valueType,
   4 :movie/genre,
   4 :movie/release-year,
   4 :movie/title,
   5 :movie/genre,
   5 :movie/release-year,
   5 :movie/title,
   6 :movie/genre,
   6 :movie/release-year,
   6 :movie/title}

5. Versuchen Sie, eine Abfrage zu werfen

Erstellen Sie zunächst aus der Verbindung etwas mit dem Namen "db".

(def db (dc/db con))

Diese Datenbank ist unveränderlich und gibt garantiert dieselben Ergebnisse für dieselbe Abfrage zurück (wahrscheinlich ein Punkt von Interesse).

Es gibt zwei Möglichkeiten, den Wert aus der Datenbank abzurufen:

Versuchen Sie, die mit dem Attribut ": movie / title" in der Datenbank zu finden

(dc/q '[:find ?e
        :where [?e :movie/title]]
      db)
=>#{[4] [6] [5]}

Gehen Sie wie folgt vor, um den Filmtitel anstelle der Unterhaltungs-ID zu extrahieren

(dc/q '[:find ?movie-title 
        :where [_ :movie/title ?movie-title]]
      db)
=> #{["The Goonies"] ["Commando"] ["Repo Man"]}

Holen Sie sich den Titel eines Films mit einem Erscheinungsjahr von 1985 wie folgt

(dc/q '[:find ?title 
        :where [?e :movie/title ?title] 
               [?e :movie/release-year 1985]]
      db)
=>#{["The Goonies"] ["Commando"]}

Informationen zu allen Attributen von Filmen, die 1985 veröffentlicht wurden, sind wie folgt erhältlich:

(dc/q '[:find ?title ?year ?genre 
        :where [?e :movie/title ?title] 
               [?e :movie/release-year ?year] 
               [?e :movie/genre ?genre] 
               [?e :movie/release-year 1985]]
      db)
=> #{["The Goonies" 1985 "action/adventure"]
     ["Commando" 1985 "action/adventure"]}

Verwenden Sie Pull wie folgt


(dc/pull db 
         '[*] ;;selector
         4 ;; entity id
         )
=>{:db/id 4,
   :movie/genre "action/adventure",
   :movie/release-year 1985,
   :movie/title "The Goonies"}
  1. TODO

Recommended Posts

Verfolgen Sie das Datomic-Tutorial mit Datascript
Folgen Sie dem Link mit Selen (Java)
[Tutorial] Eclipse herunterladen → Anwendung mit Java ausführen (Plejaden)
[Rails] Lernen mit Rails Tutorial
Ändern Sie den Port mit SpringBoot
Versuchen wir das S2 Struts Tutorial (# 3_180425)
Probieren wir das S2Struts-Tutorial aus (# 5_180526).
Verspotten Sie den Konstruktor mit PowerMock
Probieren wir das S2Struts-Tutorial aus (# 4_180505).
Probieren wir das S2Struts-Tutorial aus (# 1_180423).
Probieren Sie das Spring WebFlux-Tutorial aus
Mit dem Fehler Cordova-> Looper.prepare ()