I'm using SQLite3 for the first time and am looking to see if those more experienced can look at my deployment and offer suggestions.
I have a client/server application running on MS Windows communicating over TCP/IP supporting a few dozen clients. Basically, clients send a request to the server and the SQL is built, submitted and results returned. The database file is located in the same folder as the server. The server is multi-threaded. I'm using library version 3.8.7.4 The database file is opened as follows: 1. sqlite3_enable_shared_cache(%SQLITE_OPEN_SHAREDCACHE) 2. Database is opened with %SQLITE_OPEN_READWRITE 3. PRAGMA's are set PRAGMA JOURNAL_MODE=WAL; PRAGMA WAL_AUTOCHECKPOINT=500; PRAGMA SECURE_DELETE; PRAGMA SYNCHRONOUS=FULL; PRAGMA THREADS=0; All SELECT type requests are wrapped with BEGIN TRANSACTION/COMMIT and UPDATE/INSERT/DELETE transactions are wrapped with BEGIN IMMEDIATE TRANSACTION/COMMIT. The server uses a connection pool and threads request a handle from the pool and return it to the pool immediately afterwards. The largest size of the connection pool and the number of open handles is limited to 5. In my stress testing, I've thrown thousands of requests at the server and the pool usually gets to two and rarely 3. If a request encounters %SQLITE_BUSY or %SQLITE_LOCKED, I'm retrying up to 5 times with a 100ms sleep in between. Will this approach minimize %SQLITE_BUSY and %SQLITE_LOCKED situations and provide decent concurrency and long term stability? I haven't yet tried to serialize update requests so that only one at a time is active. Rick Kelly -- View this message in context: http://sqlite.1065341.n5.nabble.com/Client-Server-Best-Practices-tp79728.html Sent from the SQLite mailing list archive at Nabble.com. _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users