Fork me on GitHub
#clojure-norway
<
2024-02-08
>
slipset13:02:57

Jeg er vel et eller annet sted mellom snøblind og stockholmsyndrom, men jeg synes SQL er ganske så elegant. Sånn, der fikk jeg sagt det også.

Jakub Holý (HolyJak)12:02:57

Minst ift. Mongo 🙂

teodorlu13:02:32

lyst til å legge ved en elegant SQL-snutt til det?

1
cjohansen13:02:46

Kan forøvrig sees filmatisert i serien Clark, artig over-the-top greier 😄

slipset14:02:21

@ivar.refsdal vet ikke hvor elegant det er men jeg synes at

select foo, (select name from whatever w where w.id = bla.id) from bla where ...
er litt elegant, altså at man kan putte en select inni en select

👍 2
augustl14:02:56

magefølelsen min sier at dette blir en N+1-spørring hvor den må kjøre selecten én gang for hver rad. Ikke at det alltid er et problem. Og den klarer kanskje å optimalisere seg ut av det i visse tilfeller og. Dette er mitt spørsmål, som ikke er et spørsmål, kanskje mere en kommentar.

thinking-face 1
slipset14:02:12

Det er jo det som er så fett med deklarativ programmering. Jeg behøver ikke bry meg om hvor treigt dette er før det er for treigt, og jeg har i større grad enn

select foo, whatever.name from bla, whatever w where w.id = bla.id and ...
uttrykt min intensjon, så jeg vil påstå at en optimizer nå har mer kunnskap om hva den kan gjøre.

slipset14:02:12

Jeg synes også subselects er helt nydelig. select foo from bar where (foo_id) in (select id from foo where …)

👍 1
Ivar Refsdal14:02:38

Datomic støtter også noko lignande:

(d/q '[:find ?e-id ?wname
         :keys :e/id :w/name
         :in $
         :where
         [_ :e/id ?e-id]
         [(datomic.api/q '[:find ?name .
                           :in $ ?e-id
                           :where
                           [?e :e/id ?e-id]
                           [?e :e/ref ?w]
                           [?w :w/name ?name]]
                         $ ?e-id) ?wname]]
       (d/db conn))
Er det mogleg å få datomic.api/q inn i :find-clausen? Nokon som veit?

augustl14:02:19

er strengt tatt ikke så viktig å uttrykke alt som én spørring med Datomic, siden N+1 ikke har noen overhead der med lokale data 😄 Så query-apiet “mangler” en del sånne ting, fordi det ikke trengs

Ivar Refsdal14:02:13

Sant det... men eg synest som @U04V5VAUN at det kan vera godt å få gjort alt i "ein" query (og så får noko anna ta seg av ytelsen om det vert eit problem)

slipset14:02:36

Nå er jo heller ikke n+1 så farlig i disse spørringene siden alt skjer lokalt på serveren.

augustl14:02:39

hah, også sant, det samme gjelder jo der ja

teodorlu14:02:57

> er strengt tatt ikke så viktig å uttrykke alt som én spørring med Datomic, siden N+1 ikke har noen overhead der med lokale data 😄 Så query-apiet “mangler” en del sånne ting, fordi det ikke trengs Det gjelder kun når du bruker Peers! Med Client får du vel N+1-problemer.

👍 1
augustl14:02:01

“ikke gjør n+1 over nettverket” er vel grunnprinsippet her

augustl14:02:18

sant, aldri brukt disse client-greiene, virker litt poengløst å bruke datomic uten peers spør du meg

teodorlu14:02:07

jeg synes også peers virker mest attraktivt. Men har inntrykk av at Nubank bruker mer og mer Client. Uten at jeg forstår hvorfor.

augustl14:02:28

Kommer Vel An På (tm)

🔥 2
cjohansen15:02:42

Peers er minst 70% av magien med Datomic

👍 1
cjohansen15:02:14

Du kan flette pull inn i Datomic-spørringer, men jeg foretrekker å dele det opp. Finn det du leter etter først, plukk ut datapunktene etterpå. Lettere å lese for meg.

cjohansen15:02:39

Uavhengig av kilde, men med SQL blir det et spørsmål om ytelse, så da har man ikke valgets luksus.

👍 1
teodorlu15:02:32

@U9MKYDN4Q skjønner du hvorfor Nubank heller mot client-API-et?

Linus Ericsson15:02:40

Client-APiet passar ju väldigt bra för typ konfiguration och i de fall man delat upp det i shardade databaser. Men jag håller helt med om att Peer-arkitekturen är den stora vinsten med datomic.

👍 2
teodorlu15:02:45

jaaa, Peer blir kanskje vanskelig når det blir veldig mye data? Hvis man ikke får plass til alt på én node?

Linus Ericsson15:02:49

Ja, det finns vissa sådana fall, absolut. Men i normalfallet läses ju indexen (och datat) in successivt efterhand. Men absolut kan det finns tillfällen där client-API är rätt. Jag älskar ju att ha allt i samma process så jag är partisk där.

👍 1
augustl15:02:25

alt må leve på en node ett sted :)

👍 1
augustl15:02:49

bare at med client er det en annen node enn appen

👍 1
cjohansen15:02:10

@U3X7174KS du kan dele data mellom peers med memcached eller valcache

👀 1
cjohansen15:02:20

og nei, aner ikke hvorfor de bruker client

👍 1
cjohansen15:02:05

Og beklager til @U04V5VAUN at alle hans forsøk på å snakke om databaser ender opp med Datomic-prat. Denne gangen var det ikke min feil! 😅

🥳 2
😄 2
😂 4
Linus Ericsson15:02:11

Någon nämnde lösningar med shardade databaser - där blir det tungt för peeren som måste hålla alla index i minnet. Just dä är client api det enda som är möjligt

augustl15:02:28

om hensikten er å aggregere store mengder data som ikke får plass i RAM så er det vel bedre å speile dataene til en eller annen column store

anders16:02:48

Det er kanskje også verdt å poengtere at ingen av SQL-eksemplene av sub-selects in denne tråden krever flere Datomic spørringer. Sub-selects er et artefakt av at data i SQL er strukturert i tabeller. Dette smelter (som regel) bort i Datomic ettersom data er strukturert i "datoms" (RDF-aktive tupler)

💯 2
1
☝️ 1
Jakub Holý (HolyJak)12:02:23

Ift Nubank - de bruker client api fordi de kanskje bruker Datomic Cloud, som bare støtter dette?

cjohansen13:02:33

Det kan godt være 😄

slipset14:02:06

Det gjør at man kan skille på “dekorasjon” av resultat fra det å uttrykke relasjonene som skal til for å finne resultatet.

👍 1