[HN Gopher] Datomic is Free
___________________________________________________________________
Datomic is Free
Author : xmlblog
Score : 780 points
Date : 2023-04-27 13:40 UTC (9 hours ago)
(HTM) web link (blog.datomic.com)
(TXT) w3m dump (blog.datomic.com)
| sdfjkl wrote:
| Where's the source? Why does it say "Pricing" on the website if
| it's free? This isn't free, it's just an attempt at free
| publicity.
| wartijn_ wrote:
| The pricing page mentions it's free.
|
| > This section only applies to Datomic 990-9202 and lower.
| Newer versions of Datomic Cloud will be free of licensing
| related costs, and you will only pay for the hardware that you
| use to run the system.
| CrimsonCape wrote:
| Since the conversation seems to be focusing on the Apache 2.0
| license, what would you do? Clearly there isn't a lot of
| precedent for "closed-source, free-to-use" licenses.
|
| In this case Datomic maintains development control over their
| product and "source of truth" is still themselves, and the
| implicit assumption is that you enthusiastically use their
| product for free with no strings attached because you respect
| them as the source of truth.
| avodonosov wrote:
| If you work with Datomic, my little helper functions may be
| useful: https://github.com/avodonosov/datomic-helpers
| augustl wrote:
| Datomic's is perfect for probably 90% of small-ish backoffice
| systems that never has to be web scale (i.e. most of what I do at
| work).
|
| Writing in a single thread removes a whole host of problems in
| understanding (and implementing) how data changes over time. (And
| a busy MVCC sql db spends 75% of its time doing coordination, not
| actual writes, so a single thread applying a queue of
| transactions in sequence can be faster than your gut feeling
| might tell you.)
|
| Transactions as first-class entities of the system means you can
| easily add meta-data for every change in the system that explains
| who and why the change happened, so you'll never again have to
| wonder "hmm, why does that column have that value, and how did it
| happen". Once you get used to this, doing UPDATE in SQL feels
| pretty weird, as the default mode of operation of your _business
| data_ is to delete data, with no trace of who and why!
|
| Having the value of the entire database at a point in time
| available to your business logic as a (lazy) immutable value you
| can run queries on opens up completely new ways of writing code,
| and lets your database follow "functional core, imperative
| shell". Someone needs to have the working set of your database in
| memory, why shouldn't it be your app server and business logic?
|
| Looking forward to see what this does for the adoption of
| Datomic!
| brundolf wrote:
| Something I've been curious about: how well (or badly) would it
| scale to do something similar on a normal relational DB (say,
| Postgres)?
|
| You could have one or more append-only tables that store
| events/transactions/whatever you want to call them, and then
| materialized-views (or whatever) which gather that history into
| a "current state" of "entities", as needed
|
| If eventual-consistency is acceptable, it seems like you could
| aggressively cache and/or distribute reads. Maybe you could
| even do clever stuff like recomputing state only from the last
| event you had, instead of from scratch every time
|
| How bad of an idea is this?
| koreth1 wrote:
| That's a pretty common pattern in event-sourcing
| architectures. It is a completely viable way to do things as
| long as "eventual-consistency is acceptable" is actually
| true.
| augustl wrote:
| Datomic already sort of does this :) You configure a storage
| backend (Datomic does not write to disk directly) which can
| be dynamodb, riak, or any JDBC database including postgres.
| You won't get readable data in PG though, as Datomic stores
| opaque compressed chunks in a key/value structure. The chunks
| are adressable via the small handful of built-in indexes that
| Datomic provides for querying, and the indexes are covering,
| i.e. data is duplicated for each index.
| brundolf wrote:
| Interesting! I assumed Datomic was entirely custom
|
| Now I'm even more curious if you could skip Datomic and
| just do something like this directly with a relational DB
| in production
| kamma4434 wrote:
| Yes, but you end up rewriting Datomic!
| brundolf wrote:
| Well, except it sounds like Datomic is closed-source :)
| JBiserkov wrote:
| But why?! The whole point of Datomic is that it
| implements this entire immutable framework for you, on
| top of mutable storage.
|
| So YOU can focus on building your own specific business
| logic, instead of re-implementing the immutable DB wheel.
| epolanski wrote:
| > Datomic's is perfect for probably 90% of small-ish backoffice
| systems that never has to be web scale (i.e. most of what I do
| at work).
|
| So is any cloud-managed db offering and at that scale we
| talking very small costs anyway.
|
| Why datomic instead?
| augustl wrote:
| Because of the reasons I list :) Anything in particular that
| wasn't clear/relevant?
| xpe wrote:
| > Datomic's is perfect for probably 90% of small-ish backoffice
| systems that never has to be web scale (i.e. most of what I do
| at work).
|
| I don't think I agree with this as stated. It is too squishy
| and subjective to say "perfect".
|
| More broadly, the above is not and should not be a cognitive
| "anchor point" for reasonable use cases for Datomic. Making
| that kind of claim requires a lot more analysis and persuasion.
| augustl wrote:
| I agree, I mostly phrased it that way for effect. My
| "analysis" is 100% subjective, opinionated and anecdotal :)
| spariev wrote:
| One thing which is quite hard to do in Datomic is simple
| pagination on a large sorted dataset, as one can easily do with
| LIMIT/OFFSET in MySQL for example. There are solutions for some
| of the cases, but general case is not solved, as far as I
| remember (it's been a while I used it extensively)
| augustl wrote:
| It depends! If you want to lazily walk data, you can read
| directly from the index (keep in mind, the index = the data =
| lives in your app), or use the index-pull API which is a bit
| more convenient.
|
| However, if you want to paginate data that you need to sort
| first, and the data isn't sorted the way you want in the
| index, you have to read all of the data first, and then sort
| it. But this is also what a database server would need to do
| :)
| convolvatron wrote:
| there must be a relational sort? ah yes, there is, and the
| ability to feed a relational output into a Clojure sort
| Scarbutt wrote:
| _Datomic 's is perfect for probably 90% of small-ish backoffice
| systems that never has to be web scale_
|
| How do they scale it for Nubank? (millions of users)
| ithrow wrote:
| I don't how they do it, but the obvious answer is probably
| sharding. Their cloud costs must be no joke. Peers require
| tons of memory and I can only guess they must have thousands
| of transactors to support that workload and who knows how
| many peers. Add to this that they probably need something
| like Kafka for integrating/pipelining all this data.
| outworlder wrote:
| > Peers require tons of memory
|
| As do most distributed databases. Even when you don't store
| your entire database (or working set) in memory, you'll
| likely still have to add quite a bit of memory to be used
| as I/O cache.
| augustl wrote:
| Good question! I don't have any personal experience in that
| regard. I would probably have paid up for enterprise support
| (or bought the entire company ;))
| electroly wrote:
| > Someone needs to have the working set of your database in
| memory, why shouldn't it be your app server and business logic?
|
| This one confused me. The obvious reason why you don't want the
| whole working set of your database in the app server's memory
| is because you have lots of app servers, whereas you only have
| one database[1]. This suggests that you put the working set of
| the database _in the database_ , so that you still only need
| the one copy, not in the app servers where you'd need N copies
| of it.
|
| The rest of your post makes sense to me but the thing about
| keeping the database's working set in your app server's memory
| does not. That's something we specifically work to avoid.
|
| [1] Still talking about "non-webscale" office usage here,
| that's the world I live in as well. One big central database
| server, lots of apps and app servers strewn about.
| augustl wrote:
| It's definitely a trade-off! If you have 10s or 100s of app
| servers that has the exact same working set in memory, it's
| probably not worth it.
|
| But if you have a handful of app servers, it's much more
| reasonable. The relatively low scale back-office systems I
| tend to work with typically has 2, max 3. Also, spinning up
| an extra instance that does some data crunching does not
| affect the performance of the app servers, as they don't have
| to coordinate.
|
| There's also the performance and practicality benefits you
| get from not having to do round-trips in order to query. You
| can now actually do 100 queries in a loop, instead of having
| to formulate everything as a single query.
|
| And if you have many different apps that operates on the same
| DB, it becomes a benefit as well. The app server will only
| have the _actual_ working set it queries on in memory, not
| the sum of the working set across all of the app servers.
|
| If this becomes a problem, you can always architecture your
| way around it as well, by having two beefy API app servers
| that your 10s or 100s of other app servers talks to.
| xmlblog wrote:
| > If you have 10s or 100s of app servers that has the exact
| same working set in memory, it's probably not worth it.
|
| The introduction of intelligent application-level
| partitioning [1] and routing schemes can help one balance
| cost and performance.
|
| [1] https://blog.datomic.com/2023/04/implicit-
| partitions.html
| electroly wrote:
| SQLite provides a similar benefit with tremendous results
| using its in-process database engine, although the benefit
| there is more muted by default because of the very small
| default cache size. We do have one app where we do this.
| There's no database server, the app server uses SQLite to
| talk directly to S3 and the app server itself caches its
| working set in memory. I can definitely see the benefit of
| some situations, but for us it was a pretty unusual
| situation that we might not ever encounter again.
|
| All that said... can't Datomic also do traditional query
| execution on the server? I thought it had support for
| scale-out compute for that. AIUI, you have the option to
| run as either a full peer or just an RPC client on a case-
| by-case basis? I thought you wouldn't need to resort to
| writing your own API intermediary, you could just connect
| to Datomic via RPC, right?
| carry_bit wrote:
| AIUI, the full peer _is_ Datomic; the RPC server is just
| a full peer that exposes the API over http and is mainly
| intended to be used with clients that don 't run on the
| JVM (and so can't run Datomic itself in-process).
| dimitar wrote:
| Consider this use case - in addition to your web app, you
| have a reporting service that makes heavy duty reports; if
| you run one at a bad time, bad things might happen like users
| not being able to log in or do any other important work,
| because the database is busy with the reports.
|
| So in a traditional DB you might have a DBA set up a
| reporting database so the operational one is not affected.
| Using Datomic the reporting service gets a datomic peer that
| has a copy of the DB in database without any extra DBA work
| and without affecting any web services. This also works
| nicely with batch jobs or in any situation where you don't
| want to have different services affect each others
| performance.
|
| Its true that a lot more memory gets used, but it is
| relatively cheap - usually the biggest cost when hosting in
| the cloud being the vCPUs. But usually in Clojure/Datomic web
| application you don't need to put various cache services like
| Redis in front of your DB.
|
| Thea assumption here is that the usual bottleneck for most
| information systems and business applications is reading and
| querying data.
| electroly wrote:
| I appreciated this insight into other people's use cases,
| thank you for that! This architecture brings RethinkDB to
| mind, which also had some ability to run your client as a
| cluster node that you alone get to query. (Although there
| it was more about receiving the live feed than about
| caching a local working set.)
| svieira wrote:
| > which also had some ability to run your client as a
| cluster node that you alone get to query
|
| FoundationDB does this as well.
| thewataccount wrote:
| Is RethinkDB still around?
|
| They actually have recent commits, and a release last
| year.
| electroly wrote:
| The company is gone, but the open source project lives
| on. We still use it in production.
| thewataccount wrote:
| How's it been for production?
|
| Would you recommend using it, or would it be better to go
| with a safer option?
| electroly wrote:
| We've never had any issue with it on a typical three-node
| install in Kubernetes. It requires essentially no ongoing
| management. That said, it can't be ignored that the
| company went under and now it's in community maintenance
| mode. If you don't have a specific good use for Rethink's
| changefeed functionality, which sets it apart from the
| alternatives, I'm not sure I could recommend it for new
| development. We've chosen not to rip it out, but we're
| not developing new things on it.
| thewataccount wrote:
| Interesting thank you!
|
| I remember back when it came out it was a big deal that
| it could easily scale master-master nodes and the object
| format was a big thing because of Mongo back then.
|
| That was before k8's wasn't a thing back then, and most
| of the failover for other databases wasn't a thing just
| yet. I'm too scared to use it because they have a
| community but they're obviously nowhere as active as the
| Postgres and other communities.
| tyre wrote:
| With AWS you can create a replica with a few clicks.
| Latency is measured in milliseconds for the three-nines
| observed usage.
|
| I don't think this is a huge challenge (anymore) for
| Postgres or whatever traditional database.
| augustl wrote:
| A few milliseconds per query adds up if you're doing one
| query per item in a list with 100s or 1000s of elements
| :)
| dimitar wrote:
| That is a read replica, datomic peers can do writes as
| well, which further expands the possible use cases.
| [deleted]
| xmlblog wrote:
| Having the working set present on app servers means they
| don't put load on a precious centralized resource which
| becomes a bottleneck for reads. The peer model allows app
| servers to service reads directly, avoiding the cost of
| contention and an additional network hop, allowing for
| massive read scale.
| NovemberWhiskey wrote:
| I think the point is that treating your database as an arms-
| length, RPC component that's independent from your
| "application" isn't necessarily the only pattern.
| foobiekr wrote:
| Strong agree. there are vast, massive cost savings and
| performance advantages to be had if the model is that a
| shard of the dataset is in memory and the data persistence
| problem is the part that's made external. The only reason
| we are where we are today is that doing that well is hard.
| bruiseralmighty wrote:
| This is true, but the tradeoff is that now your central DB is
| a bottleneck that is difficult to scale.
|
| Having the applications keep a cached version of the db means
| that when one of them runs a complex or resource intensive
| query, it's not affecting everyone else.
| fulafel wrote:
| > Someone needs to have the working set of your database in
| memory, why shouldn't it be your app server and business logic?
|
| This is Ions in the Cloud version, or for on-prem version the
| in-process peer library.
| pachico wrote:
| You seem to describe the Event Source paradigm rather than a
| database :)
| augustl wrote:
| The main difference between event sourcing and datomic are
| the indexes and the "schema", which provides full SQL-like
| relational query powers out of the box, as well as point-in-
| time snapshots for every "event" (transactions of facts).
|
| So, "events" in Datomic are structured and Datomic uses them
| to give you query powers, they're not opaque blobs of data.
| JimmyRuska wrote:
| > doing UPDATE in SQL feels pretty weird, as the default mode
| of operation of your _business data_ is to delete data, with no
| trace of who and why!
|
| It's a good idea to version your schema changes using something
| like liquibase into git, that gets rid of at least some of
| those pains. Liquibase works on a wide variety of databases,
| even graphs like Neo4j
|
| I got the same feeling in Erlang many times, once write
| operations start getting parallel you worry about atomic
| operations, and making an Erlang process centralize writes
| through its message queue always feels natural and easy to
| reason about.
| samuell wrote:
| Question to people having used Datomic:
|
| Based on experience with Prolog, I always thought using Datalog
| in a database like Datomic would mean being able to model your
| data model using stored queries as a very expressive way of
| creating "classes". And that by modeling your data model using
| nested such queries, you alleviate the need for an ORM, and all
| the boilerplate and duplication of defining classes both in SQL
| and as objects in OO code ... since you already modelled your
| data model in the database.
|
| Does Datomic live up to that vision?
| mtnygard wrote:
| You can definitely use Datomic in the way you describe, in at
| least a few different ways. I haven't often seen queries
| stored in the database itself. It's more common to have the
| queries as data in the application. Since queries are
| ordinary Clojure data structures, it's even more common to
| see functions that build queries from inputs or functions
| that transform queries (e.g., adding a tenant-id filter
| clause).
|
| Datomic also support rules, including recursive rules. I
| wrote a library to do OWL-style inference about classes of
| entities using rules. You can see an example here
| (https://github.com/cognitect-
| labs/onto/blob/master/src/onto/...). This is a rule that
| infers all the classes that apply to an entity from an
| attribute that assigns it one class.
|
| I would also say that building an "entity type definition"
| system as entities in Datomic is almost the first thing every
| dev tries after the tutorial. It works... but you almost
| never _need_ it later.
| gleenn wrote:
| Clojure in general is all about passing around little maps of
| data and in particular not using OO to model. So Datomic
| naturally continues that by returning maps of nested
| structures to represent your query results and does side-step
| the ORM completely.
| samuell wrote:
| Thanks for the comment!
|
| I was more thinking of the means to define your data
| "classes" (or whatever it is called on this context)
| though, rather than how it is passed around.
| PreachSoup wrote:
| Question: What's the difference between nested oop objects
| (composition over inheiritance) vs maps of nested
| structures?
| blatant303 wrote:
| "It is better to have 100 functions operate on one data
| structure than to have 10 functions operate on 10 data
| structures."
|
| Alan Perlis.
| gleenn wrote:
| Rich Hickey has a great talk about how Objects are data
| structures with unique interfaces that are unnecessary
| complexity. He showed and example of a web server with a
| web request object with request headers etc etc. Doing
| simple things like collecting information out of that
| nested object structure is bespoke and harder than it
| should be for no real gain. If everything is a map or
| list or set, it becomes completely trivial to extract and
| manipulate data from a structure. It's a subtle
| difference at first but when everything is like that it
| makes your system far simpler. Unfortunately I can't
| remember exactly where the part of this talk is.
| bavell wrote:
| > Unfortunately I can't remember exactly where the part
| of this talk is.
|
| If you or anyone else remembers, I'd love to watch
| [deleted]
| janosos wrote:
| https://youtu.be/aSEQfqNYNAc
|
| The full video: [Time 0:49:06]
| https://www.youtube.com/watch?v=VSdnJDO-xdg
|
| Transcript here: https://github.com/matthiasn/talk-
| transcripts/blob/master/Hi...
| sharms wrote:
| Here is this specific part cut out from the larger talk
| "Clojure made simple":
| https://www.youtube.com/watch?v=aSEQfqNYNAc
| greg7mdp wrote:
| This? https://www.youtube.com/watch?v=aSEQfqNYNAc
| PreachSoup wrote:
| Most of the time, the class name is used just as a
| nominal type identifier. That's what we do at least
| tyre wrote:
| "No real gain"
|
| I don't agree with this. iirc Rack ultimately uses and
| array to represent HTTP responses. It has three members:
| the status code, the headers, and the response body.
|
| If you're shipping a new change, is it easier to mistake
| response[0] or response.headers?
|
| This is a trivial example, but the general class (ha) of
| trade-off is amplified with more complex objects.
|
| I love clojure and lisp but the blindness behind a
| statement like "no real gain" has always kneecapped
| adoption.
| outworlder wrote:
| > If you're shipping a new change, is it easier to
| mistake response[0] or response.headers
|
| False dichotomy. There are many options other than
| arrays. Clojure in particular is fond of hashmaps. You
| can have your response.headers without OOP.
| augustl wrote:
| In Clojure, response.headers is still data :) You just
| use the built-in ways of reading named keys, such as
| (:headers response) or (get headers :response).
| [deleted]
| kaba0 wrote:
| I think there is a need for objects. An active
| connection, talking to the GPU, etc are not data --
| identity is essential for their operation.
|
| OOP is probably the best way to model such,.. well
| objects, allowing them a private, encapsulated state, and
| making it only modifiable, or even viewable through a
| well-defined public interface that enforces all its
| invariants.
| gleenn wrote:
| Clojure uses objects for connections and things, but
| POJOs are harmful IMHO because it makes manipulation and
| collecting data a bespoke task every time. Every time you
| change the data, you have to change a class to represent
| the JSON and the ORM class and .... this is all just data
| kaba0 wrote:
| Well, that's what Java records are for. As for having to
| change the type description, that's more of a static
| typing discussion, though it can be generated -- having a
| single source of truth and generating others is imo the
| best approach.
| ledauphin wrote:
| Java records weren't even a gleam in the eye of James
| Gosling when Clojure was solving these problems at its
| inception.
| filoeleven wrote:
| Connection pools exist precisely because the code outside
| of the connection management piece shouldn't have to care
| much whether or not there is an active connection. It's
| all boilerplate, except for handling the "unable to
| connect" case.
|
| When you call a connection or connection pool object,
| you're querying its current state. This is absolutely
| data.
| waffletower wrote:
| I think OOP (object oriented programming) is abused and
| is not the optimal paradigm for most software services.
| It succeeds best at providing inter-operability structure
| for API design. "Objects", as mentioned here, are an
| abstraction. Stateful data can be organized and
| manipulated elegantly without use of the OOP paradigm.
| Many small systems that employ OOP hamper their
| maintenance and extendability by unnecessary dependence
| upon encapsulation and data ownership. Mutability is a
| villain here as well -- when data structures are
| immutable, there is little fear of panoptic architectures
| designed without ownership constraints. Here software is
| no longer corralled into walled gardens of "objects";
| large complex types and their brittle method associations
| are avoided, greatly simplifying software architectures
| as a result.
| beders wrote:
| Every single day I wish the architects at my current job had
| chosen Datomic instead of Postgresql. It would have saved us so
| so much time and trouble. The time traveling ability alone would
| have been so useful so many times.
|
| Also the ability to annotate transactions is awesome.
|
| So many goodies.
|
| Here's a good summary:
|
| https://medium.com/@val.vvalval/what-datomic-brings-to-busin...
| hoffs wrote:
| I am almost certain you don't.
| kgwxd wrote:
| I really like Clojure and the ideas behind Datomic but free
| without source is a trap, every time. They have to make money
| somehow, but they already sold to a bank. If that bank wants devs
| willing to work on their systems after the current generation
| moves on, I think they'd be better off going open source and to
| continue paying good devs to work on it. Everyone already knows
| lock-in is bad for businesses. Devs will seek non-proprietary
| solutions first, if they can't find it, there are already plenty
| of proven proprietary solutions they'll settle on way before
| Datomic. Open the source, sell the support.
| charesjrdan wrote:
| You could look into http://xtdb.com/ if you want an open source
| alternative
| fulafel wrote:
| > Datomic Cloud will be available on AWS Marketplace with no
| additional software cost.
|
| This is cool as well. It's a CloudFormation template based
| product you can deploy from AWS Marketplace.
| [deleted]
| espeed wrote:
| Is SQLite Wasm on the horizon?
| chrisjc wrote:
| Curious why you're asking this question when it seems to have
| little to do with Datomic going "free"? Did you mean Datomic
| WASM on the horizon? Or am I missing some other connection
| between SQLite and Datomic?
| espeed wrote:
| Datomic Wasm backed by SQLite.
| chrisjc wrote:
| Interesting!
|
| What are you using SQLite for? If it's analytics, perhaps
| DuckDB WASM might be an option?
| hombre_fatal wrote:
| Aside, I remember HN in 2009 or so where Clojure was a daily
| homepage staple and Rich Hickey was putting out his talks about
| Clojure and code design.
|
| I watched a lot of that and used Clojure fulltime for five years.
| Wonder what he's up to these days.
| xmlblog wrote:
| Attending https://2023.clojure-conj.org/schedule/
| kgwxd wrote:
| Oh, that's today and tomorrow. I had been waiting for that, I
| could have sworn earlier this year they said there was going
| to be a live stream available. Maybe it didn't pan out.
|
| Edit: Oh, there are streaming tickets for $20.
| stonemetal12 wrote:
| >used Clojure fulltime for five years.
|
| How did that work out for you? Usually following a hype cycle,
| there is a negative hype cycle i.e. Mongo is webscale, then
| Mongo is a buggy mess.
|
| Clojure seemed to just fade away. Did it turn out well or are
| there interesting pitfalls that make it not as great as
| advertised?
| hombre_fatal wrote:
| Clojure is just really niche. Even an ecosystem that stays
| the same size overtime is dwarfed by the continually growing,
| continually polished competitor ecosystems that will pull
| people from the small niches.
|
| The best things about Clojure are things you don't really
| appreciate until you've already done the work to learn them.
|
| For example, I never would have known how amazing it was to
| evaluate code inside the editor until I did the work of
| learning Emacs + evil-mode + nrepl/cider + whatever so that I
| could spin up my http server in-process and then modify code
| without restarting everything. Even today I'm doing `nodemon
| index.ts` like a goofball.
|
| I stopped using Clojure simply when I met someone who wanted
| to build some big projects with me and, despite appreciating
| that Clojure was probably amazing, they simply couldn't be
| bothered to learn it. Fair enough. It was when Javascript was
| just getting `yield` coroutines (before async/await) which
| finally made Javascript bearable for me enough to switch to
| it for server work.
|
| Clojure just has increasingly compelling languages and
| ecosystems to compete with, yet it has a huge ramp up, being
| a lisp, that make it hard for people to choose it.
|
| Just consider how, to even write Clojure comfortably, you
| really need something like Paredit. Else, what exactly are
| you going to do if you want to nest or unnest a (form) deeper
| in the ast structure? Manually rebalance parens? Cut and
| paste it? Only Paredit lets you easily move a (form) around
| the ast. And it's amazing but yet another tool you have to
| learn just to truly evaluate Clojure.
| blatant303 wrote:
| You don't need paredit. I use Sublime and ctrl+shift+space.
| Been writing Clojure for 10 years or so.
| mschaef wrote:
| I've used Clojure personally for >10 years and done a bit
| with it commercially along the way. (I also have a personal
| affection for Lisp-like languages that goes back to at least
| the mid-90's.)
|
| > How did that work out for you?
|
| For the personal projects, it's been incredibly useful. The
| language fits the way I think, and being built on the JVM, it
| has both a performant runtime and lots of access to a wide
| ecosystem of libraries.
|
| The Clojure-specific ecosystem library has been accused of
| being stagnant. I tend to take a more charitable view. The
| libraries I've used have tended to be smaller in scope and
| more well defined in terms of feature set. This makes it
| easier for them to converge on a feature-complete state, and
| many of them have done just that. If you don't mind
| assembling multiple smaller libraries into the useful whole
| you need, this can provide a stable platform on which to
| build and develop expertise and higher level libraries.
|
| For larger scale commercial work, it's a harder sell. As
| you've pointed out, Clojure is not hugely popular, so it's
| fundamentally a minority language. This can make VC's touchy
| about funding. This is true to the extent I'm aware of at
| least one organization that started moving away from Clojure
| for that reason.
|
| There's also the shape of the learning curve. It can be hard
| to get started with Clojure because of the issues around the
| syntax and associated tooling. The more piecemeal aspect of
| the library ecosystem can then make it harder to get to hit
| the early successes a larger framework-oriented approach can
| give you out of the box. You can get there, but it at least
| takes more initial effort. The same is true for all the
| abstractive power of Clojure (and other Lisps). Abstractions
| are nice, but they take time to develop and the payoff is on
| a considerable lag. The useful rule about waiting to abstract
| until after you see 2 or 3 instances of a pattern means you
| need to at least have spent enough time to see those 2 or 3
| instances (and maybe a few more) before you really start to
| see the payoff in your own code.
|
| The net of all this is that it's a language that may make it
| more difficult to get funding, will be initially somewhat
| confusing to most developers, and the payoff may well be
| deferred to the point you don't see it before you give up
| (either out of frustration or due to external factors). All
| in all, a considerable set of headwinds.
|
| So what does that mean? It's probably better for projects on
| a longer time horizon that have a team willing and able to
| put in extended effort to effectively use the language. (And
| if the team is not self-funded, good to have a funder with
| some ability to accept the risk of a non-conventional
| solution). Not saying these projects don't exist, just that
| they're not common enough to build a 'popular/mass-market'
| ecosystem on.
| askonomm wrote:
| As far as the metrics state, Clojure never faded away. It's
| on an upward trajectory still, albeit slowly. Perhaps it
| faded away in terms of "HN hype of the day".
|
| That said, I've been (and currently am) a Clojure engineer
| for the past 5 years and loving it. Quite a lot of jobs out
| there, more and more each time I look, healthy ecosystem and
| friendly community. It doesn't hurt that it's the most paid
| programming language as well.
| vaylian wrote:
| Probably spending a lot of time in hammocks[1]
|
| [1] https://www.youtube.com/watch?v=f84n5oFoZBc
| puredanger wrote:
| Working on Clojure and Datomic!
| ilrwbwrkhv wrote:
| The whole clojure ecosystem and the wonderful tools around it
| never really took off due to unclear documentation, poor
| onboarding and too few evangelists. Datomic and other products
| are really cool but are now being given away as scrapware due
| to this lack of effort to make the whole ecosystem more
| palatable, colorful and easy to get into for new audiences.
| cellularmitosis wrote:
| Even as a Clojure hobbyist I feel like all of these points
| are off? Between 4clojure, clojuredocs and the slack channel
| and the surprising number of books available, the onboarding
| and docs are great. And when I think of my favorite lang
| evangelists, hickey and nolen are absolutely #1 and #2, and
| have influenced me heavily, despite my day job not involving
| Clojure at all.
| lib-dev wrote:
| Those talks inspired far more than Clojure itself. It sort of
| started this movement toward simplicity as a value.
| frou_dh wrote:
| If that's the case then all the people running around
| praising the ""simplicity"" of golang got the wrong end of
| the stick completely from Rich's classic presentations.
| [deleted]
| moomin wrote:
| The thing is, Hickey was entirely right to reject this idea
| of "Simplicity" being the same thing as "Easy". But he then
| decided to conflate in "comprehensible" which it turns out
| is very much a matter of aesthetics.
|
| Turns out if you really focus on composability above other
| concerns you get Haskell.
| frou_dh wrote:
| > But he then decided to conflate in "comprehensible"
| which it turns out is very much a matter of aesthetics.
|
| Did he? I seem to remember a quip in one of the
| presentations about German not being comprehensible to
| him being his own problem, because he never learned
| German.
| sooheon wrote:
| In Hickey's world comprehensible is a subset of easy.
| tikhonj wrote:
| "Easy" vs "comprehensible" is exactly the trade-off
| Haskell makes: it might be difficult to learn, but it's
| easy to reason about once you learn it. (Of course, both
| sides of that equation come with their own caveats...)
| bvanderveen wrote:
| From experience:
|
| Datomic Cloud is slow, expensive, resource intensive, designed in
| the baroque style of massively over-complicated CloudFormation
| astronautics. Hard to diagnose performance issues. Impossible to
| backup. Ran into one scenario where apparently we weren't quick
| enough to migrate to the latest version, AWS had dropped support
| for $runtime in Lambda, and it became impossible to upgrade the
| CloudFormation template. Had to write application code to
| export/reimport prod data from cluster to another--there was no
| other migration path (and yes, we were talking to their
| enterprise support).
|
| We migrated to Postgres and are now using a 10th of the compute
| resources. Our p99 response times went from 1.3-1.5s to under
| 300ms once all the read traffic was cut over.
|
| Mother Postgres can do no wrong.
|
| Still, Datomic seems like a cool idea.
| lgrapenthin wrote:
| As someone who is using Datomic Pro in production for many
| years now I must agree with you. One time I began a project
| with Datomic Cloud and it was a disaster similar to what you
| described. I learned a lot about AWS, but after about half a
| year we switched to Datomic Pro.
|
| There were some cool ideas in Datomic Cloud, like IONs and its
| integrated deployment CLI. But the dev workflow with Datomic
| Pro in the REPL, potentially connected to your live or staging
| database is much more interactive and fun than waiting for
| CodeDeploy. I guess there is a reason Datomic Pro is the
| featured product on datomic.com again. It appears that
| Cognitect took a big bet with Datomic Cloud and it didn't take
| off. Soon after the NuBank acquisition happened. That being
| said, Datomic Cloud was not a bad idea, it just turned out that
| Datomic Pro/onPrem is much easier to use. Also of all their
| APIs, the "Peer API" of Pro is just the best IME, especially
| with `d/entity` vs. "pull" etc.
| ithrow wrote:
| I guess this is why datomic.com front page now defaults to
| datomic pro and not cloud.
| JulianWasTaken wrote:
| I don't doubt your story of course, and I love Postgres, but
| comparing apples to oranges no?
|
| Datomic's killer feature is time travel.
|
| Did you simply not use that feature once you moved off Datomic
| (and if so why'd you pick Datomic in the first place)? Or are
| you using Postgres using some extension to add in?
| ithrow wrote:
| Datomic's 'time travel' is an audit feature, not something
| for your application/business logic to depend on. Performance
| reasons make it impractical, unless you only have like 10
| users and very little data.
| JulianWasTaken wrote:
| That's certainly not how it sells and markets itself.
|
| The first feature on benefits (and the only reason I've
| ever heard Datomic brought up and/or considered it myself
| for production workflows) is using that stuff in
| application workflows:
| https://docs.datomic.com/pro/time/filters.html#history
|
| Could be you're saying it in fact doesn't work well
| performance-wise, that'd (surprise me but) certainly
| explain why it's not more popular -- but I think it's clear
| it _wants_ you to use this as an application feature.
| newlisp wrote:
| Welcome to sales tactics ;)
|
| Datomic is great but as another commenter said, is good
| for "small-ish backoffice systems that never has to be
| web scale". You almost probably can rely on querying
| history for internal applications. I think their primary
| market was for companies to use it internally but they
| never made this clear.
| xmlblog wrote:
| > "small-ish backoffice systems that never has to be web
| scale". Doesn't production use of Datomic by Nubank and
| Netflix (to mention just two examples) belie this
| assertion?
| bvanderveen wrote:
| We implemented it in Postgres with 'created_at' and
| 'deleted_at' columns on everything and filtering to make sure
| that the object 'exists' at the time the query is concerned
| with. Changes in relationships between objects are modeled as
| join tables with a boolean indicating whether the
| relationship is made or broken and at what time.
|
| Our data model is not large and we had a very complete test
| suite already, so it was easy to produce another
| implementation backed by postgres, RAM, etc.
| wwweston wrote:
| Yeah, it seems you could be able to substitute thoughtful
| schema design avoiding updates/deletes for time-travel as a
| feature.
|
| I wonder if anyone has made a collection of reference
| examples implemented this way (and in general think that a
| substantial compendium good examples of DB schema and
| thinking behind them could be worthwhile).
| twic wrote:
| I'm moderately confident you could mechanically transform
| a time-oblivious schema into a history-preserving one,
| and then write a view on top of it which gave a slice at
| a particular time. Moderately.
| ysleepy wrote:
| That is essentially what MVCC does.
| twic wrote:
| That is an extremely good point.
| pjot wrote:
| It's called a slowly changing dimension. In this example,
| it's a type-2.
|
| https://en.m.wikipedia.org/wiki/Slowly_changing_dimension
| rehevkor5 wrote:
| Maybe search around on bitemporal database table
| modeling.
| btown wrote:
| https://www.postgresql.org/docs/11/contrib-
| spi.html#id-1.11.... discusses a model for implementing time
| travel in Postgres <12 using SPI. https://git.postgresql.org/
| gitweb/?p=postgresql.git;a=commit... discusses why it was
| removed in Postgres 12 - it seems logical that it's more
| maintainable to implement in plpgsql, though as far as I can
| tell there aren't off-the-shelf implementations of this.
|
| We use https://django-simple-
| history.readthedocs.io/en/latest/ (with some custom tooling
| for diff generation) for audit logs and resettability, and
| while you can't move an entire set of tables back in time
| simultaneously, it's usually sufficient for understanding
| data history.
| avodonosov wrote:
| Why backups were impossible? Couldn't you backed up the storage
| resources?
| outworlder wrote:
| Are they _forcing_ you to use CloudFormation? Or is it just the
| officially supported mechanism?
|
| > Mother Postgres can do no wrong.
|
| I'll say that Postgres is usually the answer for the vast
| majority of use-cases. Even when you think you need something
| else to do something different, it's probably still a good
| enough solution. I've seen teams pitching other system just
| because they wanted to push a bunch of JSON. Guess what, PG can
| handle that fine and even run SQL queries against that. PG can
| access other database systems with its foreign data wrappers(ht
| tps://wiki.postgresql.org/wiki/Foreign_data_wrappers).
|
| The main difficulty is that horizontally scaling it is not
| trivial(although not impossible, and that can be improved with
| third party companies).
| ggleason wrote:
| > Datomic Cloud is slow, expensive, resource intensive,
| designed in the baroque style of massively over-complicated
| CloudFormation astronautics. Hard to diagnose performance
| issues. Impossible to backup.
|
| You should give TerminusDB a go (https://terminusdb.com/), it's
| really OSS, the cloud version is cheap, fast, there are not
| tons of baroque settings, and it's easy to backup using clone.
|
| TermiusDB is a graph database with a git-like model with
| push/pull/clone semantics as well as a datalog.
| elesbao wrote:
| nice. now everyone can experiment the pain of running s3+pgsql+a
| huge blob of binary using container ram ! /rant - it's an awesome
| piece of software regardless.
| jchw wrote:
| Not complaining about the actual announcement itself here: seems
| pretty sweet all things considered, But: the "Is it Open Source?"
| section should lead with "No." It's not a complicated question,
| and it's not a complicated answer. I think it's weird to talk
| about having "all the same rights" without explaining why that
| matters particularly (it does matter, it's just not explained
| much!) but it is somewhat tangential to the question being posed
| which has a very clear and straightforward answer.
|
| I hope more companies consider this unusual arrangement at least
| as an alternative to other approaches. Permissively licensed
| binaries can come in handy, though it certainly comes with it's
| risks. For example, Microsoft released the binaries for its
| WebView2 SDK under the BSD license; this is nice of course, but
| the side-effect is that we can (and did) reverse engineer the
| loader binary back to source code. I suspect that's unlikely to
| happen for any substantially large commercial product, and I am
| not a lawyer so I can't be sure this isn't still legally dubious,
| but it's still worth considering: the protections of a EULA are
| completely gone here, if you just distribute binaries under a
| vanilla permissive open source license.
| daveguy wrote:
| Given the recent bait and switch moves by many companies from
| free-for-everyone open source to free-for-users-only (eg apache
| to agpl), it seems like doing this with "binaries only"
| practically admits to a bait and switch plan.
| charesjrdan wrote:
| There are also similar datalog immutable databases with fully
| open source codebases out there too like https://www.xtdb.com/
| or https://datahike.io/
| xpe wrote:
| Saying "no" also would provide a nice opportunity for Nubank to
| explain why.
|
| To some, the answer is "open source" no matter the question.
| Hello wagging tail, meet dog.
| thomastjeffery wrote:
| They lead with, "The Datomic binaries are being released under
| the Apache 2.0 license."
|
| I can feel the internal open vs. closed source argument from
| here.
| kevincox wrote:
| I felt the exact same thing. I was pretty sure the answer was
| "No" but they were too chicken to write it.
|
| Were they hoping that people wouldn't notice?
| a2800276 wrote:
| You'd think they could have just left that question out of
| their FAQ and licensed it with a "free-as-in-beer" click-
| through license.
| nerdponx wrote:
| Probably. They were hoping that the less-informed (like me)
| would see "The Datomic binaries are being released under the
| Apache 2.0 license" and think "Datomic is relicensed under
| Apache 2.0".
| sneak wrote:
| It worked for Docker Desktop and BSC.
|
| The products even have github repos! There's just no source
| in them.
|
| It's open source cosplay.
| unionpivo wrote:
| > It's open source cosplay.
|
| I am stilling that phrase. It's perfect.
| MrGilbert wrote:
| I'm not sure, but I think from a marketing perspective, you do
| not want to write "No" anywhere. I might be wrong, and I'd love
| if someone with knowledge in this area could answer. It's
| something I recall from the back of my mind...
| JoshTriplett wrote:
| Dishonesty and subterfuge are _bad marketing tactics_.
| newswasboring wrote:
| Is it though? Seems to me that most marketing today is
| subterfuge.
| thomastjeffery wrote:
| Is most marketing good? I don't think so.
| newswasboring wrote:
| I don't know what you are calling "good". That is a super
| loaded word. I would say it is effective though. The
| baseline evidence for that is how much money gets spent
| in that industry, I guess.
| JoshTriplett wrote:
| > I would say it is effective though.
|
| Really depends on your metrics. Very little of it builds
| long-term trust that didn't already exist. Much of it
| abuses long-term trust.
|
| See the discussion on
| https://news.ycombinator.com/item?id=35590734
| thomastjeffery wrote:
| > The baseline evidence for that is how much money gets
| spent in that industry, I guess.
|
| I can't imagine a clearer example of circular reasoning.
|
| I can lift exactly as much weight as I decide to put on
| the barbell.
| newswasboring wrote:
| While I see your point, please note people actually
| spending money don't just look at how much money is in
| the industry. They have internal metrics and can track
| performance of individual marketing campaigns. I called
| it a baseline argument because I'm not a marketing expert
| so this it the only real KPI __I__ understand.
| switchbak wrote:
| Marketing to developers is also decidedly different than
| for non devs. We've been baited and switched, and screwed
| over a million times (thanks Google). It takes a lot of
| trust building to get me to trust any organization.
|
| I especially don't trust free shit if I don't have access
| and control of the future of the code. Even then it's not a
| sure thing.
| Timwi wrote:
| Being a marketing tactic makes it more scummy, not less.
| nerdponx wrote:
| I didn't realize it was possible to release binaries under a
| different license from the source code that generated them. In
| this case, is the "source code" just the physical machine code
| or bytecode in the binary?
| jchw wrote:
| Disclaimer; I'm not a lawyer, nor do I play one on TV.
|
| A copyright license is a copyright license: in theory, all a
| copyright license does is give you additional rights to use
| something. Using a license like Apache 2 for binaries is
| somewhat unconventional, but it's totally possible. It
| (obviously) does not give you access to the source code, and
| I think this could never work with the GPL and other copyleft
| licenses because they use wording that implies you need to
| distrubute the source code, which you don't have.
|
| The copyright owner, of course, has ownership, so their
| obligations don't really change by virtue of giving someone a
| copyright license. As far as I know, they could give someone
| a license to use something that is completely invalid and
| could never actually be used, and they can definitely do
| things like stop distributing under one license and switch to
| another. They own the source code, and they own the binaries
| (I believe the binaries would be considered a sort of
| derivative work in copyright terms, but again, not a lawyer.)
| So when they distribute a _binary_ under a given license, it
| 's unrelated to any particular distribution of _source code_.
| The only time this gets complex is when the ownership of a
| asset is split among many disparate parties, at which point
| everyone is pretty much beholden to the copyright licenses;
| like open source projects without CLAs. But if they own the
| source code entirely, they could, for example, distribute
| some source code under GPL, but then distribute modified
| binaries under a commercial license with a EULA, and not
| redistribute the modified source code, since it 's their code
| to license to others, not a license they are subjected to
| themselves.
| remram wrote:
| You can attach any license text to anything, but most open-
| source license make little sense when applied to binaries.
| Like in this case, the Apache 2 license doesn't make
| distinction between the source and binary, referring to both
| as "the Work":
|
| > You may reproduce and distribute copies of the Work or
| Derivative Works thereof in any medium, with or without
| modifications, and in Source or Object form, provided that
| (...)
|
| Applying this only to their binaries directly contradicts
| what the license says.
| squeaky-clean wrote:
| I suppose you could modify the binaries directly and
| redistribute and it would be legally allowed? Not like
| anyone is going to do that though.
| TheCoelacanth wrote:
| If you think about it, that's happening every time that you
| get a closed-source binary distributed to you. They're giving
| you a license to the binary, but not to the source.
|
| It's certainly weird for the binary license to be Apache,
| rather than some proprietary EULA, though.
| assbuttbuttass wrote:
| I am not a lawyer, but doesn't the Apache license specifically
| grant the right to redistribute the source code?
|
| > You may reproduce and distribute copies of the Work or
| Derivative Works thereof in any medium, with or without
| modifications, and in Source or Object form
| mbreese wrote:
| But what if you never had the source form? You can't
| redistribute what you never had...
|
| This is actually an interesting question. But I can't see how
| a binary only distribution would be in the spirit of the
| Apache license.
| jrmg wrote:
| It's runs on a JVM, right? Presumably it could be
| decompiled and cleaned up (might be a massive task - but
| possible), and the reconstructed source would fall under
| the Apache license.
|
| What a weird choice to make.
| ilc wrote:
| It is the very reason the license exists.
|
| It is in the spirit and the letter of the license to do
| binary only distribution.
|
| Why do you think so many companies are pushing the Apache
| License 2.0 over the GPL?
| mbreese wrote:
| I thought the reason was the explicit patent language and
| lack of license virality.
|
| The Apache license 2 is pretty clear that binary only
| distribution is allowed, but I think it's also clear that
| the assumption is that source is available in some form.
| Otherwise, why would you care about derivative works?
|
| As is, it would be possible to decompile the JVM code
| into _something_ resembling source code and then
| distribute that with or without modification. Which just
| seems odd to me.
| erichocean wrote:
| Eh, it's Java bytecode and it's Apache 2. So you can patch
| Datomic and extend it without breaking the license.
| slim wrote:
| You can also probably decompile it
| ithrow wrote:
| I wonder if public benchmarks are now allowed with the
| binaries.
| mst wrote:
| I guess NuBank (Cognitect's owners) have concluded that the paid
| licensing business wasn't worth the hassle compared to having the
| developer time involved spent on other things.
|
| Releasing only binaries, while I understand people being grumpy
| about it, seems like an interesting way of keeping their options
| open going forwards. Since it was always closed source, it now
| being 'closed source but free' is still a net win.
|
| The Datomic/Cognitect/NuBank relationship is an interesting
| symbiotic dynamic and while I'm sure we can all think of ways it
| might go horribly wrong in future I rather hope it doesn't.
| motoboi wrote:
| Very probably they understood that having a property database
| makes hiring and onboarding more difficult than necessary.
|
| Open sourcing the database helps on that.
| elteto wrote:
| They didn't open source the DB, just the binaries.
| remram wrote:
| How can you "open source" something that doesn't include
| the sources?
| Thorrez wrote:
| Yeah, they didn't open source anything. They just made it
| free.
| elteto wrote:
| Ah! Yes, but not quite! It's not freeware. The binaries
| are technically open sourced, you can do with them as you
| please within the confines of the Apache license.
| elteto wrote:
| Well, _technically_ you are now free to modify the binary
| and redistribute the result as per the Apache 2.0
| license. That's different than giving something as
| freeware, which would not allow/cover
| modification/redistribution.
| croes wrote:
| That's parent's point, they didn't. They only made the
| binaries available under the Apache 2.0 license
| bananapub wrote:
| they haven't open sourced the database though?
| jcadam wrote:
| The licensing was the biggest thing hurting Datomic adoption.
| This is a smart (albeit late) move.
| rbalicki wrote:
| If I recall correctly, Datomic gives you the ability to query the
| database at a given timestamp. Are there other DBs with this
| feature that folks are aware of?
| dangets wrote:
| Link comment in a similar HN discussion:
|
| https://news.ycombinator.com/item?id=14715279
| activitypea wrote:
| What is the benefit of having it closed source?
|
| My view is that Datomic is a novel upstart in the persistence
| space. Most of their competition - Postgres, Mongo, Cassandra -
| is open-source, so they're just shooting themselves in the foot.
| The "pay us extra for convenient hosting and consulting" model
| isn't threatened by open-source in the slightest.
|
| The only thing I can think of is that they're trying to compete
| with Oracle/Db2/SQL server, but I can't imagine an enterprise
| eyeing any of those solutions ever giving Datomic a chance.
| kragen wrote:
| sounds like they're not releasing the source code, just the
| binaries, even though the binaries are under the apache license
|
| so, less than useful if you want to study and modify datomic; you
| may have the _legal_ "right to repair" but not the practical
| possibility
| nXqd wrote:
| amazing piece of work, it's nice to see it's free.
| warthog wrote:
| Wow I wonder what their incentive is in making this public and
| free
| spapas82 wrote:
| It seems that they give the binaries for free but they won't
| release the source code. Can somebody explain to me what's the
| point of keeping the source closed in this case? I really can't
| think of any reason
| stefncb wrote:
| Licensing issues, keeping the door open to making it not free
| again, greed, lack of understanding from
| management/lawyers/whatever, not wanting to deal with
| contributions (though here you can do what SQLite does), false
| sense of security, etc.
| harperlee wrote:
| Perhaps security by obscurity, it being now a proprietary
| component of a bank?
| xpe wrote:
| There are valid reasons not to release the source code that
| have nothing to do with "security by obscurity": legal,
| various notions of "control", and more
| harperlee wrote:
| And I'd add that security by obscurity is also a valid
| reason. It's bad as a standalone strategy, but good as a
| complementary strategy.
|
| Related: https://news.ycombinator.com/item?id=24444497
| xpe wrote:
| Nubank's goal to keep the Datomic source code private
| remains secret is based primarily on IP law and internal
| security controls (on employees, contractors, and
| possibly obfuscating compilation). Disagree?
| [deleted]
| harperlee wrote:
| > Disagree?
|
| No idea! Just speculating...
| xpe wrote:
| > And I'd add that security by obscurity is also a valid
| reason. It's bad as a standalone strategy, but good as a
| complementary strategy.
|
| As the thread you link mentions, the phrase "security by
| obscurity" historically means (more of less) "security
| primarily by obscurity". But sometimes this point gets
| lost. The thread you mention is interesting.
|
| Wikipedia:
|
| > Security through obscurity (or security by obscurity)
| is the reliance in security engineering on design or
| implementation secrecy as the main method of providing
| security to a system or component.
|
| Summary:
|
| Layers of security (which can include a wide range of
| techniques, including obfuscation, etc): useful, because
| delaying attacks and/or making them less likely is
| useful.
|
| Obscurity as a main method: theatre, because it often
| leads to self-deception about the true risks involved
| harperlee wrote:
| Sorry, we're both editing at the same time :) I added a
| related link to the parent comment.
| xpe wrote:
| Yep :) That's a great thread, thank you!
| xpe wrote:
| > I really can't think of any reason
|
| What have you thought about or read so far?
| vrglvrglvrgl wrote:
| [dead]
| dustingetz wrote:
| is Datomic Cloud used by Nubank?
| _bohm wrote:
| Nubank bought Cognitect/Datomic a few years back, so they own
| it I believe
| casion wrote:
| Heavily according to people who work there. They appears to be
| a conj talk about it today.
| AzzieElbab wrote:
| Congratulations to Rich Hickey's children!! I hope your college
| experience was excellent. Disclaimer: that is how Rich explained
| why Datomic stayed closed source.
| rektide wrote:
| It notably powers Roam, a kind of interesting notes/mini Notion
| product.
|
| There's a reasonably interesting writeup of the tech details that
| helps show off Atomics value some,
| https://www.zsolt.blog/2021/01/Roam-Data-Structure-Query.htm...
| https://news.ycombinator.com/item?id=29295532
| moorg wrote:
| For those who haven't followed the story:
|
| 2007 - the Clojure programming language is announced by Rich
| Hickey and gains quite a bit of traction over the next 5 or 6
| years. It never becomes a "top 5" language, but it could still
| today be arguably considered a mainstream language. It's been
| endorsed as "the best general purpose programming language out
| there" by "Uncle" Bob Martin[1] (author of Clean Code) and Gene
| Kim[2] (auther of The Phoenix Project, the seminal DevOps book).
| The fact that Rich spent two years working on it without pay and
| without the commercial backing many other languages enjoy is a
| real testament to his commitment and his vision. A Clojure-
| related emacs package[3] quotes Rich when it starts a REPL:
| "Design is about pulling things apart."
|
| 2012 - the Datomic database is announced by Rich Hickey's
| company. The database is praised for its ingenuity and its "time
| travel" features. It was designed to be deployed anywhere in the
| beginning, but, over time, it became difficult to deploy outside
| of AWS environments and even the AWS deployment path was quite
| cumbersome--the Datomic marketing page used to feature a maze-
| like diagram of all the AWS-specific features needed to make the
| thing work (it would be nice to find a link to that picture); I'd
| think most companies would have trouble digesting that and
| integrating it into their technology "stack".
|
| 2020 - Nubank (a Brazilian fintech backed by at least one US
| venture firm and a large production user of Datomic) acquires
| Rich Hickey's company. It appears Datamic never gained much use
| outside of a handful of companies. Making it free of charge
| (2023) may be the cost-effective thing to do in such a situation
| if it costs more to handle billing and payments than are brought
| in. The reason they're not releasing the source code could be
| legal one or simply the fact that open sourcing a large piece of
| software takes a lot of effort--something a for-profit financial
| services company like Nubank doesn't prioritize (rightly so).
|
| 1: https://blog.cleancoder.com/uncle-
| bob/2019/08/22/WhyClojure.... 2:
| https://itrevolution.com/articles/love-letter-to-clojure-par...
| 3: https://github.com/clojure-emacs/cider/blob/master/cider-
| uti...
| lgrapenthin wrote:
| The 2012 section seems not correct. In the time between 2012
| and 2020 I deployed Datomic in various non AWS environments.
| Datomic was never particularly tied to AWS. I think your
| timeline also misses Datomic Cloud, which was an AWS exclusive
| product that launched much later than 2012.
| NickBusey wrote:
| Free as in beer. Not free as in speech.
|
| > Is it Open Source?
|
| Datomic binaries are provided under the Apache 2 license which
| grants all the same rights to a work delivered in object form.
|
| Datomic will continue to be developed at Nubank, where it is a
| critical piece of our infrastructure.
| LukeEF wrote:
| There are already some open source alternatives to datomic.
| TerminusDB (https://github.com/terminusdb/terminusdb) for
| example is implemented in prolog (and Rust) so has the datalog
| variant query power that makes datomic so powerful. If you want
| free as in speech (thou I love free beer).
| filoeleven wrote:
| XTDB is also worth mentioning, especially since they're on
| the HN front page with a v2 early access announcement. There
| are differences in how they do things. I can't meaningfully
| comment on business usage of either or what the trade-offs
| between them are.
|
| https://news.ycombinator.com/item?id=35733515
| mqus wrote:
| > perpetual, worldwide, non-exclusive, no-charge, royalty-free,
| irrevocable copyright license to reproduce, prepare Derivative
| Works of, publicly display, publicly perform, sublicense, and
| distribute the Work and such Derivative Works in Source or
| Object form.
|
| Doesn't this mean, that, as soon as I (somehow) get hold of the
| source code, I can distribute it as I want?
| oh_sigh wrote:
| Probably not, because the source is not a derivative. Having
| said that, if you decompile the binary I bet you could
| distribute that source.
| hlship wrote:
| That would be very ugly source, as Datomic is written in
| Clojure and AOT compiled to Java bytecode. Due to the
| architecture of Clojure (especially, the use of macros) it
| is not exactly possible to work backwards from JVM bytecode
| to anything that looks like the original source code. It's
| not like Java where a clever decompiler can exploit output
| patterns generated by the Java compiler to make reasonable
| guesses at the structure of the source code.
|
| But this is all besides the point; Datomic is now free (as
| in beer) with a great license (Apache 2.0). You can use
| this amazing tool for free, and you have as much need to
| look at the source to do so as you might need to look at
| PostgreSQL's source.
|
| Some of us have been hoping for this day since Datomic was
| first announced, but even as an insider (I have been
| working at NuBank NA for less than a year) I was stunned at
| the speed with which this decision was made and
| implemented.
| cjbprime wrote:
| "distribute the Work [..] in Source [..] form"
| oh_sigh wrote:
| I took that to mean the form provided by the authors - eg
| the "binary source"
| stonemetal12 wrote:
| They didn't license the source form to you, so still no.
| montroser wrote:
| So...no, it is not open source. I wish they would just answer
| that in a straightforward way.
|
| "No, the source is not available, and the product will continue
| to be developed by us, internally. However, binaries are
| provided..."
| wcerfgba wrote:
| Yeah the answer in the page is a total meme. Kind of
| disappointing, since I like Datomic a piece of tech. :(
| simonw wrote:
| I find that answer confusing. I don't think I've ever seen
| binaries being licensed under Apache 2 without the relevant
| source code before.
| chii wrote:
| It gives the licensee the ability to distribute the binary,
| use or include it in their products in the same way as an
| open-source product. It just merely prevents modification
| without decompiling (which i assume is not easy given it's
| clojure, not to mention obfuscation?). And presumably it
| makes it less likely someone would just produce a competing
| product if they should choose to re-monetize it?
| ingenieroariel wrote:
| I saw Fabrice Bellard do it this year (MIT): The CPU version
| is released as binary code under the MIT license. The GPU
| version is commercial software. Please contact fabrice at
| bellard dot org for the exact terms.
|
| https://bellard.org/ts_server/
| a2800276 wrote:
| Yeah, it's a complete bullshit move. Mongoose OS (an embedded
| iot Plattform not the db) does something similar. It's
| extremely weasely and doesn't instill trust at all.
| xpe wrote:
| Trust is not the same for everyone. One model of trust is:
| A trusts B to do C.
|
| Nubank is releasing the binary permissively. You might
| _want_ more, but this is not a breach of trust.
|
| Datomic has been around for more than 10 years, so there is
| ample data to base expectations.
| frou_dh wrote:
| [flagged]
| Pet_Ant wrote:
| There is nothing wrong with saying "It is not open source
| but you can freely use the binaries". That is the same
| thing, but upfront about it, but this feels like open-
| source-washing.
| a2800276 wrote:
| Nothing wrong with that at all. But that's not what was
| said. Answering the question (that you posed to yourself
| in your own FAQ): "Is it Open Source?" by stating: "we've
| licensed the binary using an Open Source license" seems a
| bit disingenuous. A more matter-of-factly answer would
| have been: "No".
| [deleted]
| adamfeldman wrote:
| What is Datomic, you ask? It's a database written in Clojure.
| https://hn.algolia.com/?q=datomic Datomic is an
| operational database management system - designed for
| transactional, domain-specific data. It is not designed to be a
| data warehouse, nor a high-churn high-throughput system (such as
| a time-series database or log store). It is a good fit for
| systems that store valuable information of record, require
| developer and operational flexibility, need history and audit
| capabilities, and require read scalability.
|
| (via https://docs.datomic.com/pro/getting-started/brief-
| overview....)
| [deleted]
| mbesto wrote:
| For 90% of the web devs that just spin up Postgres/MySQL, why
| would you use Datomic over that?
| fulafel wrote:
| A tangent but it would be interesting to see survey data of
| how many devs default reach for SQL first these days. A lot
| of people use various other kinds of DB models which are
| preceived to have smoother learning curves.
| [deleted]
| roguas wrote:
| You have to add a lot of scaffolding to postgres to make it
| semi-immutable. datomic just is, wanna know previous user
| email, just go back and see. Out of the box, without thinking
| about it.
| evantbyrne wrote:
| Immutability is certainly tempting for certain kinds of
| data. Does it handle use-cases where data needs to be
| deleted though? i.e., privacy compliance.
| [deleted]
| mcbits wrote:
| It looks like they call that excision, which leaves
| behind a breadcrumb saying something was deleted and
| which can't itself be deleted.
| dgb23 wrote:
| Temporality in general becomes super handy if you have
| something like reports that need to be consistent across
| time. Or if you want to ask questions about the past. Or
| questions about the future without affecting the present.
| panick21_ wrote:
| Because its a different model of integrating your database
| and your app.
|
| It allows you to write queries in a pull style, it can be
| trigger based, datalog or raw index access. Its by default
| immutable and allows historical query. It allows meta data on
| the transaction themselves.
|
| A lot of the time the user builds much of that himself or
| relays on frameworks to do it.
| dgb23 wrote:
| That's not easy to answer. It's a question of:
|
| - mutable data vs immutable data
|
| - tables, row based vs tripple store, attribute based
| (EAV/RDF)
|
| - table schemas vs attribute schemas
|
| - relational connections vs graph connections
|
| - SQL vs datalog
|
| - nested queries vs flat queries and rules
|
| - remote access vs client side index
|
| etc.
| alecco wrote:
| Just the temporal properties alone make it very useful for
| anything where it matters like billing, finance, inventory.
| Else you are in views/schema/indexing hell to do it on top of
| SQL.
|
| There is some SQL temporal support but it's not great and
| varies a lot. Also since it's not native to the storage it
| has a lot of complexity issues under the rug making it not
| great.
|
| Many financial systems use Event Sourcing (OOP + ORM). I had
| to suffer this at a previous employer.
|
| See https://vvvvalvalval.github.io/posts/2018-11-12-datomic-
| even...
| slaymaker1907 wrote:
| The temporal support seems handy, but time is still going
| to be really tricky for financial systems. Datomic only
| covers what the physical state of the database was at a
| particular time, but there's also the effective legal time
| (maybe a payment was dated a day before the system actually
| processed it) as well as requirements to remove data after
| a period of time (including point in time stuff).
| augustl wrote:
| Indeed, it depends a lot on the domain. Datomic only has
| "technical" database time, and doesn't have any built-in
| way of modelling domain time. You can set the transaction
| timestamp manually when you write, but you can't set it
| to be earlier than the latest transaction that was
| committed. So, if you want your domain modelling to
| piggyback on Datomic time travelling, you can only do
| things like delaying writes for, say, an hour, and hope
| you have all the data by the time you commit to db.
| nlitened wrote:
| There's a bitemporal Datomic-like database from JUXT that
| does exactly that, I believe https://www.xtdb.com
| riku_iki wrote:
| > Just the temporal properties alone make it very useful
| for anything where it matters like billing, finance,
| inventory.
|
| you can easily create datamodel to have this in SQL dbs:
| create table transaction_history(..., execution_time
| timestamp);
| augustl wrote:
| Fyi, Datomic lets you look at the entire database at any
| point in time, as an immutable value. Also, you can
| annotate transactions with metadata, and query for "which
| tx wrote this specific value for this row/column" and
| look at custom metadata you added to the tx to reason
| about your system. Doing all of that in SQL is not
| trivial, to say the least.
| tasuki wrote:
| This is not an answer, it's the beginning of a question.
| Yes sure, we know `create table` and we know it's a good
| idea to record the execution timestamp. What exactly do
| you put in the place of the three dots?
| endisneigh wrote:
| The price is certainly right, but has anyone used this in
| production? What was your experience like?
| Naomarik wrote:
| https://sayartii.com/ is using Datomic stored on postgres that
| I have set up on Linode. That was all done back in 2020 and
| haven't needed to touch it. Site now gets ~180M monthly reqs
| and I store an enormous amount of analytic data on Datomic (was
| supposed to be temporary) so users can see impressions/clicks
| per day for each advertisement. I'm surprised it's still
| working.
|
| Development experience is extremely nice using clojure. I've
| used it for two other projects and has been very reliable. My
| latest project didn't really need any of its features compared
| to a traditional rdbms but I opted for it anyways so I don't
| have to write sql.
| mardifoufs wrote:
| Was it expensive to run? Now that it is free, I guess that's
| less of a concern!
| ddellacosta wrote:
| My personal experience was using Datomic backed by DynamoDB, at
| the second Clojure company I worked at. In particular I
| remember feeling like it was hard to anticipate and understand
| its performance characteristics in particular, and how indices
| can be leveraged effectively. Maybe if we had chosen Postgres
| as a backing store that would have been better? I dunno.
|
| Using it was pretty nice at the scale of a small startup with a
| motivated team, but scaling it up organizationally-speaking was
| a challenge due to Datalog's relative idiosyncrasy and poor
| tooling around the database itself. This was compounded by the
| parallel challenge of keeping a Clojure codebase from going
| spaghetti-shaped, which happens in that language when teams
| scale without a lot of "convention and discipline"--it may be
| easier to manage otherwise. All of that said, this was years
| ago so maybe things have changed.
|
| At this point I'd choose either PostgreSQL or SQLite for any
| project I'm getting started with, as they are both rock-solid,
| full-featured projects with great tooling and widespread
| adoption. If things need to scale a basic PostgreSQL setup can
| usually handle a lot until you need to move to e.g. RDS or
| whatever, and I'm probably biased but I think SQL is not really
| that much worse than Datalog for common use-cases. Datalog is
| nice though, don't get me wrong.
|
| EDIT: one point I forgot to make: the killer feature of being
| an immutable data store that lets you go back in time is in
| fact super cool, and it's probably exactly what some
| organizations need, but it is also costly, and I suspect the
| number of organizations who really need that functionality is
| pretty small. The place I was at certainly didn't, which is
| probably part of the reason for the friction I experienced.
| hlship wrote:
| Although it is true that "time traveling" queries are
| relatively rare for production needs, the basic architecture
| supports things that many applications really need:
|
| - It is possible to make queries against the database PLUS
| additional data not yet added, that is, "what if" queries
|
| - Having a stable database-as-value is really useful for
| paginating results; you don't have to worry about new values
| being inserted into your results during execution, the way
| you do with traditional databases no longer how long
| (minutes, hours, even days) you take to traverse the data
|
| - Reified transactions makes it possible to store extra data
| with each transaction, trivially, such as who made the update
| and why
|
| - Immutability is amazing for caching at all layers
| xmlblog wrote:
| Newer releases have improved significantly in this area. It's
| now possible to understand perf implications with the
| addition of io-stats[1] and query-stats[2].
|
| [1] https://docs.datomic.com/pro/api/io-stats.html [2]
| https://docs.datomic.com/pro/api/query-stats.html
| raybb wrote:
| I haven't used it but I guess Nubank uses it.
| https://www.youtube.com/watch?v=qIdrT6r77gA
| adamfeldman wrote:
| One example: https://www.datomic.com/nubanks-story.html
| dagw wrote:
| Worth keeping in mind that Nubank owns the company that makes
| Datomic, so that might colour their opinion. On the flip side
| they probably wouldn't have bought the company if they
| thought their product was crap.
| Scarbutt wrote:
| My guess is they bought the company because they were
| already too invested in Datomic. So it was kind of forced
| to minimize risk.
| hoffs wrote:
| Also helps them to tune it for their use cases where
| other users have to rely on closed sourceness of it
| jackrusher wrote:
| Yes, it's used by many companies in production. There's a
| partial list here:
|
| https://www.datomic.com/customers.html
| endisneigh wrote:
| to be honest the testimonials are terrible.
|
| > "Datomic added to DynamoDB was the only option that didn't
| force us to sacrifice features or add the expense of
| developer time. Without it, we would have had to push back a
| lot more, as the features would have been too difficult."
|
| (https://www.datomic.com/the-brigades-story.html)
|
| like, what? effectively useless information.
|
| some of the other testimonials mention keeping revision
| history, which is neat, but why Datomic vs. others? it's
| pretty easy to keep revision history with other databases
| too.
| simtel20 wrote:
| It's not simply revision history, it's a complete record of
| everything with time, without re-architecting your data or
| app. IIRC datomic structures your data so that all
| transactions and state have a time dimension so you can go
| forward or back in time trivially (no special query, no
| temporal sql, etc.)
| motogpjimbo wrote:
| What happens when you have a legal obligation to delete
| or anonymise data for some reason?
| fulafel wrote:
| There's
| https://docs.datomic.com/pro/reference/excision.html -
| but like in other data models you also might choose to
| not store sensitive infromation like PII in cleartext in
| the main DB at all. At least in earlier versions excision
| wasn't supported in the Datomic Cloud version.
| lebski88 wrote:
| Excision still isn't supported for cloud, it is / was on
| their plan but there was never any movement in that
| direction.
| Timshel wrote:
| Not a good look when four out of the six companies behind the
| "customer stories" do not exist anymore (or at least their
| website is dead ...)
| xmlblog wrote:
| Netflix, Facebook (Meta), Nubank, and many others.
| dgb23 wrote:
| https://www.datomic.com/get-datomic.html still seems to show
| licensing fees at the time of this comment.
| thatwasunusual wrote:
| > Datomic's is perfect for probably 90% of small-ish backoffice
| systems that never has to be web scale (i.e. most of what I do at
| work).
|
| I will also argue that 90% of those don't need this. Just by
| seeing the term "web scale" makes me shy off.
| augustl wrote:
| Anecdotally, all the ones I've worked it where I've used SQL
| have needed it. I've always ended up wondering when, why and
| who changed an attribute to its current value, but that's not
| knowable unless you jump through hoops and manually implement
| it.
| thayne wrote:
| > Is it Open Source?
|
| > Datomic binaries are provided under the Apache 2 license which
| grants all the same rights to a work delivered in object form.
|
| That doesn't answer the question at all. I assume the answer is
| no, because otherwise they would just say yes, and have a link to
| the source code somewhere. But that is such a weird, and possibly
| duplicitous way to answer.
| LukeEF wrote:
| There are already a few open-source alternatives that run datalog
| variant query languages. I'd point the curious towards TerminusDB
| [1] and TypeDB [2]. TerminusDB is implemented in prolog (and
| rust) so an alternative with datalog in the heart.
|
| [1] https://github.com/terminusdb/terminusdb [2]
| https://github.com/vaticle/typedb
| martypitt wrote:
| Only the binaries are made available, not the source, which is
| interesting.
|
| I guess they don't claim to be open source, they're claiming to
| be free, which is - in itself - awesome.
|
| Last time I checked, you couldn't push binaries to maven central,
| without also releasing the source. That may have changed.
| casion wrote:
| Maven actually has a tutorial on publishing binaries without
| source. So I assume it's ok when they tell you how to do it.
| martypitt wrote:
| Sure, Maven makes this possible.
|
| But Maven Central has strict rules around what can be
| published there. I just double checked and it's a requirement
| to publish the source as well as the binaries:
|
| https://central.sonatype.org/publish/requirements/#supply-
| ja...
| BaculumMeumEst wrote:
| it seems you're right, but it also says the following, so
| i'm confused on whether it's a hard requirement?
|
| "If, for some reason (for example, license issue or it's a
| Scala project), you can not provide -sources.jar or
| -javadoc.jar , please make fake -sources.jar or
| -javadoc.jar with simple README inside to pass the
| checking. We do not want to disable the rules because some
| people tend to skip it if they have an option and we want
| to keep the quality of the user experience as high as
| possible."
| miroljub wrote:
| They say it's under the Apache 2 licence, so it is open source.
|
| EDIT: I was wrong. They actually released _binaries_ under the
| Apache licence, not the source code. Which is, mildly said,
| deceptive. I don 't even have an idea what that actually means.
| martypitt wrote:
| They say the binaries are being made under Apache 2.
|
| They don't say anything about the source code being
| published. That's why (to me) this is so interesting. I've
| never seen binaries released without source code before.
| stefan_ wrote:
| What is even the point of releasing binaries under Apache
| 2? When I patch the binaries, do I need to release a
| hexdiff too to fulfill my Apache obligations? Very weird.
| politician wrote:
| I suppose you could run it through a Java decompiler and
| clean up the results with an LLM. How long would that
| take? 5 years to make it useful?
| pjmlp wrote:
| We used to call it Public Domain and Shareware (with
| variations like Coffeeware, Beerware, Postware,...)
| a2800276 wrote:
| They licensed the binary under Apache. It's a publicity
| stunt.
| lolinder wrote:
| Making your product available for free isn't a publicity
| stunt, it's a huge step for a business. And, in practice,
| it's not that much different for the average user if only
| the binaries are Apache licensed. When was the last time
| you needed to open up the Postgres source code and modify
| something?
| amluto wrote:
| Never. On the other hand, I have considerable confidence
| that I could do so, and that if something goes wrong with
| upstream development, someone is likely to do so.
|
| If I use a free-binary-but-no-source product, I'm much
| more likely to get stuck.
|
| (Of course, as a regretful MySQL user, I am pretty stuck,
| but largely because MySQL is, in many respects, a
| terrible product. It does, quite reliably, get security
| updates at the kind of general maintenance that keeps it
| working no worse than it ever did.)
| ingenieroariel wrote:
| Today I looked up pgvector's NixOS availability. For the
| past 15 years I have relied on postgis source being
| available and improved by the community for my day to day
| business.
|
| My point is that the option to modify the source results
| in software bein available and community maintained in a
| way that binary only isn't. Even if I change the source
| myself just twice a decade.
| a2800276 wrote:
| If it wasn't a publicity stunt, it certainly had the
| effects of one: I've never heard of Datomic before and
| here they are at the top of hackernews!
|
| > And, in practice, it's not that much different for the
| average user if only the binaries are Apache licensed.
| When was the last time you needed to open up the Postgres
| source code and modify something?
|
| Sure, if you're playing a game it probably doesn't make a
| difference. If I'm building my IT infrastructure on a
| product, tt makes a huge difference if I get a an open-
| source-licensed "binary" or access the to source:
|
| - the package they distribute contains no less than 960
| different jars. Most of those are the standard apache-
| project-everything-and-the-kitchen-sink-style
| dependencies. Say I'd like to update log4j because it
| contains a catastropic vulnerability that datomic decide
| not to fix. (not that that sort of thing ever happens)
|
| - or say Datomic decides to abandon the product
| altogether or goes out of business
|
| - or say I'm not happy with their quality of service
| contract around their DB they support and would like to
| work with a different company
| [deleted]
| lolinder wrote:
| Again, with your hypotheticals--when was the last time
| you needed to do any of that with Postgres or another
| FOSS DBMS?
|
| For the vast majority of use cases, a FOSS DBMS and a
| free-as-in-beer DBMS are indistinguishable. If you're in
| a category where they're not, then don't use Datomic, but
| this is still far more than a publicity stunt.
| a2800276 wrote:
| We must be working in a different world. In all my career
| I've not once worked with a serious business that did not
| have a support contract for their database system open
| source or not.
|
| Most of those had escrow agreements for central closed
| source components with vendors in case the vendor went
| out of business. (obviously only for things perceived as
| critical and from companies with some perceived risk of
| failure).
|
| And god knows how many times have I experienced companies
| biting themselves because they bought into a product that
| turned out not to deliver what was promised after the
| contracts were signed.
| xmlblog wrote:
| Free beer binaries are not mutually exclusive of
| Enterprise support agreements featuring all those things
| you mentioned above _for people that need that_.
| a2800276 wrote:
| Completely agree. I'm fine with a free beer license. The
| context of the post is that the binary is licensed using
| an Open Source license which leads to confusion.
| nightski wrote:
| Rich Hickey started Datatomic (along with Stuart Halloway
| & Justin Gehtland). He also created the Clojure
| programming language and has been on Hacker News numerous
| times with many popular talks. In fact they all have made
| famous contributions.
|
| Many businesses use Microsoft SQL Server or Oracle and
| don't need access to the source. I'm not saying open
| source isn't nice, but it is absolutely not a requirement
| for IT infrastructure.
|
| I'd imagine people rely on many cloud services that are
| in fact, not open source.
| [deleted]
| eternalban wrote:
| Someone (forget who but he worked there) was giving a
| presentation of Datomics in some downtown (NYC) bank circa 2014
| iirc. Per the presenter -- iirc someone asked a specific
| technical question -- even people working for the company don't
| get to see the full source. Only a small team has access to the
| full source, and he said he wasn't one of them.
| JimmyRuska wrote:
| RDFox is worth a try as an alternative, also datalog but C++
| based, has incremental reasoning, and explainability. It's a
| database but also a rules engine that can chain any number of
| rules. As far as I know datomic is unique for its "query the
| database at any point in history" and incremental tracking of
| schema changes, easy to use UDFs, it really shines above other
| databases in that context.
| rafaelturk wrote:
| How datomic is Better/worse that symply using DynamoDB?
| brianwawok wrote:
| Datomic LOOKED cool 10-12 years when it first came out. But they
| started from day 1 with a price, so most people, me included,
| just passed over it.
|
| I think they went way too fast to commercial, and needed to go a
| freemium model to actually get market share.
| xpe wrote:
| This doesn't quite reflect the history. Datomic had various
| free/trial options. They evolved a little bit. Someone who
| watched the pricing and licenses very closely probably could do
| a better timeline than I could.
| brianwawok wrote:
| Right but it was always very clear "you can have it in dev
| for free, but prod is $$$$$". It was not something like "use
| it free in prod as much as you want, or pay us for support"
|
| I had a few projects it would have been cool on, but I just
| did postgres instead and won in the long run.
| blatant303 wrote:
| Datomic is an event-sourced db, and it makes it hard to introduce
| retroactive corrections to the data when your program's semantic
| already rely on using datomic's time travelling abilities: at one
| point you'll need to to distinguish between event time and
| recording time as explained in this excellent blog post:
|
| https://vvvvalvalval.github.io/posts/2018-11-12-datomic-even...
|
| This is why I' rather use XTDB [1], a database similar to datomic
| in spirit, but with bitemporality baked in.
|
| [1] https://www.xtdb.com
___________________________________________________________________
(page generated 2023-04-27 23:00 UTC)