Excision in Datomic
blog.datomic.com
blog.datomic.com
The other is that it's closed-source, which sadly has not changed. I certainly wouldn't mind paying for commercial usage/support. I can't justify relying on something I have no control over whatsoever when there are so many open source alternatives, however clean and nice I find Datomic's design to be :(
Honest question, I'm curious.
Datomic takes the knowledge that many databases are built like this, and basically designs with that in mind. The ability to say "give me a view of the data as it was 1 month ago" is built into the system from the very beginning, rather than added on later.
I've seen it implemented 2 times in enterprise systems and it works OK, but like all design patterns it's workaround for lacking feature.
Also some dbs (for example Oracle) allows you to do
SELECT * FROM SOME_TABLE WHERE USER_ID = 5 AS OF TIMESTAMP...,
but that's not good enough.While googling I've found from this post: http://www.postgresql.org/message-id/Pine.GSO.4.64.080203152...
this free (?) book - Snodgrass/Jensen "Developing Time-Oriented Database Applications in SQL" - http://www.cs.arizona.edu/people/rts/tdbbook.pdf
Haven't read it, so I'll spend some time through it.
To me this is an interresting thing, since I would like to know whether I can do history tracking of game asssets for game development. E.g. often in our studio someone would like to compare data, how it was before this and what changed. We do have the mechanism, but they are not so ellegant.
Regarding game assets - why not keep them in git or some other cvs? For textual data it has huge additional advantage - you can blame, merge and easily see differences, but even for binary data it can be used.
Don't get me wrong, I like immutable data and I use it over mutable whenever possible (Clojure is my favorite language), but to call it "flawed" is an overreach at best.
No, they are only inaccurate software abstractions of the business abstractions they are supposed to model. People like immutability and reversibility of concepts and that's why they try to apply it in business, law, finance etc.
But the real/natural world, at least from our subjective perspective is not like that. Things in the world are not practically reversible or immutable - you cannot "restore" a deadbody. The real world is loosy and mutable, at least from an agent's perspective. The human brain is so efficient at what it does simply because it just "throws way* (irreversibly!) so much information every second, filtering for just what it needs. A small corner of the world is our "business/finance world" and using immutability and reversibility is great here, but there's way more to computing than implementing business/finances logic and processes in software!.
...if you think about it, classical OOP is inspired from cellular biology (can't find the reference now, some musing of Alan Kay I think...), so it's no wonder why it's such a trouble maker when used to model business logic, it was the wrong tool for the job from the get go. But generalizing that mutable data structures are a bad tool to model and understand the world in general is waaaay overstretched, the world is bigger than "business", and all modeling approaches are equally useful.
If you think I'm wrong about this, I'd appreciate some examples.
Mutability is useful as an optimisation, but I don't think it has much worth as a model.
No, it's not. You cannot mutate any fact! You will never be able to change the fact that Hitler existed, for example. Facts never change.
This is the purpose of Datomic: to store facts. Mutable databases only seem to be interested in maintaining the most recent fact about any particular piece of information.
> Mutable state makes reasoning about program behavior more difficult than necessary.
You could dispute that claim, but bringing up performance characteristics is totally irrelevant to it.
Yet programming in imperative, mutating, mainstream languages is nothing like how code works at the machine level. I understand you're talking about data, but I think the analogy still stands. Or maybe a better one is that a file system or even a database itself is an abstraction of how data is stored on disc.
There are other distributed consistent databases (HBase, RethinkDB, arguably Cassandra if you always use QUORUM, etc.) but neither supports transactions or has a design that seems to me like it easily could.
The storage layer is distributed automatically because it's decoupled from both the transactor and the peer. It's actually pluggable, too... you can use DynamoDB, Riak, Couchbase, Infinispan, Postgres, etc. which all have different performance and availability characteristics.
This is the same person/people that released clojure to the world (as open source). It's not like they're a company with a history of closed proprietary software, they are fully aware of their options, and I'm sure they have their reasons for keeping it closed. Aren't they entitled to do whatever they want with the code they produce without frowny faces all over the comment threads?
This is why the business model of nearly every NoSQL business is to provide commercial support for their open source DB. Examples include Basho (Riak), Datastax (Cassandra), 10gen (MongoDB), RethinkDB, VoltDB and Couchbase. There are a few exceptions (mostly in the very large data space), but the general rule is: if you're promoting a new database, make it open source and sell services/enhancements around it.
Programming languages are different; Clojure likely wouldn't have succeeded were it closed-source.
(BTW, Basho and Datastax seem to have "enterprise" products. Are these closed-source or contain hidden closed-services? And we should keep in mind that DBs like Riak and Hadoop are clones of closed-source DBs. Basho employees even mention that the authors of the Dynamo paper were probably nearly fired for releasing it.)
But if your esoteric programming language or DB (I place datomic in that category because it's very different than anything else out there) becomes unavailable or the price is raised too high you have no choice but to fundamentally rewrite your software. That could be the end of your business.
This is absolutely not to say they should open source it--that's entirely their decision. This is just to explain why many (myself included) feel uncomfortable relying on closed source DBs.
I personally think it's important to weigh the various risks. Keeping in mind there are "opportunity costs". So for example, if I were to choose something like Datomic, it's almost certainly because I predict much greater productivity than alternatives. There are risks to giving that up, which I must consider.
And there are ways to mitigate some risk. Like simply asking what happens if they go out of business. Much like investigating potential failure modes.
Compare this to a database-reliability is tantamount. If there's a weird bug you need to ensure you have amazing support, you have access to dig into the internals and solve the problem yourself, or both.
Datomic comes across as prioritizing functionality over support, e.g. they're closed Source and don't (yet?) have the reputation for Enterprise class support businesses usually look for with closed source DBs. That doesn't mean they'll fail, but I'm curious to see who Datomic's customers will be.
Shameless plug: https://bountyoss.com/
No, why should they? Nobody is entitled to be free from criticism.
Can you really be critical of someone for choosing to close source their own code?
The tech might be cool, the site is awful.
Downvoters: I like Datomic, like Stuart, but the site is crap. First visit had lots of artifacts (content was seemingly above the annoying header), cannot reproduce that now. Right now a huge part of the display is a fixed header, the content is 'unzoomable'. There's no way to say anything nice about that sort of stuff.
http://webcache.googleusercontent.com/search?q=cache:http%3A...
Is that a purposeful pun? Because it confused me.