What is Datomic?
Datomic is a new database system that simplifies the database by separating transactions process, storage and queries, and adopting a simple data model based on facts.
How does it differ from RDBMS?
The primary difference is in the separation of transactions/storage/query. Datomic's data model is based upon a universal primitive relation, of datoms, rather than an arbitrary set of named relations. And the query model, while relational, is based upon Datalog, not SQL. Datomic has weaker constraint capabilities than some RDBMS, but more flexible data modeling. It shares ACID transactions and arbitrary joins.
How does it differ from NoSQL?
Most NoSQL databases drop arbitrary transaction and join capability, and adopt sharding and eventual consistency, in an attempt to deliver arbitrarily scalable writes and reads. They also often have data models not supported by relational logic. Datomic trades off arbitrary write scalability to retain arbitrary transactions and joins, and has a strong data and query model, with arbitrary read and query scaling.
How does Datomic utilize storage engines?
Datomic doesn't manipulate file systems directly. It relies on external storage servers (e.g. SQL) or services (e.g. DynamoDB or key/value stores). It treats them much the same way a traditional database treats a file system, to store blocks representing nodes of its indexes. Datomic does not store items at the datom granularity in storage, it does all of the 'database' representation itself.
How does Datomic provide ACID guarantees?
The transactor serializes all transactions, and each transaction runs against a stable view of the database, and succeed or fail in their entirety. Transactions are not acknowledged until after they are logged in storage. Atomic read/modify/write operations can be performed by database functions, which run on the transactor within the transaction. Note that Datomic can provide ACID guarantees without utilizing read-transactions, nor read locks, due to the presentation to the query engine(s) of the database as an immutable value.
Is Datomic just for JVM languages?
At the moment, yes. We have ideas for how to enable Datomic on non-JVM languages while preserving as much of the embedded power as possible. Stay tuned for future developments.
When is Datomic not a good fit?
Datomic is not a good fit if you need unlimited write scalability, or have data with a high update churn rate (e.g. counters). And, at present, Datomic does not have support for BLOBs.
How do I get started with Datomic?
The easiest way is to download Datomic Free Edition and follow along with the Getting Started Guide. This will give you everything you need to learn the Datomic data model and create databases.
What are the Datomic editions?
Datomic comes in two editions - Datomic Free Edition and Datomic Pro Edition. Datomic Free is free of charge and is redistributable. It is suitable for open source and smaller production deployments. Datomic Pro adds performance and scalability enhancements, as well as support. You can read more about the editions here.
If I build a system on Datomic Free, can I move it to Datomic Pro?
Yes! They are completely API compatible. Just switch to the Pro binaries and change your connection URIs. Use the backup/restore facilities to move your databases from the embedded Free storage to your preferred Pro storage.
Is Datomic Free less tested or patched?
No! Datomic Free is a subset of Datomic Pro, and is built from the same codebase, at the same time. We intend to release Free and Pro at the same times and same revision levels.
Scale, Availability and Durability
How does Datomic handle consistency, availability and scale?
Because Datomic separates the handling of transaction processing and query/read, it can make independent choices for each facility. Transactions favor consistency over availability, and the loss of a transactor will require traditional failover approaches. Queries and reads, however, are serviced by the highly available, replicated and scalable infrastructure of DynamoDB. And, since the data segments stored by Datomic in Dynamo are immutable, they are always consistent. Thus, Datomic is well suited for applications that require write consistency and read scalability.
How does the transactor affect scalability?
The transactor does limit write scaling. However, compared to a typical database server, the transactor doesn't have to handle all the other work normally done by a server (servicing queries and reads, locking, disk sync etc), and many workloads will be supported by this configuration. Datomic doesn’t target the very highest write volumes, as those workloads require different tradeoffs (one or more of: a loss of transactions, queries, or consistency, and/or the need to shard).
Is the transactor a single point of failure?
No. Multiple transactors can be run in standby mode in a single auto-scaling group, each ready to take over in the case of a failing transactor. At no point can data be lost, as no transactions are acknowledged unless written through to the storage service.
How much does Datomic Pro Edition cost?
Datomic Pro is priced per process (i.e. peers + transactors) using the software in production. Once you've purchased a license, you will be given a key that encodes your license details and must be installed into any storage you intend to use. You can get the full details on the pricing page.
Do I have to pay more for development and testing use?
No. Development and testing use (i.e. against non-production storages) does not count against your licensed process limit. You can use the same license key on your development and testing storages.
Can I evaluate Datomic Pro for free before purchasing?
Yes, just download Datomic Pro and request an evaluation key be sent to you.
Are there any discounts?
We believe in up-front and fair pricing, and that everyone should get the same deal, so all of our prices are already discounted and visible. There are no additional discounts available (other than volume-based discounting, as reflected in the pricing).