Hello all
If I look at the "Locking And Concurrency"-Description from my
current Viewpoint, as a Viewpoint with present understandig, the
Description is ok.
If I remember to my Viewpoint in the past, without this present
understandig, before some very pleasant helppostings explain the
coherences, the Description stays imho a little bit behind a fog.
It is not closing clearly, in particular if a User migrate from
OLE-DB.
A simple list of facts like the following example at the end of the
existing Description would be amazing. I have read all postings
again and collect the important statements and aspects. If anyone
found this later in this list, i hope it is helpful to him.
Facts:
- SQLLite is not a Server-DBMS, but a Single-File-Database on your
Harddisk/Server-Filesystem.
- How many users can share a file? So much as needed. Sqlite can be
shared between users just like a word-processing file shared between
multiple users. It just uses the regular fcntl-type file locks.
- SQLite handles the Filelockings during its write to File as a
Filelocking based on the operating system, not based on the DB-Tables
and Records.
Remarks (MS, fcntl-Routines) The Locking-Function locks or unlocks
nbytes bytes of the file specified by fd.
Locking bytes in a file prevents access to those bytes by other
processes. All locking or unlocking begins at the current position of
the file pointer and proceeds for the next nbytes bytes. It is possible
to lock bytes past end of file.
- Sqlite does the needed filelocking automatically until the changes to
be written to file. During this Process prevent SQLite concurrent
access (Read and Write). That takes just as long until changes are
written succesful to file.
- Now, if there are multiple processes trying to update the same database
file, only one can update it at a given moment. Attempts to do updates,
or start a transaction will fail with an error indicating the database
is locked.
This applies even if the two processes are updating different tables.
That is in Contrast with a full database server (like SQL server, MySql,
etc.), which has grained locking, and can let two processes update
different tables, or even different rows on the same table, at the
same time.
- Provided you code handles the errors ((SQLITE_BUSY) by retrying the
update until it succeeds), it should work fine. However, if there are
lots of processes doing large updates to the same database file, they
may be waiting for each other a lot.
- A "logical" Recordlocking behalf a current Record/Row during a View or a
Edit, or behalf a current leading Record and his set of appended
Childrecords in other tables, is in the current version not
implemented and primary not supported. A Application have to do this
by itself.
Hopeful that my collection is correct... :-)
Greetings to all from Germany
Anne
--
"Feel free" – 10 GB Mailbox, 100 FreeSMS/Monat ...
Jetzt GMX TopMail testen: http://www.gmx.net/de/go/topmail