This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2017-04-26
Channels
- # aleph (2)
- # beginners (119)
- # boot (18)
- # cider (19)
- # cljs-dev (46)
- # cljsjs (1)
- # cljsrn (30)
- # clojure (101)
- # clojure-dusseldorf (12)
- # clojure-finland (1)
- # clojure-greece (7)
- # clojure-india (2)
- # clojure-italy (6)
- # clojure-poland (4)
- # clojure-russia (120)
- # clojure-sg (3)
- # clojure-spec (147)
- # clojure-uk (75)
- # clojurescript (86)
- # cursive (4)
- # datomic (50)
- # docker (1)
- # emacs (4)
- # juxt (51)
- # leiningen (16)
- # liberator (1)
- # luminus (1)
- # lumo (116)
- # mount (2)
- # off-topic (2)
- # onyx (38)
- # pedestal (4)
- # protorepl (2)
- # re-frame (44)
- # reagent (8)
- # ring-swagger (16)
- # schema (5)
- # specter (16)
- # test-check (226)
hello friends, I need some help to sell Datomic
to my client. What are the best arguments that I can give for selling Datomic to a business profile (and not technical at all) ? Thanks a lot.
@baptiste-from-paris good question, I would love to hear this from ones have done this before as well đ
@baptiste-from-paris I definitely need to make a blog post for this, as it was a tough sell to the non-technical founder of my startup as well (which later acknowledged it was a tremendously good choice)
of course it's hard to justify a technical choice with a non-technical vocabulary, but here are some ideas.
1. high query power (thanks to Datalog and the fact that querying is effectively non-remote) means I can get new features done more quickly.
2. you never lose data -> means you recover easily from human or programmatic errors. Example: once my Operations director calls me while I'm out buying lunch "Hey Val, I just accidently deleted one of our customers organization along with 100s of user profiles". Me: "OK, don't worry, I'll put it back in 30 mins."
3. high schema flexibility -> means it's easy to modify features.
@val_waeselynck thatâs what my slide looks like lol
great synthesis skill đ
4. Very effective testing at a low cost thanks to speculative writes, a feature unique to Datomic with far-reaching consequences -> means I don't have to do quick and dirty, I can just do quick and clean, with huge benefits once your codebase is a few months old.
5. The hardest technical problems of traditional databases are just gone : Impedance Mismatch, Cache Invalidation, N+1 problem, Concurrency / Distributed systems issues.
6. Easy modeling thanks to the universal schema -> means you don't spend time anticipating how you'll query your data when you're storing it
7. Trivial Change Data Capture thanks to the Log, which means Datomic is an excellent data source to integrate to other data systems (BI, derived data, materialized views etc.) -> means Datomic will be an asset, not a liability, when you need to integrate other data engines as your system grows.
Note that I haven't included the 'time travel' features of Datomic - I think most people who use Datomic to keep several versions of some piece of data end up disappointed
I just totally shared that list with my team, as part of my efforts to evangelize Datomic. Thanks @val_waeselynck!
(Personally, my main reason for choosing Clojure for my startup was idiomatic access to Datomic. You can usually work around the deficiencies of your programming language - I'm looking at you, JavaScript!- but not those of your database system)
OK putting the blog post on my todo list.
@baptiste-from-paris also, I just discovered this page on http://datomic.com http://www.datomic.com/benefits.html
Guess it wasn't here a few months ago, you may have missed it too.
How can I log transactions using log4j? I've enabled <logger name="datomic" level="DEBUG" /> and I see lots of things like peer connections but I don't see any trace for my queries
(fn equal? [entity1 entity2] (= (:db/id entity1) (:db/id entity2)))
There is an "smarter" way to compare entities?
if you are trying to compare whether two entity maps are for the same entity that seems like what you should do
an entity map is a collection of attributes from a point in time so you can have different entity maps for the same id with different things in them
and then they also have lazy read semantics so that is also worth consideration
I have a single db that instance all entityes. Sometimes I'm "walking" on entites and sometimes I need to compare
âcompareâ is too weak a word to describe the operation you mean :)
it can mean both âhave the same contentsâ or ârefer to the same entityâ?
refer to same entity... Entity has same db/id... (fn equal? [entity1 entity2] (= (:db/id entity1) (:db/id entity2)))
< it's working.
yes, that makes sense
@souenzzo If that isn't just java object identity, the semantics are so ambiguous and unclear that you are better off being more specific
the problem of entity equality is the same as of Java object equality, except worse because of time travel or db filtering
so you need to be specific about what constitutes equality for you. If it means "same db/id", that's fine. But the entity maps may have different attributes or values on them, be for a different db t, or be from completely different dbs
they may even have the same visible assertions, but be from different dbs; or from the same db with different filters, as-of-t, or since-t
@sineer Datomic doesnât provide logging of the queries themselves. What specifically are you wanting to record/identify?
@marshall I'm just beginning to learn how to use datomic and my pedestal app does a simple query and I guess I was expecting to see the query being logged having turned on full logging. I'm surprised that it doesn't provide that debug feature?
@sineer all the work of query occurs on the peer. If you enable peer logging you will see some reports of what the peer is doing
I enable log ALL for datomic and all I see for peer is this: 2017-04-26 17:39:30 INFO datomic.peer - {:event :peer/connect-transactor, :host "0.0.0.0", :alt-host "192.168.99.100", :port 4334, :version "0.9.5561", :pid 80946, :tid 87} followed later by: 2017-04-26 17:39:30 INFO datomic.peer - {:event :peer/cache-connection, :protocol :dev, :db-name "xxx-dev", :system-root "192.168.99.100:4334", :host "192.168.99.100", :port 4334, :db-id "xxx-dev-8c7fdb4b-86ec-46c5-95cb-a9e6932b99fd", :pid 80946, :tid 87}
I suppose it does tell me :tid 87 and I must learn how to access the transaction log if I care to see the query?