Hi,
I'm a little new to SQLite, but have been using it successfully for about 8 
months, as a read only repository for application configuration parameters in 
my mod_perl based web application.  I have recently added functionality to 
update the configuration tables I have, via the web interface.  Here is my 
stack:

RedHat Linux 7.2
apache 1.3.x, prefork mode
mod_perl 1.29
DBI  1.51
DBD::SQLite  1.13

Single database file, with 3 simple configuration tables in name => value 
format.
Mulitple apache processes each with their own connection, sharing that single 
file.
No threading.

In my unit testing of this, I tried updating the the table values from multiple 
approaches, and found that I was seeing strange behavior.

Approaches:

(1)  Updated a single row, in one table, in a copy of the DB file on a build 
host, using the `sqlite3` command line tool.   I then uploaded that modified DB 
file to the application host which was already running apache, and all of my 
reads from the table still reflected the "old" row value as if it had never 
changed.

(2)  Updated a single row, in one table, in the existing DB file on the 
application host, using the `sqlite3` command line tool, while apache still 
running, and still, the web application kept reading the "old" row value.

In either of the two former scenarios, if I stopped/started apache again, the 
web application would then see the correct value in the configuration table, 
from all child processes.

(3)  Updated a single row, in one table, in the existing DB file on the 
application host, using the web interface.  This time, all apache child 
processes saw the new value immediately; each process has it's own DB 
connection that is not shared.

So, I thought that the issue with approaches 1 & 2 above could be due to memory 
caching/paging by SQLite or Linux, especially since I was modifying the DB file 
while apache had current handles connected to it from other processes (i.e. 
apache).  But when you think about it, the prefork model of apache is the same 
thing, with each child process being a separate process that has a handle with 
the DB file.

My question has multiple parts:

(Q1)  First, why would what seems to be identical multi-process interaction 
with the DB file achieve different results when attempting to view the updated 
record?

(Q2)  I have a business need to perform both small, infrequent updates, and 
larger more frequent updates to this DB file.  I am hoping to be able to not 
only perform these updates through the web interface of the application, but 
also to be able to just deploy a new DB file to all our production hosts, 
without bouncing apache, and have the updates take effect either way.  How can 
I achieve this with the behavior I have mentioned above?

Thanks in advance for any help you can offer,
- Jeff




-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to