We have built our own SQLite database server application and are considering
making this open source. Since there will be some time involved into making it
an open source project and maintaining it, we would first like to make an
inventory to find out if there is any interest in this server application.
==> Advantages and features of this server application:
* Takes semi-automatically care of concurrent writes (1*).
* Very stable server application (eliminates long startup times in case of
client application crash with large DB's).
* Database connections are cached.
* Multiple parameter sets to prepare a query and execute it multiple times with
a different parameter set.
* The result of a previous select query can be used in the next query.
* Auto-checkpointing is disabled and manual checkpointing is done in a separate
thread, preventing transaction commits (read and write) to be occasionally
slowed down by a checkpoint event.
* Built-in LZMA2 compressed and SHA256 encrypted backup and restore.
* Built-in a-synchronous 'continuous data protection' (real-time backup) to
secondary location (4*).
* Built-in slow query log and email notifications (2* 3*).
* Built-in query error log and email notifications (3*).
1.) A programmer can mark a transaction to be splittable and set splitting
points. If set, the server application will automatically split write queries
that take longer than the time set in milliseconds, thus allowing other write
queries to be executed in between.
2.) The application can automatically log slow queries (that exceed the set
maximum query execution time) and send notifications by email. Maximum query
execution time can be set separately for read and write queries.
3.) All logging is done into separate databases, to prevent eating up costly
writing time from the main database.
4.) When a full backup has been made successfully, the real-time backup is
cleared.
==> Cons:
* It has been built as a Windows service and therefore only runs on Microsoft
platforms
* Transactions that cannot be split will block all writers.
==> How it works:
Clients can communicate with this server over TCP/IP sockets. Queries are
submitted and returned in XML format (BLOB results are returned in binary
format to prevent CPU intensive encoding and decoding). The server application
is written in native Visual C++ (without using MFC). If we would make this
project open source we would also include a client example.
A few examples of the XML the client sends to perform a query:
<query>
<sql databaseid="test">
<![CDATA[delete from session where lastclicktime =
@MinClickTime]]>
</sql>
<paramset>
<param type="1"
name="@MinClickTime"><![CDATA[1395318850]]></param>
</paramset>
<paramset>
<param type="1"
name="@MinClickTime"><![CDATA[1395318900]]></param>
</paramset>
</query>
<query>
<sql databaseid="test">
<![CDATA[select ifnull(max(id),0)+1 as newid from field ]]>
</sql>
<sql databaseid="test">
<![CDATA[insert into field(id, name) values(@ID, @Name) ]]>
</sql>
<paramset>
<param type="0" name="@ID"><![CDATA[newid]]></param>
<param type="1" name="@Name"><![CDATA[Test]]></param>
</paramset>
<transactionbreak></transactionbreak>
<sql databaseid="test">
<![CDATA[insert into closedfield(fieldid) values(@ID) ]]>
</sql>
<paramset>
<param type="0" name="@ID"><![CDATA[newid]]></param>
</paramset>
</query>
Because the result of the last select query is returned to the client, the
client can read the new ID from the result.
Please let us know if you would be interested in this project!
Best regards,
Harmen de Jong
CoachR Group B.V.
www.CoachRDevelopment.com
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users