A database value as of a point in time. With asOf, you can reuse existing queries and rules to ask questions about points in time other than the present.
Something that can be said about an entity. An attribute has a name, e.g. :firstName, and a value type, e.g. :db.type/long, and a cardinality.
Assumption that truth is what the database knows. Databases that intend to store data of record typically make the closed world assumption. Datomic adheres to the closed world model.
Object running on a peer that provides access to a database. Programs can use a connection to submit transactions, or to get current or past values of the database to use as data sources for queries.
A covering index contains (rather than points to) the data. Datomic indexes are covering indexes.
Information used to authenticate for a particular task. In accordance with the principle of least privilege, Datomic allows separate credentials for each different activity performed by a running system.
An atomic fact in a database, composed of entity/attribute/value/transaction. Pronounced like "datum", but pluralizes as datoms.
A deductive query system, typically consisting of:
- A database of facts
- A set of rules for deriving new facts from existing facts
- a query processor that, given some partial specification of a fact or rule: finds all instances of that specification implied by the database and rules, i.e. all the matching facts
Datomic's built-in query is an implementation of Datalog.
An extensible data notation. A superset of edn is used by Clojure to represent programs, and it is used by Datomic and other applications as a data transfer format.
Encrypted form of credentials. Datomic encrypts credentials in places like EC2 user data to reduce the threat generic exploits.
a unique identifier external to Datomic. Typical external key types are email address, UUID, and URI. External key attributes should be declared as db.unique/identity.
Period of time bounded by writing index to storage. During an epoch, indexing is done in memory. At epoch boundaries, the in-memory index is merged with the persistent index, and a new persistent index is written to the storage service (without blocking the system).
The complete removal of a set of datoms matching a predicate. Excision should be a very infrequent operation, and should not be used to correct erroneous data.
A binary format that is used everywhere data is serialized by Datomic: on the wire, at rest, and in the segment cache. Fressian is designed to be:
- simple to implement and consume
- compact and fast
- friendly to dynamic and static languages
- compressible in domain-specific ways
Statistics used to measure the health of a running system. By default, Datomic records metrics using Amazon's CloudWatch.
Prefix portion of a keyword used to make the keyword globally unique. Namespaces serve a similar function to table names in a relational store, without imposing any obligations or limitations, e.g. an entity can have attributes from more than one namespace.
A logical grouping of entities in a database. Partitions have unique qualified names. Every entity belongs to a partition that is assigned when the entity is created. Partitions act as a storage hint, so that larger systems can plan ahead for better locality of reference for entities that are frequently accessed together. Partitions are typically coarser grained than relational tables. Partitioning is invisible to the query system, and therefore has no impact on the code you write to access the database.
An attribute that refers to another entity. References always have the value type db.type/ref.
Generic name for transactor/peer/persistence service., e.g. "The process claims the transactor role by placing a well-known value in SDB upon startup." Used in the config tools.
A named group of query constraints, to allow re-use of logic across queries.
The set of possible attributes that can be associated with entities. Only defines the characteristics of the attributes themselves, not which attributes can be associated with which entities.
Subsystem responsible for persistence and nothing else. Datomic is designed so that the persistence layer is pluggable, and so that other functions traditionally associated with persistence are handled elsewhere. In particular, storage is provisioned separately from query and transaction capabilities.
Unique name for a system within an organization. When using DynamoDB for storage, the system id is identical to the DynamoDB table name.
An entity representing a transaction. Every datom in a Datomic database includes the tx that created it, allowing recovery of the entire history of the database. Transactions are automatically associated with wall-clock time, but are otherwise ordinary entities. In particular, application code can make additional assertions about transactions.
An atomic unit of work in a database. All Datomic writes are transactional and have the ACID properties (Atomic, Consistent, Isolated, and Durable).
A data function designed to be run inside a transaction. Transaction functions must take a database value as their first argument, and must return transaction data.
A process with the ability to commit transactions for a given database. At any moment in time, a running database has exactly one transactor, but any number of peers.
Either insert or update an entity, depending on whether the entity already exists. Upsert is implicit in Datomic whenever you make an assertion about an attribute whose unique value is db.unique/identity. Upsert makes it simple to create transactions of the form "Set the first name of the person with SSN 123-45-6789 to "Jon".