diff --git a/docs/CM_Features.adoc b/docs/CM_Features.adoc index 6c5dd75e4..3c9e3c3ef 100755 --- a/docs/CM_Features.adoc +++ b/docs/CM_Features.adoc @@ -38,7 +38,7 @@ NOTE: See <> for more informatio - https://github.com/OpenHFT/Chronicle-Map/blob/master/src[implementation of this data store for the JVM (source)]. Currently, this is the only implementation. -=== From Java perspective +=== From the 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: @@ -75,7 +75,7 @@ queries*. **Project status: ready for production.** -== What is the Chronicle Map's data structure? +== What is the data structure of Chronicle Map? Simply put, a Chronicle Map data store is a big chunk of shared memory (optionally mapped to disk). It is split into independent segments; each segment has: @@ -113,27 +113,28 @@ Please contact us at mailto:sales@chronicle.software[sales@chronicle.software] i |Feature |Availability |In-memory off-heap Map -|Open-source +|Open source |Persistence to disk -|Open-source +|Open source |Remote calls -|http://chronicle.software/products/chronicle-map/[Closed-source] +|Commercially available |Eventually-consistent replication (100% redundancy -|http://chronicle.software/products/chronicle-map/[Closed-source] +|Commercially available |Synchronous replication -|http://chronicle.software/products/chronicle-map/[Closed-source] +|Commercially available |Partially-redundant replication -|http://chronicle.software/consultancy/[On-demand] +|On demand |Entry expiration timeouts -|http://chronicle.software/consultancy/[On-demand] +|On demand |=== +NOTE: For access to commercially available features please contact mailto:sales@chronicle.software[sales@chronicle.software]. + == Peer projects - https://github.com/OpenHFT/Chronicle-Engine[Chronicle Engine]. Reactive processing framework supporting Chronicle Map as a backend. - - http://chronicle.software/products/chronicle-enterprise/[Chronicle Enterprise]. Extended - versions of Chronicle software. + - http://vanillajava.blogspot.com/2015/09/chronicle-journal-customizable-data.html[Chronicle Journal]. Another key-value built by Chronicle Software, with different properties. diff --git a/docs/CM_Replication.adoc b/docs/CM_Replication.adoc index 461488584..4a8f88cc6 100755 --- a/docs/CM_Replication.adoc +++ b/docs/CM_Replication.adoc @@ -240,7 +240,7 @@ replicatedEntry: !!binary AYChq5LqwKXqFAFOEwAAAAAAAAD/////////fw== This output can be generated by running the example program, https://github.com/ChronicleEnterprise/Chronicle-Map-Enterprise/blob/master/src/test/java/software/chronicle/enterprise/map/example/ReplicationEventLoggingExampleMain.java[ReplicationEventLoggingExampleMain.java] ''' -For the replication stress test, see <>. +For the replication stress test, see <>. ''' <> diff --git a/docs/CM_Tutorial.adoc b/docs/CM_Tutorial.adoc index 9cc3fd759..12c505c10 100755 --- a/docs/CM_Tutorial.adoc +++ b/docs/CM_Tutorial.adoc @@ -17,7 +17,7 @@ Creating an instance of `ChronicleMap` is a little more complex than just callin To create an instance you have to use the `ChronicleMapBuilder`. === In-memory Chronicle Map -The following code snippet creates an in-memory Chronicle Map store, supposed to store about 50 000 _city name -> postal code_ mappings. +The following code snippet creates an in-memory Chronicle Map store, to store about 50,000 _city name -> postal code_ mappings. It is accessible within a single JVM process; the process in which it was created. The data is accessible while the process is alive. When the process is terminated, the data is cleared. @@ -54,33 +54,35 @@ ChronicleMap cityPostalCodes = ChronicleMap === Persisted Chronicle Map -You can amend this code to create a persisted Chronicle Map by replacing `.create()` calls with `.createPersistedTo(cityPostalCodesFile)`, if you want the Chronicle -Map to, either: +You can amend this code to create a persisted Chronicle Map by replacing `.create()` calls with `.createPersistedTo(cityPostalCodesFile)`. Use a persisted Chronicle Map if you want it to, either: - outlive the process it was created within; for example, to support hot application redeployment. - be accessible from multiple concurrent processes on the same server. - - Persist the data to disk. + - persist the data to disk. -The `cityPostalCodesFile` has to represent the same location on your server among all Java -processes that wish to access this Chronicle Map instance; For example, `System.getProperty("java.io.tmpdir") + "/cityPostalCodes.dat"`. +The `cityPostalCodesFile` has to represent the same location on your server for all the Java +processes that wish to access this Chronicle Map instance. For example, `System.getProperty("java.io.tmpdir") + "/cityPostalCodes.dat"`. The name and location of the file is entirely up to you. -Note: When you create a `ChronicleMap` instance with `.createPersistedTo(file)`, and the given +NOTE: When you create a `ChronicleMap` instance with `.createPersistedTo(file)`, and the specified file already exists in the system, you open a view to the existing Chronicle Map data store from -this JVM process, rather than creating a new Chronicle Map data store. That is, the data store could already contain some entries. No special action with the data is performed during such operation. If you want to clean up corrupted entries, and ensure that the data store is in correct state, see the <> section. +this JVM process, rather than creating a new Chronicle Map data store. That means that the data store may already contain some entries. No special action with the data is performed during such an operation. If you want to clean up corrupted entries, and ensure that the data store is in correct state, see the <> section. -NOTE: ChronicleMap instance vs Chronicle Map data store + - + - In this tutorial, `ChronicleMap` instance (or simply `ChronicleMap`) term is used to refer to on-heap object, providing access to a Chronicle Map data store (or Chronicle Map key-value store, or Chronicle Map store, or simply Chronicle Map, with space between two words in contrast to `ChronicleMap`), which could be purely in-memory, or persisted to disk. Currently Java implementation doesn't allow to create multiple accessor ChronicleMap` objects to a single *in-memory Chronicle Map store*, i. e. there is always a one-to-one correspondence, that may lead to confusion. *Persisted Chronicle Map store*, however, allows to create multiple accessor `ChronicleMap` instances either within a single JVM process (though [it is not recommended to do that](#single-chroniclemap-instance-per-jvm)), or from concurrent JVM processes, that is perfectly OK. +== ChronicleMap instance vs Chronicle Map data store -When no processes access the file, it could be freely moved to another location in the system, and -even to another server, even running different operating system, opened from another location and -you will observe the same data. +In this tutorial, the term `ChronicleMap` instance (or simply `ChronicleMap`) is used to refer to an on-heap object providing access to a Chronicle Map data store (or Chronicle Map key-value store, or Chronicle Map store, or simply Chronicle Map, with space between two words in contrast to `ChronicleMap`), which could be purely in-memory, or persisted to disk. + +Currently the Java implementation doesn't allow creation of multiple accessor ChronicleMap` objects for a single *in-memory Chronicle Map store*; there is always a one-to-one correspondence. + +*Persisted Chronicle Map store*, however, does allow creation of multiple accessor `ChronicleMap` instances; either within a single JVM process (although it is not recommended), or from concurrent JVM processes. + +When no processes access the file, it could be freely moved to another location in the system, or +even to another server. It could even run on different operating systems. When opened from another location you will observe the same data. If you don't need the Chronicle Map instance to survive the server restart, i. e. you don't need -persistence to disk, only multi-process access, choose the file to be mounted on http://en.wikipedia.org/wiki/Tmpfs[tmpfs]; for example, on `Linux` it is as easy as placing you file in `/dev/shm` directory. +persistence to disk, only multi-process access, choose the file to be mounted on http://en.wikipedia.org/wiki/Tmpfs[tmpfs]. For example, on `Linux` it is as easy as placing you file in `/dev/shm` directory. ==== Configure `.entries(entries)`