james anderson wrote:
> On 2020-12-03, at 19:17:46, Howard Chu <hyc(a)symas.com> wrote:
> Gábor Melis wrote:
>> On Wed, 2 Dec 2020 at 22:50, james anderson
>> <anderson.james.1955(a)gmail.com> wrote:
>>>> On 2020-12-02, at 22:53:58, Howard Chu <hyc(a)symas.com> wrote:
>>>> James Anderson wrote:
>>>>> the mdb_env_open documentation includes in its note about NOTLS,
>>>>> A read-only transaction may span threads if the user synchronizes
>>>>> to which read-only operations would this constraint apply?
>>>> It depends.
>>>> The only safe approach is to ensure that a txn is not active
>>>> in multiple threads.
>>> where “active” includes read-only cursors?
>>> does mean, either one constrains the threads such that there can be no
parallel access to the database, or each thread must establish its own transaction, in
which case there is no guarantee that they operate om the same database state?
>> Chiming in here, a cleaner api could be to allow starting a
>> transaction with a given txn id. That way one would have separate
>> transaction objects, but consistent state. The client code would need
>> to synchronize threads a bit to guarantee that the txn id is still
>> valid, but this would be more lightweight and easier to reason about.
> In an actively written database there is no legitimate use case for
> opening a new transaction on anything but the newest version of the
> data. Reading or depending on stale data would be an application bug.
without considering the relation between that notion and the management of data in a
bitemporal store, the question remains, how are two independent threads to ensure that
they are reading the same “newest” version when some other, likewise independent, process
may commit a write transaction in the time interval between the instants of the respective
read transaction begins?
How would you do this in any other database system?
-- Howard Chu
CTO, Symas Corp. http://www.symas.com
Director, Highland Sun http://highlandsun.com/hyc/
Chief Architect, OpenLDAP http://www.openldap.org/project/