Transactional schema-less embedded database used by JetBrains YouTrack and JetBrains Hub.
APACHE-2.0 License
This release brings new features (Bitmaps), API updates, the new database format, bug fixes and performance improvements.
Two new interfaces has been added to the Environments API: Bitmap and ContextualBitmap. Bitmaps have unique names (like stores do), they let you transactionally set, get, clear and iterate over bits identified by index. Bitmaps are implemented atop of stores, so technically they aren't large arrays, rather they are similar to roaring bitmaps. They don't tend to have good data locality, but compaction is good — in particular for sparse bitmap, i.e. consisting mostly of ones or zeros.
Environment.executeBeforeGc(Runnable action)
added.StoreTransaction.findContaining(..)
returns an EntityIterable of entities of specified entity type with string property having a value containing specified substring. Implementation of the EntityIterable is much faster than brute force enumeration of entities followed by filtering by property value. Thanks to Hannes Halenka for the feature request.SignedFloatBinding
and SignedDoubleBinding
added.false
as a property value is equal to calling deleteProperty(..)
. In previous versions, boolean properties could have three values: true
, false
, and null
. This is the only potentially breaking change.As of 2.0.1, Patricia trees (backend trees for all stores created with key prefixing, i.e. with either StoreConfig.WITHOUT_DUPLICATES_WITH_PREFIXING or StoreConfig.WITH_DUPLICATES_WITH_PREFIXING) can be stored using the new format. Trees stored in the v2 format tend to be more compact with faster operations. For further insights, read a note on Xodus Version 2 Database Format and Patricia Tree Improvements.
By default, the v2 database format is turned off. To turn it on, use the EnvironmentConfig.setUseVersion1Format(boolean)
method. Once an application configured to use the v2 format is run over a database, it can't be downgraded to a version using the v1 format without restoring the database from backup.
If the v2 format is turned on for databases accessed using the Entity Store API, lots of database refactorings and optimizations are automatically activated. Those include use of bitmaps for built-in indices, more compact in-place blobs and their periodic de-duplication.
Environments
Entity Stores
Published by penemue over 4 years ago
This release brings bug fixes and performance improvements related to database ciphering and memory usage control.
The new implementation of ChaCha20, modern stream ciphering algorithm widely used nowadays, is written in Kotlin. Prior to this release, ChaCha20 had the only implementation provided by the Legion of the Bouncy Castle. The new implementation is identical to the Bouncy Castle's one in terms of ciphering, but consumes 13% less CPU:
Benchmark Mode Cnt Score Error Units
JMHStreamCipherBenchmarks.chaChaCrypt thrpt 12 97.439 ± 1.069 ops/us
JMHStreamCipherBenchmarks.jbChaChaCrypt thrpt 12 110.342 ± 0.543 ops/us
The new implementation has been used already for two months in YouTrack InCloud servers, as well as in the main production instance of JetBrains YouTrack. So it's quite safe to just replace the the Bouncy Castle's implementation (cipherId:jetbrains.exodus.crypto.streamciphers.ChaChaStreamCipherProvider
) by the new one (cipherId:jetbrains.exodus.crypto.streamciphers.JBChaChaStreamCipherProvider
) and have less CPU consumption as a benefit. The Bouncy Castle's implementation won't be removed in future versions.
As of 1.3.232, it is possible to configure shared log cache to use Soft References (see EnvironmentConfig#setLogCacheUseSoftReferences
). If this setting is turned on, Java GC would be able to reclaim some heap memory occupied by log cache. As before, log cache can't use more memory than certain memory control settings allow. Such memory-flexible log cache can be extremely useful during load peaks, if and when memory consumption and/or memory traffic increases explosively. The setting should be turned on explicitly, any defaults remain unchanged. Thanks to Martin Häusler for the proposal.
Environments
Entity Stores
Published by penemue about 5 years ago
This release brings bug fixes and minor performance improvements related to Entity Stores.
Starting from version 1.3.124, EntityStore.close()
doesn't close underlying explicitly created Environment
. Prior to 1.3.124, this contract was undefined.
Published by penemue over 5 years ago
This is bug fix update.
Published by penemue over 5 years ago
This release offers Service Provider Interface for I/O customization in the package jetbrains.exodus.io
. In addition to default disk-based I/O, it lets you configure your application to use an in-memory database, or to access in read-only mode disk-based database opened in another JVM. You can also create your own I/O provider, e.g., for storing data in a remote/cloud file system.
Since this release, versioning is changed in order to satisfy development requirements @Jetbrains. Patch numbers no longer will be successive. E.g., next released version definitely won't be 1.3.1
. Apart from that, the new versioning scheme respects all requirements of Semantic Versioning.
Kotlin 1.3.10.
Environments
Entity Stores
Environments
Lucene Directory
Published by penemue over 6 years ago
Release 1.2.3 brings bug fixes and minor performance improvements.
As of 1.2.3, Xodus no longer uses NIO by default, i.e. EnvironmentConfig.DEFAULT.getLogCacheUseNio()
returns false
. This change can slightly affect performance of certain workloads, but it makes applications more stable and robust.
Published by penemue over 6 years ago
Release 1.2.2 brings more bug fixes mostly related to database encryption.
Environments
Entity Stores
Lucene Directory
Published by penemue over 6 years ago
Published by penemue over 6 years ago
This release offers database encryption. For details, refer to the documentation.
Kotlin 1.2.21 is used.
Environments
Entity Stores
Virtual File Systems
Published by penemue almost 7 years ago
This release makes Xodus compliant with Java 9. Applications using Xodus would be able to run on JRE 9, though the project itself cannot be built under JDK9 due to the bug in Kotlin dokka.
Kotlin 1.1.51 is used.
Entity Stores
Environments
Entity Stores
Virtual File Systems
Utils
Entity Stores
Further reduction of memory traffic in implementation of the Environments API is done. Tokyo Cabinet benchmarks results updated. Benchmarks for LMDB JNI and Akiban PersistIt added.
Published by penemue over 7 years ago
This is bug fix update.
Environments
Entity Stores
Published by penemue over 7 years ago
Release 1.0.5 brings lots of performance improvements in implementation of the Environments API (related mostly to reducing memory allocations) and in implementaion of the EntityStores API (more compact EntityIterableCache, its partial invalidation and updates are times faster).
Besides, 1.0.5 delivers fixes of several bugs. One of the bugs (XD-601) is pretty critical, thanks to Thorsten Schemm for reporting. The bug is old (it was introduced prior to 1.0.0), so we recommend to update unconditionally to 1.0.5.
Published by penemue almost 8 years ago
This is bug fix update. One of the fixed bugs (XD-566) is pretty critical, it was introduced in 1.0.2.
Published by penemue almost 8 years ago
This release brings minor (~5%) performance improvements of random access operations using Environments API. Tokyo Cabinet benchmarks reran, results updated.
Besides that, this version is aimed at current development of YouTrack and Hub.
Published by penemue almost 8 years ago
This release is mostly devoted to performance on large workloads, when physical database size is much more than Java heap size.
...and more
Published by penemue over 8 years ago
Tokyo Cabinet benchmarks reran for Xodus BTree and Patricia. According to the benchmark results, BTree random read is 17% faster, BTree successive read is 34% faster, Patricia random read is 8% faster and Patricia successive read is 7% faster compared to 1.0.0.
Published by penemue over 8 years ago