sqlite是不错的内存数据库,内存数据库是处理大量并发数据的优先选择。但有些大量数据的并发并不是数据处理本身的问题,例如逻辑上必须有先后次序的数据是并发速度不能解决的问题。抛开这些问题一个简单大容量的解决方案是用一个内存数据库做前端一个硬盘数据库做后端,内存数据库定期把数据同步到后端的硬盘数据库。这个方案有个问题就是如何同步,同步分为两种一种是更新合并,一种是直接复制。更新合并是指把更改过的数据提交到后端数据库进行合并,直接复制指无论是否更改都把整个数据库的数据同步过来。处理这两种方式的办法是不同的,更新合并可以记录更改数据的指令简单的可以记录更改的表,复杂的可以记录更改的列甚至项。第一种方式只要简单的匹配sql指令后一种方式需要模拟运行。在某一时间点上把更改过的表更新到备份数据库上。直接复制就是无论表项是否更改都更新到备份数据库。sqlite有个看起来是个问题的问题,就是不能线程安全的插入和更新。这个问题sqlite在linux系统上解决的是满好的使用的是硬盘分区的锁可以和sqlite页缓冲系统完美的结合在一起。不过要是拿sqlite当内存数据库脱离硬盘的文件系统恐怕就要自己想办法解决多线程问题。才用软件锁解决线程安全是一个伪命题。用一个软件标示锁住库或表或表项,都会存在一个问题。无论锁在哪访问数据都变成了,询问锁再读取数据的两个步骤。极端的情况下对一个数据的访问由原来的一次操作变成了两次操作查询和插入。如果查询不成功那么要对插入指令排序,这个指令的排序当然要先进先出而不能是争用的。sqlite内存数据库很迷人最大的优点是平衡的读取和写入的在硬盘数据库上的差距。
原文链接:https://www.f2er.com/sqlite/203038.html