RA's comments - corrections

This commit is contained in:
Neil Clifford
2017-10-06 09:56:07 +01:00
parent a55bf1c9d4
commit 4158c75de7
3 changed files with 30 additions and 27 deletions
+12 -11
View File
@@ -38,7 +38,7 @@ NOTE: See <<CM_Replication.adoc#,Chronicle Map Replication>> 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.
+1 -1
View File
@@ -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 <<CM_Replication_Stress_Test.adoc#,CM_Replication_Stress_Test.adoc>>.
For the replication stress test, see <<CM_Replication_Stress_Test.adoc#,CM_Replication_Stress_Test>>.
'''
<<CM_Features.adoc#,Back to Features>>
+17 -15
View File
@@ -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<Integer, PostalCodeRange> 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 <<Recovery>> 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 <<Recovery>> 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)`