CN109033359A - 一种多进程安全访问sqlite的方法 - Google Patents
一种多进程安全访问sqlite的方法 Download PDFInfo
- Publication number
- CN109033359A CN109033359A CN201810833248.4A CN201810833248A CN109033359A CN 109033359 A CN109033359 A CN 109033359A CN 201810833248 A CN201810833248 A CN 201810833248A CN 109033359 A CN109033359 A CN 109033359A
- Authority
- CN
- China
- Prior art keywords
- database
- thread
- client
- access
- order
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种多进程安全访问sqlite的方法,包括以下步骤:A、对数据库的访问分为读线程、写线程和文件线程;B、步骤A中所述进程在访问数据库之前,查询数据库锁的状态,若数据库被锁住,则准备访问数据库的线程处于等待状态,等锁被释放后,准备访问数据库的线程获取锁的控制权对数据库进行操作;C、上述线程采用先到先得的原则进行锁的获取,线程对数据库的操作完成后,释放锁,其它线程此时获取锁状态然后对数据库进行操作。本发明能够改进现有技术的不足,创建了一个独立的数据库访问通道,解决数据库并发访问的问题,避免出现数据库lock而无法访问的情况。
Description
技术领域
本发明涉及数据库技术领域,尤其是一种多进程安全访问sqlite的方法。
背景技术
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。SQLite的锁机制是粗粒度的,它允许多个读,但是一次只允许一个写。写锁会在写期间排他地锁定数据库,其他人在此期间不能访问数据库。
目前多进程访问sqlite的方法,可以采用文件锁的方式,创建一个全局的文件锁,每个进程创建自己独立的连接去连接数据库。每个进程访问数据库之前,去获取文件锁,获得锁资源后,再去访问数据库。
该方法的缺点为:
1.该方法采用进程间的文件锁,当访问量很大时,锁的竞争会很激烈,系统开销变的很大,导致系统运行很慢甚至死机。
2.该方法没有将数据库的访问类型区分,无法做到数据库操作的优先级区别,同时没有将数据库的同类型操作当做一个事务处理,导致数据库操作效率低下。
3.若某个数据库操作耗时很长,其它数据库操作需要一直等待,导致系统无法继续运行,无法做到资源的充分利用。
发明内容
本发明要解决的技术问题是提供一种多进程安全访问sqlite的方法,能够解决现有技术的不足,创建了一个独立的数据库访问通道,解决数据库并发访问的问题,避免出现数据库lock而无法访问的情况。
为解决上述技术问题,本发明所采取的技术方案如下。
一种多进程安全访问sqlite的方法,包括以下步骤:
A、对数据库的访问分为读线程、写线程和文件线程;
B、步骤A中所述进程在访问数据库之前,查询数据库锁的状态,若数据库被锁住,则准备访问数据库的线程处于等待状态,等锁被释放后,准备访问数据库的线程获取锁的控制权对数据库进行操作;
C、上述线程采用先到先得的原则进行锁的获取,线程对数据库的操作完成后,释放锁,其它线程此时获取锁状态然后对数据库进行操作。
作为优选,在每次数据库操作语句前添加一个随机码,服务器返回结果时也带上这个随机码,若随机码对应,则认为返回值是此次的数据库读取结果。
作为优选,客户端每个有数据库访问的线程,均建立一个独立的socket来和服务端通信。
作为优选,所述写线程包括以下步骤:
W1、客户端发送sql命令;
W2、将sql命令写入接收进程;
W3、接收进程将命令放入数据队列,数据队列用于存储sql命令和客户端的地址;
W4、处理进程从数据队列读取命令,根据不同的操作划分命令;
W5、根据不同的命令对数据库进行插入操作或删除修改操作。
作为优选,当进行插入操作时,当请求时间超过3s或请求次数超过100次后,执行插入操作;当进行删除修改操作时,出现请求时立即执行删除修改操作。
作为优选,所述读线程包括以下步骤:
R1、客户端发送sql命令;
R2、将sql命令写入接收进程;
R3、接收进程将命令放入数据队列,数据队列用于存储sql命令和客户端的地址;
R4、处理进程从数据队列读取命令;
R5、直接访问数据库,得到结果集;
R6、根据客户端的地址,将结果集返回给客户端;
R7、客户端收到结果集后对结果进行解压。
作为优选,数据库读取访问的超时时间设置为10s~20s。
作为优选,所述文件线程包括以下步骤,
F1、客户端发送sql命令;
F2、将sql命令写入接收进程;
F3、接收进程将命令放入数据队列,数据队列用于存储sql命令和客户端的地址;
F4、处理进程从数据队列读取命令;
F5、直接访问数据库,得到结果集,并将结果集生成对应的文件;
F6、根据客户端的地址,将生成的文件信息返回给客户端。
作为优选,数据库读取访问的超时时间设置为30s~60s。
采用上述技术方案所带来的有益效果在于:
1.提供了一种高效的,可靠的并行访问sqlite的方法,可以在保证数据库访问正常的同时,提供高性能的访问效率。
2.将数据库的读操作和写操作分离,避免了当出现大量插入请求的时候,无法响应读操作导致访问超时。
3.加入了随机数验证机制,避免出现数据接收混乱的情况。保证了数据的有序和有效性。
附图说明
图1是本发明一个具体实施方式的流程图。
图2是本发明一个具体实施方式中写线程的流程图。
图3是本发明一个具体实施方式中读线程的流程图。
图4是本发明一个具体实施方式中文件线程的流程图。
具体实施方式
参照图1-4,本发明一个具体实施方式包括以下步骤:
A、对数据库的访问分为读线程、写线程和文件线程;
B、步骤A中所述进程在访问数据库之前,查询数据库锁的状态,若数据库被锁住,则准备访问数据库的线程处于等待状态,等锁被释放后,准备访问数据库的线程获取锁的控制权对数据库进行操作;
C、上述线程采用先到先得的原则进行锁的获取,线程对数据库的操作完成后,释放锁,其它线程此时获取锁状态然后对数据库进行操作。
在每次数据库操作语句前添加一个随机码,服务器返回结果时也带上这个随机码,若随机码对应,则认为返回值是此次的数据库读取结果。
客户端每个有数据库访问的线程,均建立一个独立的socket来和服务端通信。
所述写线程包括以下步骤:
W1、客户端发送sql命令;
W2、将sql命令写入接收进程;
W3、接收进程将命令放入数据队列,数据队列用于存储sql命令和客户端的地址;
W4、处理进程从数据队列读取命令,根据不同的操作划分命令;
W5、根据不同的命令对数据库进行插入操作或删除修改操作。
当进行插入操作时,当请求时间超过3s或请求次数超过100次后,执行插入操作;当进行删除修改操作时,出现请求时立即执行删除修改操作。
所述读线程包括以下步骤:
R1、客户端发送sql命令;
R2、将sql命令写入接收进程;
R3、接收进程将命令放入数据队列,数据队列用于存储sql命令和客户端的地址;
R4、处理进程从数据队列读取命令;
R5、直接访问数据库,得到结果集;
R6、根据客户端的地址,将结果集返回给客户端;
R7、客户端收到结果集后对结果进行解压。
数据库读取访问的超时时间设置为10s~20s。
所述文件线程包括以下步骤,
F1、客户端发送sql命令;
F2、将sql命令写入接收进程;
F3、接收进程将命令放入数据队列,数据队列用于存储sql命令和客户端的地址;
F4、处理进程从数据队列读取命令;
F5、直接访问数据库,得到结果集,并将结果集生成对应的文件;
F6、根据客户端的地址,将生成的文件信息返回给客户端。
数据库读取访问的超时时间设置为30s~60s。
以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
Claims (9)
1.一种多进程安全访问sqlite的方法,其特征在于包括以下步骤:
A、对数据库的访问分为读线程、写线程和文件线程;
B、步骤A中所述进程在访问数据库之前,查询数据库锁的状态,若数据库被锁住,则准备访问数据库的线程处于等待状态,等锁被释放后,准备访问数据库的线程获取锁的控制权对数据库进行操作;
C、上述线程采用先到先得的原则进行锁的获取,线程对数据库的操作完成后,释放锁,其它线程此时获取锁状态然后对数据库进行操作。
2.根据权利要求1所述的多进程安全访问sqlite的方法,其特征在于:在每次数据库操作语句前添加一个随机码,服务器返回结果时也带上这个随机码,若随机码对应,则认为返回值是此次的数据库读取结果。
3.根据权利要求1所述的多进程安全访问sqlite的方法,其特征在于:客户端每个有数据库访问的线程,均建立一个独立的socket来和服务端通信。
4.根据权利要求1所述的多进程安全访问sqlite的方法,其特征在于:所述写线程包括以下步骤:
W1、客户端发送sql命令;
W2、将sql命令写入接收进程;
W3、接收进程将命令放入数据队列,数据队列用于存储sql命令和客户端的地址;
W4、处理进程从数据队列读取命令,根据不同的操作划分命令;
W5、根据不同的命令对数据库进行插入操作或删除修改操作。
5.根据权利要求4所述的多进程安全访问sqlite的方法,其特征在于:当进行插入操作时,当请求时间超过3s或请求次数超过100次后,执行插入操作;当进行删除修改操作时,出现请求时立即执行删除修改操作。
6.根据权利要求1所述的多进程安全访问sqlite的方法,其特征在于:所述读线程包括以下步骤:
R1、客户端发送sql命令;
R2、将sql命令写入接收进程;
R3、接收进程将命令放入数据队列,数据队列用于存储sql命令和客户端的地址;
R4、处理进程从数据队列读取命令;
R5、直接访问数据库,得到结果集;
R6、根据客户端的地址,将结果集返回给客户端;
R7、客户端收到结果集后对结果进行解压。
7.根据权利要求6所述的多进程安全访问sqlite的方法,其特征在于:数据库读取访问的超时时间设置为10s~20s。
8.根据权利要求1所述的多进程安全访问sqlite的方法,其特征在于:所述文件线程包括以下步骤,
F1、客户端发送sql命令;
F2、将sql命令写入接收进程;
F3、接收进程将命令放入数据队列,数据队列用于存储sql命令和客户端的地址;
F4、处理进程从数据队列读取命令;
F5、直接访问数据库,得到结果集,并将结果集生成对应的文件;
F6、根据客户端的地址,将生成的文件信息返回给客户端。
9.根据权利要求8所述的多进程安全访问sqlite的方法,其特征在于:数据库读取访问的超时时间设置为30s~60s。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810833248.4A CN109033359A (zh) | 2018-07-26 | 2018-07-26 | 一种多进程安全访问sqlite的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810833248.4A CN109033359A (zh) | 2018-07-26 | 2018-07-26 | 一种多进程安全访问sqlite的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109033359A true CN109033359A (zh) | 2018-12-18 |
Family
ID=64646540
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810833248.4A Pending CN109033359A (zh) | 2018-07-26 | 2018-07-26 | 一种多进程安全访问sqlite的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109033359A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110716947A (zh) * | 2019-10-24 | 2020-01-21 | 网易(杭州)网络有限公司 | 一种数据访问的方法、装置、计算机设备及存储介质 |
CN110908968A (zh) * | 2019-11-14 | 2020-03-24 | 浪潮电子信息产业股份有限公司 | 一种文件锁解锁时避免惊群的方法、装置、设备及存储介质 |
CN111405015A (zh) * | 2020-03-09 | 2020-07-10 | 中国建设银行股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN111930781A (zh) * | 2020-07-24 | 2020-11-13 | 北京金山云网络技术有限公司 | 对缓存数据库的数据请求的处理方法和装置 |
CN112346879A (zh) * | 2020-11-06 | 2021-02-09 | 网易(杭州)网络有限公司 | 进程管理方法、装置、计算机设备及存储介质 |
CN112632031A (zh) * | 2020-12-08 | 2021-04-09 | 北京思特奇信息技术股份有限公司 | 分布式内存数据库长连接使用的实现方法及系统、电子设备、存储介质 |
CN112966278A (zh) * | 2021-02-04 | 2021-06-15 | 北京高因科技有限公司 | 一种Flutter环境安全访问SQLite的方法 |
CN114020481A (zh) * | 2021-10-22 | 2022-02-08 | 山东浪潮科学研究院有限公司 | 一种防止多个进程访问同一任意波形发生器的方法 |
CN115061986A (zh) * | 2022-08-17 | 2022-09-16 | 统信软件技术有限公司 | 数据写入方法、数据压缩方法及数据解压方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901237A (zh) * | 2009-12-04 | 2010-12-01 | 四川川大智胜软件股份有限公司 | 一种基于SQlite构建的类型-索引-内容方式分布式数据库 |
CN103226598A (zh) * | 2013-04-22 | 2013-07-31 | 华为技术有限公司 | 访问数据库的方法和装置以及数据库管理系统 |
CN106407020A (zh) * | 2016-11-23 | 2017-02-15 | 青岛海信移动通信技术股份有限公司 | 一种移动终端的数据库处理方法及其移动终端 |
CN106598748A (zh) * | 2016-12-22 | 2017-04-26 | 深圳市科脉技术股份有限公司 | 一种避免sqlite数据库并发访问时产生文件死锁的方法 |
CN106815251A (zh) * | 2015-11-30 | 2017-06-09 | 成都华为技术有限公司 | 分布式数据库系统、数据库访问方法及装置 |
CN107093138A (zh) * | 2017-04-21 | 2017-08-25 | 山东佳联电子商务有限公司 | 基于分布式无阻塞异步消息处理模式的拍卖竞价系统及其运行方法 |
-
2018
- 2018-07-26 CN CN201810833248.4A patent/CN109033359A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901237A (zh) * | 2009-12-04 | 2010-12-01 | 四川川大智胜软件股份有限公司 | 一种基于SQlite构建的类型-索引-内容方式分布式数据库 |
CN103226598A (zh) * | 2013-04-22 | 2013-07-31 | 华为技术有限公司 | 访问数据库的方法和装置以及数据库管理系统 |
CN106815251A (zh) * | 2015-11-30 | 2017-06-09 | 成都华为技术有限公司 | 分布式数据库系统、数据库访问方法及装置 |
CN106407020A (zh) * | 2016-11-23 | 2017-02-15 | 青岛海信移动通信技术股份有限公司 | 一种移动终端的数据库处理方法及其移动终端 |
CN106598748A (zh) * | 2016-12-22 | 2017-04-26 | 深圳市科脉技术股份有限公司 | 一种避免sqlite数据库并发访问时产生文件死锁的方法 |
CN107093138A (zh) * | 2017-04-21 | 2017-08-25 | 山东佳联电子商务有限公司 | 基于分布式无阻塞异步消息处理模式的拍卖竞价系统及其运行方法 |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110716947A (zh) * | 2019-10-24 | 2020-01-21 | 网易(杭州)网络有限公司 | 一种数据访问的方法、装置、计算机设备及存储介质 |
CN110908968A (zh) * | 2019-11-14 | 2020-03-24 | 浪潮电子信息产业股份有限公司 | 一种文件锁解锁时避免惊群的方法、装置、设备及存储介质 |
CN110908968B (zh) * | 2019-11-14 | 2022-05-27 | 浪潮电子信息产业股份有限公司 | 一种文件锁解锁时避免惊群的方法、装置、设备及存储介质 |
CN111405015B (zh) * | 2020-03-09 | 2022-09-30 | 中国建设银行股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN111405015A (zh) * | 2020-03-09 | 2020-07-10 | 中国建设银行股份有限公司 | 一种数据处理方法、装置、设备及存储介质 |
CN111930781A (zh) * | 2020-07-24 | 2020-11-13 | 北京金山云网络技术有限公司 | 对缓存数据库的数据请求的处理方法和装置 |
CN112346879A (zh) * | 2020-11-06 | 2021-02-09 | 网易(杭州)网络有限公司 | 进程管理方法、装置、计算机设备及存储介质 |
CN112346879B (zh) * | 2020-11-06 | 2023-08-11 | 网易(杭州)网络有限公司 | 进程管理方法、装置、计算机设备及存储介质 |
CN112632031A (zh) * | 2020-12-08 | 2021-04-09 | 北京思特奇信息技术股份有限公司 | 分布式内存数据库长连接使用的实现方法及系统、电子设备、存储介质 |
CN112966278A (zh) * | 2021-02-04 | 2021-06-15 | 北京高因科技有限公司 | 一种Flutter环境安全访问SQLite的方法 |
CN114020481A (zh) * | 2021-10-22 | 2022-02-08 | 山东浪潮科学研究院有限公司 | 一种防止多个进程访问同一任意波形发生器的方法 |
CN115061986A (zh) * | 2022-08-17 | 2022-09-16 | 统信软件技术有限公司 | 数据写入方法、数据压缩方法及数据解压方法 |
CN115061986B (zh) * | 2022-08-17 | 2022-12-02 | 统信软件技术有限公司 | 数据写入方法、数据压缩方法及数据解压方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109033359A (zh) | 一种多进程安全访问sqlite的方法 | |
US11386065B2 (en) | Database concurrency control through hash-bucket latching | |
US9400829B2 (en) | Efficient distributed lock manager | |
US8799213B2 (en) | Combining capture and apply in a distributed information sharing system | |
KR100625595B1 (ko) | 트랜잭션 처리 시스템의 병렬 로깅 방법 및 트랜잭션 로그 처리 시스템 | |
EP2565806B1 (en) | Multi-row transactions | |
US8566808B2 (en) | Object storage and synchronization hooks for occasionally-connected devices | |
US20130227194A1 (en) | Active non-volatile memory post-processing | |
US11204813B2 (en) | System and method for multidimensional search with a resource pool in a computing environment | |
US9514170B1 (en) | Priority queue using two differently-indexed single-index tables | |
CN103593257B (zh) | 一种数据备份方法及装置 | |
CN103150149A (zh) | 处理数据库重做数据的方法和装置 | |
WO2022105585A1 (zh) | 数据存储方法、装置、设备及存储介质 | |
WO2011048268A1 (en) | Saving snapshot of a knowledge base without blocking | |
CN111694863B (zh) | 一种数据库缓存的刷新方法、系统和装置 | |
US20200319939A1 (en) | Distributed system for distributed lock management and method for operating the same | |
CN109614270A (zh) | 基于Hbase的数据读写方法、装置、设备及存储介质 | |
CN112867999A (zh) | 基于版本的表锁定 | |
CN101853279A (zh) | 一种改进的内存数据库封锁方法 | |
US9223690B2 (en) | Freeing memory safely with low performance overhead in a concurrent environment | |
CN114741449A (zh) | 一种基于分布式数据库的对象存储方法及装置 | |
WO2023159976A1 (zh) | 数据分段写入方法、数据读取方法及装置 | |
CN109376165A (zh) | 内存数据库锁的实现方法和装置及计算机可读存储介质 | |
CN115629822B (zh) | 一种基于多核处理器的并发事务处理方法及其系统 | |
CN116107772A (zh) | 多线程的数据处理方法、装置、处理器以及电子设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20181218 |
|
RJ01 | Rejection of invention patent application after publication |