This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2018-12-03
Channels
- # adventofcode (198)
- # aleph (10)
- # announcements (7)
- # aws (17)
- # beginners (353)
- # boot (1)
- # calva (13)
- # cider (18)
- # cljdoc (2)
- # cljs-dev (11)
- # cljsrn (1)
- # clojure (87)
- # clojure-austin (1)
- # clojure-brasil (2)
- # clojure-greece (13)
- # clojure-italy (18)
- # clojure-kc (2)
- # clojure-nl (9)
- # clojure-quebec (1)
- # clojure-russia (1)
- # clojure-spec (55)
- # clojure-uk (114)
- # clojurescript (18)
- # clojurex (14)
- # code-reviews (5)
- # core-async (17)
- # cursive (23)
- # data-science (1)
- # datomic (82)
- # docker (8)
- # duct (10)
- # emacs (8)
- # figwheel (3)
- # figwheel-main (5)
- # fulcro (13)
- # hyperfiddle (8)
- # jobs (1)
- # midje (1)
- # mount (1)
- # nrepl (2)
- # off-topic (72)
- # om (2)
- # pathom (10)
- # portkey (2)
- # re-frame (9)
- # reagent (3)
- # reitit (9)
- # ring-swagger (14)
- # schema (1)
- # shadow-cljs (91)
- # spacemacs (21)
- # sql (6)
- # tools-deps (19)
- # unrepl (9)
- # vim (41)
How do we justify Datomic vs Amazon QLDB. Some features look similar. Any ideas?
Maybe you can elaborate on how they look similar? I don't see the similarities so much
@jeroenvandijk immutable, history, sure datomic supports rich querying capabilities,
I would surely miss those rich querying capabilities, the flexible data modelling, integration with Clojure etc. I would also be very curious for the first production experience reports on the new Database and how people are using it.
Writes expressiveness and speculative writes are also a big deal
I hope this doesn’t come across as overly cynical; I haven’t had my coffee yet this morning. That said, if someone is asking you to “justify” Datomic over QLDB as a choice for your system of record, my immediate tack would be to investigate why I was stuck trying to get all my architecture decisions past someone whose default position is “but AWS service
exists and it’s close, use that.”
I think the reverse question is more in order at the moment. That begin said, I wouldn't feel the need to justify anything lol 🙂
The second thing I would say, though, is “QLDB is clearly, both in terms of released features and in terms of AWS’ own documentation about it, meant to be the backing store for an immutable ledger, e.g., a managed, centralized deployment of “blockchain!“. We aren’t building “blockchain!” with this effort, are we? Please tell me because if we are I need to go short my RSUs.”
There’s nothing wrong with someone asking questions. Those are usually helpful when trying to think through your options.
My first answer would be they are two different things and you should try both to see the difference, if you don't see the difference already. I would for instance have to try QLDB to fully understand it's implications
@potetm I was being snarky and reading perhaps too much into the original question’s formulation of “How do I justify Datomic vs. QLDB” - which seems to me to describe less an honest question and more a “nobody ever got fired for buying AWS” reaction
And my dim view of all things ledger-y is of course also just snark and deep suspicion of hype. There are plenty of great applications for ledgers and I’m sure that if the OP is building one of those, QLDB is in the running for a backing technology of choice. My initial take was that either they aren’t and someone is asking them, essentially, “but you said Datomic is great because it’s immutable; well this new QLDB thing is immutable too, so why can’t we use that instead?” or that they are building a ledger and then my question is “do you know why you need a ledger for this application or are you on the ’chain train?” 😇
I don’t think being indexed disqualifies QLDB as not being a blockchain technology necessarily (see nanocurrency). From the surface, it seems like one of the main practical differences between using Datomic or QLDB is the ability to cryptographically verify your ledger history out of the box. If the application needs this sort of functionality it might be worthwhile to forego the read/write expressiveness etc that Datomic offers and use something more tailor fit for that use case.
That said, this could probably be implemented on top of Datomic, but that’s additional development effort.
@petr https://github.com/pedestal/pedestal-ions-sample , https://github.com/pedestal/pedestal.ions
@cjsauer What Datom limit are you referring to? Can you add a reference to where you read this?
@joe.lane I’ve heard that larger databases can become problematic, but according to this post it isn’t a “hard” limit: https://forum.datomic.com/t/datomic-cloud-datom-limits/473
HCA gave a talk at this year’s Conj that showed how they were hot swapping Datomic databases after they had “filled up”. But as @marshall says in that post, it may be a “data shape/usage” constraint.
Found the talk: https://youtu.be/AyWbB52SzAg
Hmm, I must have missed that part of the conj. I’ve run multi-tenant datomic cloud databases in production and its pretty seamless.
I think it was on-prem, and a lot of the things they were encountering are unlikely to be issues w/cloud
> a lot of the things they were encountering are unlikely to be issues w/cloud This is good to know. Do you have a specific example @alexmiller? I ask so that I don’t propagate any misinformation regarding the latest and greatest.
well with db size, a single cloud system can support many dbs, so the size thing has more ways to mitigate
and I think they were talking about restart time or something, which is a non-issue
sorry, I didn’t catch the whole talk
I don’t think you even need to do that - one cloud instance can host many dbs so don’t think you need to change any config at all, just prob an app issue.
Talking with @marshall at the Conj, I recall him mentioning a potential issue using the new aws api with Datomic cloud until the next version of Datomic is released, though I think it was limited in scope. I don’t remember the details, however. Can anyone fill in the gaps in my memory?
That’s Correct. The currently available release of Cloud uses an older version of an http client that will not work with aws-api
Thanks, @marshall for confirming. Any word from AWS on when the next version might drop?
@solussd I saw your thread about no such var
errors in datomic client api from few weeks ago
hmm, do you have a link? I must have gotten past it.
oh, here in the datomic channel
That was someone elses issue, iirc.
Did you ever find a resolution there? I’m having a very similar issue with a basic datomic connection
@jonathan617 what's your issue?
For dependencies I have
[[org.clojure/clojure "1.8.0"]
[com.datomic/client-pro "0.8.28"]
[com.datomic/client-impl-shared "0.8.28"]]
And then I require like
(ns datomic-client-example.core
(:require [datomic.client.api :as client-api]))
And then do this,
(def cfg {:server-type :peer-server
:access-key "..."
:secret "..."
:endpoint "localhost:9001"})
(client-api/client cfg)
the first time the error was CompilerException java.lang.RuntimeException: No such var: p/recent-db, compiling:(datomic/client/api/async.clj:101:9)
but now it’s CompilerException java.lang.Exception: namespace 'datomic.client.api.async' not found, compiling:(datomic/client/api/sync.clj:16:1)
every time
@jonathan617 Take out the dep on client-impl-shared
@marshall thanks, I did that, and now it does this
datomic-client-example.core=> (client-api/client cfg)
2018-12-03 15:57:14.299:INFO::nREPL-worker-0: Logging initialized @11630ms
CompilerException java.lang.RuntimeException: Unable to resolve symbol: int? in this context, compiling:(datomic/client/impl/shared.clj:349:13)
datomic-client-example.core=> (client-api/client cfg)
CompilerException java.lang.Exception: namespace 'datomic.client.impl.shared' not found, compiling:(datomic/client/api/sync.clj:16:1)
datomic-client-example.core=>
Q: do component entities maintain a sort order? I suspect so and I want to rely on it but I can’t find any docs on this
@dustingetz (and anyone who cares) I just used that library in combination with https://github.com/walmartlabs/lacinia-pedestal to serve graphql from api-gateway using pedestal for interceptors and web related stuff and then lacinia-pedestal for my resolvers and gql stuff. Datomic cloud for the database the resolvers work upon. Works against apigw with curl but graphiql doesn’t work because apigw hasn’t released their new websocket support yet. Soon I’m sure. That being said, because I’m using pedestal I can run graphiql locally and have this whole stack running on my laptop (except for datomic cloud of course, may be able to mock it but haven’t invested in that yet.)
@joe.lane that’s good to know. I’m using AppSync with Ions but I suspect lacinia-pedestal might have less overall complexity. I’m curious why graphiql needs websocket support? I’m using it in my re-frame client and I don’t see any websocket requests
I’m currently using artemis but I’m gonna spike re-graph and sub-graph as a replacement - again to reduce complexity. artemis does not appear to be originally designed for re-frame
Once apigateway releases websocket support (🤞 soon) I’ll probably write my own subscription streamer and have a serverless graphql stack.
I think my problem is that I’m not serving the assets from the right place, thanks for the feedback. I saw websocket errors and assumed thats why it wasn’t working. Just confirmed I get those locally as well so I may be able to still get it to work!
agreed, it should work. it could be the first request which is an OPTIONS instead of a GET that is breaking via apigw
I’d really like to know if you can make that work. it’ll be one more data-point to convince me to switch over
great thanks. btw if you need subscriptions sooner, you could always use AppSync just for the subs and accept the extra complexity in a constrained area