All notable changes to this project will be documented in this file. This change log follows the conventions of keepachangelog.com.
- Handle list form in query properly in command line shell [#42]
- [Breaking] Consonidated all user facing functions to
datalevin.core
, so users don't have to understand and require different namespaces in order to use all features.
- [Breaking] Removed AEV index, as it is not used in query. This reduces storage
and improves write speed.
- [Breaking] Change VAE index to VEA, in preparation for new query engine. Now
all indices have the same order, just rotated, so merge join is more likely.
- [Breaking] Change
open-lmdb
and close-lmdb
to open-kv
and close-kv
,
lmdb/transact
to lmdb/transact-kv
, so they are consistent, easier to
remember, and distinct from functions in datalevin.core
.
- GraalVM native image specific LMDB wrapper. This wrapper allocates buffer
memory in C and uses our own C comparator instead of doing these work in Java,
so it is faster.
- Native command line shell,
dtlv
- Improve Java interop call performance
- Allow Java interop calls in where clauses, e.g.
[(.getTime ?date) ?timestamp]
, [(.after ?date1 ?date2)]
, where the date variables are :db.type/instance
. [#32]
- Changed default LMDB write behavior to use writable memory map and
asynchronous msync, significantly improved write speed for small transactions
(240X improvement for writing one datom at a time).
- Read
:db.type/instant
value as java.util.Date
, not as long
[#30]
- Fixed error when transacting different data types for an untyped attribute [#28, thx @den1k]
- proper exception handling in
lmdb/open-lmdb
- Fixed schema update when reloading data from disk
- Fixed
core/get-conn
schema update
- Remove unnecessary locks in read transaction
- Improved error message and documentation for managing LMDB connection
core/get-conn
and core/with-conn
- Correctly handle
init-max-eid
for large values as well.
- Fixed regression introduced by 0.3.6, where :ignore value was not considered [#25]
- Add headers to key-value store keys, so that range queries work in mixed data tables
- Expose all data types to key-value store API [#24]
- thaw error for large values of
:data
type. [#23]
- portable temporary directory. [#20, thx @joinr]
- Properly initialize max-eid in
core/empty-db
- Add value type for
:db/ident
in implicit schema
- [Breaking] Change argument order of
core/create-conn
, db/empty-db
etc., and put dir
in front, since it is more likely to be specified than
schema
in real use, so users don't have to put nil
for schema
.
- correct
core/update-schema
- correctly handle
false
value as :data
- always clear buffer before putting data in
- thaw exception when fetching large values
- clearer error messages for byte buffer overflow
core/schema
and core/update-schema
- correct results when there are more than 8 clauses
- correct query result size
- automatically re-order simple where clauses according to the sizes of result sets
- change system dbi names to avoid potential collisions
- miss function keywords in cache keys
- fix invalid reuse of reader locktable slot #7
- remove MDB_NOTLS flag to gain significant small writes speed
- update existing schema instead of creating new ones
- Reset transaction after getting entries
- Only use 24 reader slots
- avoid locking primitive #5
- create all parent directories if necessary
- long out of range error during native compile
- apply query/join-tuples optimization
- use array get wherenever we can in query, saw significant improvement in some queries.
- use
db/-first
instead of (first (db/-datom ..))
, db/-populated?
instead of (not-empty (db/-datoms ..)
, as they do not realize the results hence faster. - storage test improvements
- use only half of the reader slots, so other processes may read
- add an arity for
bits/read-buffer
and bits/put-buffer
- add
lmdb/closed?
, lmdb/clear-dbi
, and lmdb/drop-dbi
- code samples
- API doc
core/close