#### Quick links
**Documentation: Tutorial,
Javadoc**
**Community support: Issues,
Chronicle
mailing list, Stackoverflow,
Chronicle User's group**
### 3 min to understand everything about Chronicle Map
Chronicle Map is an in-memory key-value store designed for low-latency and/or multi-process
applications. Notably trading, financial market applications.
**Features**
- **Ultra low latency**: Chronicle Map targets median latency of both read and write queries of less
than 1 *micro*second in [certain tests](
https://github.com/OpenHFT/Chronicle-Map/search?l=java&q=perf&type=Code).
- **High concurrency**: write queries scale well up to the number of hardware execution threads in
the server. Read queries never block each other.
- (Optional) **persistence to disk**
- **Multi-key queries**
- (Optional, closed-source) eventually-consistent, fully-redundant, asynchronous replication across
servers, "last write wins" strategy by default, allows to implement custom [state-based CRDT](
https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type) strategy.
**Unique features**
- Multiple processes could access a Chronicle Map concurrently. At the same time,
the data store is *in-process for each of the accessing processes*. (Out-of-process approach to IPC
is simply incompatible with Chronicle Map's median latency target of < 1 μs.)
- Replication *without logs*, with constant footprint cost, guarantees progress even if the network
doesn't sustain write rates.
Chronicle Map has two meanings: [the language-agnostic data store](spec) and [the
implementation of this data store for the JVM](src). Currently, this is the only implementation.
**From Java perspective,** `ChronicleMap` is a `ConcurrentMap` implementation which stores the
entries *off-heap*, serializing/deserializing key and value objects to/from off-heap memory
transparently. Chronicle Map supports
- Key and value objects caching/reusing for making *zero allocations (garbage) on
queries*.
- Flyweight values for eliminating serialization/deserialization cost and allowing direct
read/write access to off-heap memory.
**Primary Chronicle Map use cases**
- Replacing slower key-value stores, like Redis and Memcached, when used within a single server.
- Replacing similar JVM-centric solutions, like Coherence and Hazelcast, for speed and/or certain
Chronicle Map features those solutions lack.
- *Moving parts of the application state out of the Java heap* for either
- Reducing the heap size, for reducing GC pressure, or fitting 32 GB for using Compressed Oops
- Inter-process communication
- Persistence
- Replication across servers
- Drop-in `ConcurrentHashMap` replacement, Chronicle Map performs better in some cases.
**What guarantees does Chronicle Map provide in ACID terms?**
- Atomicity - single-key queries are atomic if Chronicle Map is properly configured, multi-key
queries are not atomic.
- Consistency - doesn't make sense for key-value stores
- Isolation - yes (for both single- and multi-key queries).
- Durability - no, at most, Chronicle Map could be persisted to disk. **Durability with Chronicle
Map is provided by another level of architecture,** for example all requests are sent to several
nodes - master and hot standby. Clustering/distributed architecture is out of the scope of the
Chronicle Map project, there are projects *on top* of Chronicle Map which address these questions,
e. g. [Chronicle Enterprise](http://chronicle.software/products/chronicle-enterprise/).
**Project status: ready for production.**
**What is the Chronicle Map's data structure?** In one sentence and simplified, a Chronicle Map
data store is a big chunk of shared memory (optionally mapped to disk), split into independent
segments, each segment has an independent memory allocation for storing the entries, a hash table
for search, and a lock in shared memory (implemented via CAS loops) for managing concurrent access.
Read [the Chronicle Map data store design overview](spec/2-design-overview.md) for more.
### Chronicle Map is *not*
- A document store. No secondary indexes.
- A [multimap](https://en.wikipedia.org/wiki/Multimap). Using a `ChronicleMap| Feature | Availability |
|---|---|
| In-memory off-heap Map | Open-source |
| Persistence to disk | |
| Remote calls |
Closed-source, on-demand |
| Eventually-consistent replication (100% redundancy) | |
| Partially-redundant replication | |
| Synchronous replication | |
| Entry expiration timeouts |