This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2023-04-05
Channels
- # aleph (2)
- # announcements (3)
- # architecture (5)
- # beginners (51)
- # biff (5)
- # cider (1)
- # clerk (8)
- # clj-kondo (6)
- # cljsrn (5)
- # clojure (31)
- # clojure-europe (42)
- # clojure-nl (1)
- # clojure-norway (21)
- # clojure-uk (3)
- # emacs (11)
- # fulcro (2)
- # graphql (6)
- # hugsql (1)
- # jobs (2)
- # leiningen (3)
- # lsp (3)
- # malli (13)
- # missionary (1)
- # off-topic (7)
- # pathom (7)
- # polylith (27)
- # reagent (14)
- # reitit (3)
- # remote-jobs (7)
- # shadow-cljs (20)
- # spacemacs (4)
- # sql (3)
- # tools-build (4)
- # xtdb (7)
jeg hadde egentlig en South Park-vits i hodet, men bomma 😂 Tenkte på han fyren som ikke kan si “t”-en i “Planetarium”. Men jeg utelot to bokstaver.
har sett noen nydelige klipp fra nyere episoder av South Park, må begynne å se på South Park igjen
dette er South Park akkurat sånn det skal være https://www.youtube.com/watch?v=2N8_5LDkZwY
> You’ve lived a life with the royal family, and have had everything handed to you, but you say your life has been hard?
Jeg limer inn et svar fra en tråd her, hvor @terjesb har noe spennende nytt om Datomic (i hvert fall for meg) 🙂 https://clojurians.slack.com/archives/C061XGG1W/p1680687328890689?thread_ts=1680259235.513559&cid=C061XGG1W
This might be useful for the whole channel. @slipset you can also read directly https://github.com/ardoq/architecture-decision-records/blob/main/decisions/0004-replace-mongodb-with-postgresql.md#o2-datomic > Multi-tenancy: ❌✅ - a single DB instance can host multiple databases BUT this only works well in Datomic Cloud and not really in on-prem, since all the DBs contend for the same limited resources - “there are operational considerations making it a poor fit”. The only feasible solution in on-prem is 1 transactor per DB and thus $5k per DB per year. In Cloud can have 100s to thousands of separate DBs. > … > From Datomic Support (Jaret Binford, 28/9) on the infeasibility on using on-prem with multiple databases: > The quick and dirty: Multi-tenancy in on-prem is a no-go. There is not an enforced limit on DBs in on-prem but there are operational considerations making it a poor fit. Chiefly because the transactor was designed to serve a single primary DB (some small secondary DBs are OK for operations type tasks), but the transactor has to hold in memory the sum of each DB’s memory index. With large enough DBs this becomes a resource problem. Furthermore there are no per DB stats in Datomic on prem, all DBs compete for space in the object cache, queries and transactions compete for CPUs and garbage collection pauses have impact across all DBs. You can certainly run multiple DBs, but I recommend that any mission-critical DB have their own dedicated transactor and peer processes. > Multi-tenancy in Cloud is fully supported and you can have 100s to thousands of separate DBs on a Datomic cloud system. There are still operational impacts to having so many DBs but you can scale compute nodes to optimize performance, utilize query groups to offload read per DB and have the ability to scale. The answer to https://forum.datomic.com/t/large-number-of-database/1038 > Generally, I would consider a multi-tenancy of 10 or so databases to likely be fine, with as many as a fifty or a hundred if they’re quite small and infrequently used. seems to be not fully consistent with the previous one, which claims 100s - 1000s could be fine. So perhaps Cognitect does not know itself 😭
Nyttig informasjon. Vi kjører flere databaser på samme transactor hos oss, uten problemer, men det er nok en annen skala enn de snakker om her.
Yes. Det nevnes over i tråden at Nubank har ‘dozens’ av databaser, og mulig det er nede på det igjen. Per 2020 hadde de 2300 databaser (sharder mange sluttkunder i samme database, de angret på at de ikke hadde med customer-id i reified tx fra start for enklere sharding). https://building.nubank.com.br/welcoming-cognitect-nubank/ Per 2023 har de økt fra 500 til ~1000 microservices, oppgir ikke noe nytt tall for dbs. https://building.nubank.com.br/functional-programming-with-clojure/.
Jeg forstår ikke helt hva som er overheaden i “en database”. Hvorfor er 1 database med X data mer stabilt enn 10 databaser med X/10 data?
Min forståelse er at det kreves ressurser og hw for å kjøre gjennom tx pipeline, så det er potensielt mye mer ressurskrevende å gjøre dette 2300x parallelt vs 1x. Og særlig for on-prem hvor det er en del saker in-process per connection. Inntrykket er at det er et mindre problem på cloud, dvs. enklere der å skalere opp med mer hw. Så da kommer det vel mest an på hva de tester i sin ende og hva de vil anbefale/supportere/garantere? Usikker på hvordan man best tenker på dette ift. underliggende begrensninger på antall writes. Motsatt, det jeg har sett de nevne i presentasjoner ift hvorfor de sharder er: • database throughput limits required throttling writes [da de begynte med dette for mange år siden, og per i dag har de vel rundt 75 millioner kunder.. så er noen writes/sec da] • batch job latency impacting customer experience Det første har en øvre grense et sted i Datomic, som riktignok er moving target ift. nyere/raskere hw/SSD/DynamoDB, Cloud, etc. Også hotspots i shards, med enkelte kunder som belaster mye mer enn andre. Man vil helst ikke ha alle hotspots i én shard. Det andre tolker jeg som at de oppdaterer en del saker i batch, og at det tar lang tid å oppdatere for X millioner kunder i samme database, men raskere hvis det parallelliseres eller kun kjøres for databaser som har endringer. Vet ikke om de heller kunne løst slikt med ting som Kafka Streams. Som alltid er det sikkert mange måter å løse ting på som delvis kunne omgått ulike begrensninger, og så må de i første omgang forsøke å finne ok løsninger innenfor hovedsporet de er på akkurat nå. (Sharding/multi-db åpner også for at de kan ekspandere ut fra Sør- og Latin-Amerika og likevel ha db/shard nær kunden. For øvrig så jeg nevnt et sted i tråden forrige uke at Datomic tillater spørringer som joiner flere databaser, og det er en funksjon vi bruker på on-prem, men som foreløpig ikke er støttet på cloud. Da må man heller joine i applikasjonen.)