LevelDB is Google's open source on-disk key-value storage library that
provides an ordered mapping from string keys to binary values. In many
applications where only key based accesses are needed, it tends to be a faster
alternative than databases. LevelDB was written in C++ with a C calling API
included. This module provides a Julia interface to LevelDB using the LevelDB_jll and Julia's
ccall mechanism.
This package is based on the LevelDB package, but now using
LevelDB_jll and the use of Strings and any kind of Arrays as key and values.
More over, the API was made more explicit to be able to handle different data types.
It mantains the dictionary interface for one key operations.
NOTE: If you're considering using LevelDB2 for a fresh project,
- please see this comparison with
LMDB(a Julia package is also availableLMDB.jl). - On the other hand,
LevelDBhas builtin compression and it is less painful whenever usingmmapbecomes an issue (e.g. some versions of windows or 32bit systems).
] add LevelDB2] test LevelDB2using LevelDB2
julia> db = DB(file_path; create_if_missing = false, error_if_exists = false)Here file_path is the full path to a directory that hosts a LevelDB database.
create_if_missing is a boolean flag when true the database will be created if
it does not exist. error_if_exists is a boolean flag when true an error will
be thrown if the database already exists. The return value is a database object
for passing to read/write calls.
julia> close(db)Close a database, db is the object returned from a DB call. A
directory can only be opened by a single DB at a time.
By default, key and values have String type. You can specify String keys and vector values as follows:
db = DB(file_path, String, Vector{Float32}; create_if_missing = false, error_if_exists = false)julia> db[key] = valuejulia> db[key]As in the LevelDB.jl version, you can use Array{UInt8} and use the reinterpret function to
cast it into the right array type (see test code). However, in this package this can be shortened just specifying
the types when the database is opened; it can also support String objects painless.
julia> delete!(db, key)Delete a key from db.
LevelDB2 supports grouping a number of put operations into a write batch, the
batch will either succeed as a whole or fail altogether, behaving like an atomic
update.
julia> put_batch!(db, pairs)Creates a write batch internally which is then commited to db.
Batch deletions.
julia> del_batch!(db, keys)Fetch many keys (not necessarily sequential)
julia> fetch_batch!(db, keys)julia> for (key, value) in db
#do something with the key value pair
endIterate over all key => value pairs in a DB.
julia> for (key, value) in Range(db, keylow, keyhigh)
#do something with the key value pair
endIterate over a range between key1 and key2 (inclusive)
julia> for (key, value) in Prefix(db, keyprefix)
#do something with the key value pair
endIterate over a range defined by a prefix
- Eric S. Tellez (donsadit@gmail.com)
previous version (LevelDB.jl)
- Jerry Zhenlei Cai ( jpenguin at gmail dot com )
- Guido Kraemer
@huwenshuo@tmlbl