Tomer Doron wrote:
howard - thank you for the prompt reply and for putting this wonderful library together.
to clarify my understanding, can you elaborate a little on the locking lmdb tx provide cross threads and processes? in particular
- do they provide a writer lock by default and one needs to flag
MDB_TXN_RDONLY when a writer lock is not required?
That is answered in the documentation.
- given that mdb_txn_begin is a precursor to most other actions, are these
locks "data store" wide? is there some other mechanism to lock a key/value pair or cursor so not to delay access to other keys? or is the basic assumption such is unnecessary?
That is answered in the presentations.
thank again! tomer
On Jul 24, 2013, at 1:52 PM, Howard Chu <hyc@symas.com mailto:hyc@symas.com> wrote:
Tomer Doron wrote:
wondering what the best strategy to achieve atomic updates with LMDB.
what i am trying to achieve is a read then update atomic action given a highly concurrent use case, for example, if a key/value pair represents a counter, how does one increment or decrement the counter atomically.
i am pretty sure mdb_get -> mdv_set sequence is not atomic, wondering if mdb_cursor_get -> mdv_cursor_put sequence is? perhaps a certain flag is required on the get action to achieve a lock? in my bdb implementation i used lockers to achieve this.
Transactions are atomic. Whatever operations you perform in a single transaction will occur atomically. BDB-style locking is unnecessary.
-- -- Howard Chu CTO, Symas Corp. http://www.symas.com Director, Highland Sun http://highlandsun.com/hyc/ Chief Architect, OpenLDAP http://www.openldap.org/project/