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.
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.
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.
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.
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.
Although the Datomic Peer library runs in the JVM, the Datomic Client library provides a lightweight interface to the Datomic Peer Server and can support any language. Cognitect currently provides a Datomic Client library for Clojure, and a Java Client library is forthcoming.
Datomic provides both an in-process peer library and a lightweight client library. If you are trying Datomic for the first time, we recommend that you begin with a client library. A detailed discussion of the differences between Peers and Clients can be found here.
Datomic is not a good fit if you need unlimited write scalability, or have data with a high update churn rate (e.g. counters). At present, Datomic does not have support for BLOBs.
Datomic On-Prem comes in three editions - Datomic Starter, Datomic Pro, and Datomic Enterprise. Datomic Starter Edition enables small production deployments at no cost. Datomic Pro provides ongoing maintenance (software updates) as well as online support. Datomic Enterprise provides 24x7 production support, custom license terms, and integration support. You can read more about the editions here.
Yes! They are completely API compatible. Just change your license key and restart the transactor.
All Datomic On-Prem licenses are permitted to deploy an unlimited number of peers and or clients in whatever configuration is desired. The yearly maintenance renewal provides access to new releases of Datomic as well as access to the Support ticketing system.
Datomic Cloud is the recommended approach for new development on AWS. See the Moving To Cloud guide for more information on the similarities and differences between Datomic Cloud and Datomic On-Prem.
The supported list of Datomic storage engines can be found in the Documentation.
Riak, Couchbase, and Infinispan are considered legacy Datomic storage engines. We provide support for legacy storages for enterprise customers only.
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 independent and scalable Datomic Peers. And, since the data segments stored by Datomic in the storage service are immutable, they are always consistent. Thus, Datomic is well suited for applications that require write consistency and read 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).
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.
Datomic Pro costs $5,000 per system for a perpetual license and 12 months of maintenance. Ongoing maintenance renewal fees are $5,000 per system per year and provide access to the latest versions of Datomic and online support. Once you’ve purchased a license, you will receive a license key by email. You can get the full details on the Get Datomic page.
No. The Datomic license provides unlimited development and testing use (i.e. non-production systems). You can use your production license key on your development and testing systems.
We prefer not to discuss new features prior to their public release.