Fork me on GitHub
#clojure-hungary
<
2023-05-02
>
onetom05:05:36

izgalmas ujdonsagok: 1. Morse, the next-gen REBL https://clojure.org/news/2023/04/28/introducing-morse 2. Datomic is free! (a sajat hostolasu valtozata is, meg majd idovel az AWS Cloud-os valtozata is) https://blog.datomic.com/2023/04/datomic-is-free.html

🥳 2
sb05:05:50

Datomic free az nagyon jó. Emiatt alkalmaztam az xtdb-t, mert 4K per év saját magamnak sok.. vagy prototypeokhoz

onetom05:05:50

ha gyorsan ki akarjatok probalni, akkor itt van egy pelda deps.edn:

{:mvn/local-repo "./mvn-deps"
 :paths          ["classes" "src"]
 :deps           {org.clojure/clojure {:mvn/version "1.11.1"}
                  com.datomic/peer    {:mvn/version "1.0.6726"}
                  org.slf4j/slf4j-nop {:mvn/version "2.0.7"}}}

👍 2
sb05:05:08

Milyen gyors a Datomic? Nem tudod Tomi? Meg nem teszteltem production

sb05:05:27

Biztosan van stat vhol fenn..

onetom05:05:31

meg egy src/free/datomic.clj:

(ns free.datomic
  (:require
    [clojure.pprint :as pp]
    [datomic.api :as d]))

(defn mk-db []
  (let [db-name (-> "db-" gensym str (doto println))
        db-uri (str "datomic:mem://" db-name)]
    (d/create-database db-uri)
    (d/connect db-uri)))

(def schema
  [{:db/ident       :person/name
    :db/valueType   :db.type/string
    :db/cardinality :db.cardinality/one}

   {:db/ident       :employee/id
    :db/valueType   :db.type/long
    :db/cardinality :db.cardinality/one
    :db/unique      :db.unique/identity}])

(def persons
  '{:find  [(pull ?e [*])]
    :in    [$ ?name-regex]
    :where [[$ ?e :person/name ?name]
            [(re-find ?name-regex ?name)]]})

(comment
  (def conn (mk-db))

  (time
    (let [conn (mk-db)]
      @(d/transact conn schema)
      @(d/transact conn [{:db/ident    :someone
                          :person/name "Some One"
                          :employee/id 123}])
      @(d/transact conn [{:db/ident    :somebody
                          :person/name "Some Body"
                          :employee/id 456}])
      (pp/pprint (d/q persons (d/db conn) #""))
      conn))
  )

sb05:05:34

Ez tok jó: Morse runs remotely to or within your application JVM process, and can be used at dev-time without adding any runtime deps. The UI is written in JavaFX.

onetom05:05:00

nincs igazan stat a datomic sebessegerol, mert annyira konfiguralhato meg annyira mas az architecturaja mint mas adatbazisoknak, hogy nem igazan lehet oket osszehasonlitani altalanossagban. mindenesetre a Datomic nem arra valo, h hatalmas real-time even stream-eket ingest-eljel. olvasas szempontjabol viszont baromira skalazhato es brutal gyors, mert sok szintu cache-elest tudsz benne csinalni. a vegso sebesseg meg attol fugg h h allitottad be a kulonbozo cache mereteket, ami meg attol fugg h mennyi penzt akarsz raszanni, meg h milyen usage pattern-jeid vannak. a lenyeg, h ezeknek a kerdesek a megvalaszolasa fuggetlen az adatmodel-tol, meg a programtol. amig ha pl dynamo db-t akarsz kozvetlenul hasznalni, akkor a tablaidat meg az indexeidet ugy kell megtervezni, h tamogassa a tervezett olvasasi muveleteidet, amik nem mindig ismertek a project elejen.

👍 2
sb05:05:02

Nekem elsősorban gyors olvasásra kene mint vektor adatbázis

onetom05:05:11

a fenti peldaba raktam egy time-ot, h lassatok, h fejlesztes kozben osszerakni egy eldobhato adatbazist valami semaval es pelda adatokkal az a 8ms nagysagrendjeben tud lenni (egy M2 Pro-n) ezert mi ugy unit teszteljuk az adatbazis muveleteinket, h teljesen izolalt in-memory datomic db-ket csinalunk minden test case-nek. igy 2+ ev fejlesztes utan is csak 4.5s a teljes test suite futasi ideje.

👍 1
2
sb05:05:50

Igen az xtdb rocksdb-vel is kb így fut pár ms

sb05:05:06

Letesztelem később

sb05:05:00

Izolacio az tok jó!