This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-05-02
Channels
- # announcements (1)
- # babashka (4)
- # beginners (39)
- # calva (36)
- # cherry (11)
- # cider (23)
- # clj-on-windows (3)
- # clojure (105)
- # clojure-brasil (1)
- # clojure-chicago (3)
- # clojure-conj (8)
- # clojure-denver (4)
- # clojure-europe (18)
- # clojure-germany (5)
- # clojure-hungary (13)
- # clojure-nl (1)
- # clojure-norway (31)
- # clojure-sweden (9)
- # clojure-uk (2)
- # clojurescript (22)
- # core-async (4)
- # cursive (8)
- # data-science (25)
- # datomic (14)
- # devops (1)
- # emacs (9)
- # events (5)
- # holy-lambda (32)
- # hyperfiddle (26)
- # introduce-yourself (2)
- # kaocha (1)
- # leiningen (11)
- # lsp (17)
- # malli (8)
- # off-topic (84)
- # pedestal (4)
- # polylith (2)
- # re-frame (17)
- # reitit (1)
- # releases (1)
- # remote-jobs (1)
- # shadow-cljs (8)
- # sql (4)
- # tools-deps (8)
- # transit (5)
- # vim (1)
- # vscode (1)
- # xtdb (45)
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
Datomic free az nagyon jó. Emiatt alkalmaztam az xtdb-t, mert 4K per év saját magamnak sok.. vagy prototypeokhoz
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"}}}
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))
)
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.
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.
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.