clojure-hungary

onetom 2023-05-02T05:07:36.644729Z

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

🥳 1
sb 2023-05-02T05:08:50.874689Z

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

onetom 2023-05-02T05:09:50.910059Z

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"}}}

👍 1
sb 2023-05-02T05:11:08.455559Z

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

sb 2023-05-02T05:11:27.649789Z

Biztosan van stat vhol fenn..

onetom 2023-05-02T05:13:31.981039Z

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))
  )

sb 2023-05-02T05:13:34.191209Z

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.

onetom 2023-05-02T05:19:00.134589Z

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.

👍 1
sb 2023-05-02T05:22:02.303009Z

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

onetom 2023-05-02T05:22:11.669959Z

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
👍🏻 1
sb 2023-05-02T05:23:50.721459Z

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

sb 2023-05-02T05:24:06.306749Z

Letesztelem később

sb 2023-05-02T05:37:00.995529Z

Izolacio az tok jó!