CN106682082B - 一种数据库的写方法和装置 - Google Patents
一种数据库的写方法和装置 Download PDFInfo
- Publication number
- CN106682082B CN106682082B CN201611051156.8A CN201611051156A CN106682082B CN 106682082 B CN106682082 B CN 106682082B CN 201611051156 A CN201611051156 A CN 201611051156A CN 106682082 B CN106682082 B CN 106682082B
- Authority
- CN
- China
- Prior art keywords
- database
- file
- written
- writing
- write
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/524—Deadlock detection or avoidance
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例提供了一种数据库的写方法和装置,所述方法包括:获取待写入数据库的文件;将所述文件通过至少两次写操作写入所述数据库,以在相邻两次写操作之间的时间内,允许对所述数据库进行读操作。本发明实施例实现了数据库资源的时分复用,由于读操作的时间一般为毫秒级,很短暂,保证了整体写操作的正常执行,并不会明显增加整体写操作的时间,一方面,单次写操作的时间相对整体写操作的时间要少,减少了读操作等待的时间,提高操作的效率,减少界面长时间处于等待等问题;另一方面,由于写操作与读操作是串联执行,减少了因写操作与读操作并发而引起的死锁概率以及对内存的消耗。
Description
技术领域
本发明涉及通信的技术领域,特别是涉及一种数据库的写方法和一种数据库的写装置。
背景技术
随着通信科技的发展,诸如手机、手表等智能终端在人们的工作、学习、日常交流等各方面的使用率也越来越高。
在智能终端上运行的许多应用会使用数据库(如SQLite)来存储用户操作的数据,尤其是社交应用,如即时通信工具、短信应用等等,需要在后台线程中写一个数据库,而同时需要在主线程在UI(User Interface,用户界面)显示数据,那么主线程会生成子线程,该子线程中读取同一数据库。
尽管读操作的对象和写操作的对象不是同一张表,但是,诸如SQLite等数据库所使用的锁为文件锁,对于同一数据库,在写操作的同时不允许执行其他读操作或者写操作。
在许多情况下,某个操作触发一线程进行写操作,同时,另一操作触发另一线程进行读操作。
若该线程较长时间处于写操作,则另一线程较长时间处于等待的状态,由于读取时间较长,容易影响其他操作的效率,可能造成界面长时间处于等待等问题。
例如,对于短信应用,当有未读短信时,每次进入短信列表界面,就会把数据库中关于未读短信是否已经被看到的字段标为已看(写操作),但是,用户还希望能够立即在列表中查看所有短信(读操作),如果字段的标记的时间过长,导致长时间未能读取短信,就会造成短信列表界面迟迟不能加载数据,影响用户体验。
目前有些方案将写操作与读操作并发,但是,这些方案往往会增加死锁概率以及对内存的消耗,死锁后会造成应用停止运行,为了解决死锁问题,往往还会增加更加复杂的逻辑控制,复杂度高,另外,对于一些本身内存比较小的智能终端,增大内存的消耗往往会拖慢整个操作系统的操作流畅程度,造成操作系统的操作卡顿。
发明内容
鉴于上述问题,为了解决上述数据库的写操作时间过长导致读操作执行时间过长、读写并行增加死锁概率以及对内存的消耗的问题,本发明实施例提出了一种数据库的写方法和相应的一种数据库的写装置。
依据本发明的一个方面,提供了一种数据库的写方法,包括:
获取待写入数据库的文件;
将所述文件通过至少两次写操作写入所述数据库,以在相邻两次写操作之间的时间内,允许对所述数据库进行读操作。
可选地,所述将所述文件通过至少两次写操作写入所述数据库的步骤包括:
向所述数据库申请文件锁;
判断是否将所述文件全部写入所述数据库;
若是,则结束将所述文件写入所述数据库;
若否,则将所述文件中未写入所述数据库的部分数据写入所述数据库;
释放所述文件锁;
休眠一段时间,返回执行所述向所述数据库申请文件锁的步骤。
可选地,所述判断是否将所述文件全部写入所述数据库的步骤包括:
读取所述文件已写入所述数据库的数据的已写行数;
判断所述已写行数是否小于所述文件的总行数;
若是,则确定所述文件未全部写入所述数据库;
若否,则确定所述文件已全部写入所述数据库。
可选地,所述读取所述文件已写入所述数据库的数据的已写行数的步骤包括:
在指定的存储区域判断是否存储有用于记录已写行数的变量;
若是,则提取所述变量的值,获得已写行数;
若否,则在所述指定的存储区域设置所述变量,并设置初始值。
可选地,所述将所述文件中未写入所述数据库的部分数据写入所述数据库的步骤包括:
将所述文件中、位于所述已写行数后一行的数据写入所述数据库;
更新所述已写行数;
判断本次写操作写入所述数据库的数据的行数是否到达行数阈值;
若是,则结束本次写操作;
若否,则返回执行所述将所述文件中、位于所述已写行数后一行的数据写入所述数据库的步骤。
根据本发明的另一方面,提供了一种数据库的写装置,其特征在于,包括:
文件获取模块,用于获取待写入数据库的文件;
多次写操作模块,用于将所述文件通过至少两次写操作写入所述数据库,以在相邻两次写操作之间的时间内,允许对所述数据库进行读操作。
可选地,所述多次写操作模块包括:
文件锁申请子模块,用于向所述数据库申请文件锁;
文件完成写子模块,用于判断是否将所述文件全部写入所述数据库;若是,则调用文件写结束子模块,若否,则调用继续写子模块;
文件写结束子模块,用于结束将所述文件写入所述数据库;
文件继续写子模块,用于将所述文件中未写入所述数据库的部分数据写入所述数据库;
文件锁释放子模块,用于释放所述文件锁;
休眠子模块,用于休眠一段时间,返回调用所述文件锁申请子模块。
可选地,所述文件完成写子模块包括:
已写行数读取单元,用于读取所述文件已写入所述数据库的数据的已写行数;
总行数判断单元,用于判断所述已写行数是否小于所述文件的总行数;若是,则调用第一确定单元,若否,则调用第二确定单元;
第一确定单元,用于确定所述文件未全部写入所述数据库;
第二确定单元,用于确定所述文件已全部写入所述数据库。
可选地,所述已写行数读取单元包括:
变量判断子单元,用于在指定的存储区域判断是否存储有用于记录已写行数的变量;若是,则调用变量值提取子单元,若否,则调用变量设置子单元;
变量值提取子单元,用于提取所述变量的值,获得已写行数;
变量设置子单元,用于在所述指定的存储区域设置所述变量,并设置初始值。
可选地,所述文件继续写子模块包括:
行数据写单元,用于将所述文件中、位于所述已写行数后一行的数据写入所述数据库;
已写行数更新单元,用于更新所述已写行数;
行数阈值判断单元,用于判断本次写操作写入所述数据库的数据的行数是否到达行数阈值;若是,则调用本次写结束单元,若否,则返回调用行数据写单元;
本次写结束单元,用于结束本次写操作。
本发明实施例包括以下优点:
本发明实施例将写操作看作是对于要进行写操作的文件,一部分一部分地写入数据库,每一部分的数据是相对独立的,将文件通过至少两次写操作写入数据库,以在写入部分数据之后,可以临时释放文件锁,以供其它线程对数据库进行读操作,及时地读取到数据并进行显示等处理,实现了数据库资源的时分复用,由于读操作的时间一般为毫秒级,很短暂,保证了整体写操作的正常执行,并不会明显增加整体写操作的时间,一方面,单次写操作的时间相对整体写操作的时间要少,减少了读操作等待的时间,提高操作的效率,减少界面长时间处于等待等问题;另一方面,由于写操作与读操作是串联执行,减少了因写操作与读操作并发而引起的死锁概率以及对内存的消耗。
附图说明
图1是本发明的一种数据库的写方法实施例的步骤流程图;
图2A是目前的一种数据库操作流程图;
图2B是图2A的数据库操作流程图的等效流程图;
图3A是本发明实施例的一种数据库操作流程图;
图3B是图3A的数据库操作流程图的等效流程图;
图4是本发明的另一种数据库的写方法实施例的步骤流程图;
图5是本发明的一种数据库的写装置实施例的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
参照图1,示出了本发明的一种数据库的写方法实施例的步骤流程图,具体可以包括如下步骤:
步骤101,获取待写入数据库的文件。
步骤102,将所述文件通过至少两次写操作写入所述数据库,以在相邻两次写操作之间的时间内,允许对所述数据库进行读操作。
在具体实现中,本发明实施例可以应用于各种智能终端中,例如,电脑、手机、PDA(Personal Digital Assistant,个人数字助理)、膝上型计算机、掌上电脑等等,本发明实施例对此不加以限制。
该智能终端可以支持Windows、Android(安卓)、IOS、WindowsPhone等操作系统,通常可以在操作系统中配置数据库,如SQLite。
该数据库在进行写操作、读操作时,配置文件锁,禁止同时进行其他写操作、读操作。
如图2A所示,在目前的数据库操作机制中,一方面,写线程在开始时,向该数据库加写文件锁(即写操作时的文件锁),此时的时间为开始写时间点,如果加写文件锁成功,则执行写操作,将全部数据写入数据库中,如果写操作完成,释放写文件锁,此时的时间为结束写时间点。
另一方面,读进程在开始时,向数据库申请读操作,此时的时间为申请读时间点,如果申请读时间点晚于开始写时间点、早于结束写时间点,即数据库处于加写文件锁的情况下,进行等待,待写进程释放写文件锁之后,向数据库加读文件锁(即读操作的文件锁),此时的时间为开始读时间点,该开始读时间点晚于结束写时间点,如果加读文件锁成功,则执行读操作,如果读操作完成,释放读文件锁,此时的时间为结束读时间点,并显示读取的数据。
尽量写操作与读操作分别在两个线程中进行,但是,由于文件锁的存在,实际的读操作是在写操作完毕后才进行的,如图2B所示,数据库的读写流程可以等价于在一个线程中串行进行写操作、读操作,最后显示数据。
本发明实施例将写操作看作是对于要进行写操作的文件,一部分一部分地写入数据库,每一部分的数据是相对独立的,将文件通过至少两次写操作写入数据库,以在写入部分数据之后,可以临时释放文件锁,以供其它线程对数据库进行读操作,及时地读取到数据并进行显示等处理,实现了数据库资源的时分复用,由于读操作的时间一般为毫秒级,很短暂,保证了整体写操作的正常执行,并不会明显增加整体写操作的时间,一方面,单次写操作的时间相对整体写操作的时间要少,减少了读操作等待的时间,提高操作的效率,减少界面长时间处于等待等问题;另一方面,由于写操作与读操作是串联执行,减少了因写操作与读操作并发而引起的死锁概率以及对内存的消耗。
如图3A所示,在本发明实施例的数据库操作机制中,一方面,写线程在开始时,在一个总写操作中,分为至少两个分写操作,在每个分写操作中,向该数据库加写文件锁,此时的时间为开始写时间点,如果加写文件锁成功,则执行写操作,将部分数据写入数据库中,如果写操作完成,释放写文件锁,此时的时间为结束写时间点,如此重复执行分写操作,最后将全部数据写入数据。
另一方面,读进程在开始时,向数据库申请读操作,此时的时间为申请读时间点,如果申请读时间点晚于开始写时间点、早于结束写时间点,即数据库处于加写文件锁的情况下,进行等待,待写进程在某次分写操作执行完毕释放写文件锁之后,向数据库加读文件锁,此时的时间为开始读时间点,如果加读文件锁成功,则执行读操作,如果读操作完成,释放读文件锁,此时的时间为结束读时间点,并显示读取的数据,该开始读时间点与结束读时间点均晚于上一次分写操作结束写时间点,早于下一次分写操作的开始写时间点。
虽然写操作与读操作分别在两个线程中串联进行,但是,通过临时释放文件锁使得在写操作的过程中进行读操作,分时复用数据库,如图3B所示,数据库的读写流程可以等价于并行进行写操作、读操作,最后显示数据。
参照图4,示出了本发明的另一种数据库的写方法实施例的步骤流程图,具体可以包括如下步骤:
步骤401,获取待写入数据库的文件。
步骤402,向所述数据库申请文件锁。
在本发明实施例中,写进程在进行写操作之前,可以向数据库申请文件锁,对该数据库进行加锁,在POSIX标准中提供接口fcntl()来实现。
该数据库具有一个锁文件(lock file),当锁文件存在时,就认为该数据库已经被加锁,别的进程不应该访问。当锁不存在,写进程就可以创建一个锁文件,然后访问相应的数据。
如果创建锁属于原子操作(atomic operation),就可以保证某一时刻只有一个进程拥有该锁,保证某一时刻只有一个进程访问文件,对于同一部分内容,读操作的文件锁与写操作的文件锁互斥。
步骤403,判断是否将所述文件全部写入所述数据库;若是,则执行步骤404,若否,则执行步骤405。
在本发明实施例中,如果写操作的文件锁申请成功,则可以判断是否将文件的全部数据写入数据库,如果已全部写入数据库,则结束写操作,如果没有全部写入数据库,则继续将未写入的数据写入数据库。
如果写操作的文件锁申请失败,则可能有其他进程进行写操作、读操作,此时可以等待,直至写操作的文件锁申请成功。
在本发明实施例的一个示例中,步骤403可以包括如下子步骤:
子步骤S11,读取所述文件已写入所述数据库的数据的已写行数;
子步骤S12,判断所述已写行数是否小于所述文件的总行数;若是,则执行子步骤S13,若否,则执行子步骤S14;
子步骤S13,确定所述文件未全部写入所述数据库;
子步骤S14,确定所述文件已全部写入所述数据库。
文件中的数据通常以行进行计量,可以将写操作看作是将文件中的数据一行行地写入数据库,每行数据的写入是相对独立的。
在本示例中,可以预先计算文件的总行数并实时统计已写入数据库的行数(即已写行数)。
如果已写行数小于文件的总行数,则表示文件还有部分数据未写入数据库中,如果已写行数等于文件的总行数,则表示文件的全部数据已写入数据库中。
在具体实现中,可以在指定的存储区域判断是否存储有用于记录已写行数的变量;若是,则提取变量的值,获得已写行数;若否,则在指定的存储区域设置变量,并设置初始值(通常为0)。
步骤404,结束将所述文件写入所述数据库。
步骤405,将所述文件中未写入所述数据库的部分数据写入所述数据库。
在具体实现中,每一次写操作可以将文件中未写入数据库的部分数据写入数据库中。
为了保证该文件的正常存储,通常是按照文件的数据顺序写入数据库的,即本次写操作写入数据库的数据通常与上一次写操作写入数据库的数据相连。
当然,如果可以保证写入数据库的数据的准确性,也可以通过标记位置等方式将文件写入数据库中,本发明实施例对此不加以限制。
在本发明实施例的一个示例中,步骤405可以包括如下子步骤:
子步骤S21,将所述文件中、位于所述已写行数后一行的数据写入所述数据库;
子步骤S22,更新所述已写行数;
子步骤S23,判断本次写操作写入所述数据库的数据的行数是否到达行数阈值;若是,则执行子步骤S24,若否,则返回执行子步骤S21;
子步骤S24,结束本次写操作。
在本示例中,可以按照数据的行顺序将数据写入数据库中,每一次写操作可以写入一定行数的数据。
在写入每行数据时,从首行数据开始写,同时,记录当前行数,如记录在指定的存储区域的变量中,并判断本次写操作写入的数据是否到达行数阈值,如果到达,则结束本次写操作,如果未到达,则继续写下一行。
其中,如果行数阈值是预先设定的值,则可以通过已写行数对行数阈值取余数的方式判断本次写操作是否到达行数阈值,即余数为0时,到达行数阈值,否则,未到达行数阈值。
当然,该行数阈值也可以按照智能终端的资源使用率(资源使用率越高,读操作的概率越高,行数阈值设置越低,可以保证读操作的执行)、文件的数据量、随机选取、概率选择等因素进行设置,本发明实施例对此不加以限制。
步骤406,释放所述文件锁;
步骤407,休眠一段时间,返回执行步骤402。
如果本次写操作完成,即可以释放数据库的写操作的文件锁,然后休眠(sleep)一段时间,如1ms,使得其他进行可以在此期间进行写操作、读操作。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图5,示出了本发明的一种数据库的写装置实施例的结构框图,具体可以包括如下模块:
文件获取模块501,用于获取待写入数据库的文件;
多次写操作模块502,用于将所述文件通过至少两次写操作写入所述数据库,以在相邻两次写操作之间的时间内,允许对所述数据库进行读操作。
在本发明的一个实施例中,所述多次写操作模块502包括:
文件锁申请子模块,用于向所述数据库申请文件锁;
文件完成写子模块,用于判断是否将所述文件全部写入所述数据库;若是,则调用文件写结束子模块,若否,则调用继续写子模块;
文件写结束子模块,用于结束将所述文件写入所述数据库;
文件继续写子模块,用于将所述文件中未写入所述数据库的部分数据写入所述数据库;
文件锁释放子模块,用于释放所述文件锁;
休眠子模块,用于休眠一段时间,返回调用所述文件锁申请子模块。
在本发明实施例的一个示例中,所述文件完成写子模块包括:
已写行数读取单元,用于读取所述文件已写入所述数据库的数据的已写行数;
总行数判断单元,用于判断所述已写行数是否小于所述文件的总行数;若是,则调用第一确定单元,若否,则调用第二确定单元;
第一确定单元,用于确定所述文件未全部写入所述数据库;
第二确定单元,用于确定所述文件已全部写入所述数据库。
在本发明实施例的一个示例中,所述已写行数读取单元包括:
变量判断子单元,用于在指定的存储区域判断是否存储有用于记录已写行数的变量;若是,则调用变量值提取子单元,若否,则调用变量设置子单元;
变量值提取子单元,用于提取所述变量的值,获得已写行数;
变量设置子单元,用于在所述指定的存储区域设置所述变量,并设置初始值。
在本发明实施例的一个示例中,所述文件继续写子模块包括:
行数据写单元,用于将所述文件中、位于所述已写行数后一行的数据写入所述数据库;
已写行数更新单元,用于更新所述已写行数;
行数阈值判断单元,用于判断本次写操作写入所述数据库的数据的行数是否到达行数阈值;若是,则调用本次写结束单元,若否,则返回调用行数据写单元;
本次写结束单元,用于结束本次写操作。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种数据库的写方法和一种数据库的写装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (8)
1.一种数据库的写方法,其特征在于,包括:
获取待写入数据库的文件;
将所述文件通过至少两次写操作写入所述数据库,以在相邻两次写操作之间的时间内,允许对所述数据库进行读操作;
所述将所述文件通过至少两次写操作写入所述数据库的步骤包括:
向所述数据库申请写文件锁;
判断是否将所述文件全部写入所述数据库;
若是,则结束将所述文件写入所述数据库;
若否,则将所述文件中未写入所述数据库的部分数据写入所述数据库;
释放所述写文件锁;
休眠一段时间,返回执行所述向所述数据库申请写文件锁的步骤;
所述方法还包括:
在进行所述读操作时向所述数据库申请读文件锁;
其中,所述文件通过至少两次写操作写入所述数据库过程中,每次写操作写入所述数据库的部分数据相对独立。
2.根据权利要求1所述的方法,其特征在于,所述判断是否将所述文件全部写入所述数据库的步骤包括:
读取所述文件已写入所述数据库的数据的已写行数;
判断所述已写行数是否小于所述文件的总行数;
若是,则确定所述文件未全部写入所述数据库;
若否,则确定所述文件已全部写入所述数据库。
3.根据权利要求2所述的方法,其特征在于,所述读取所述文件已写入所述数据库的数据的已写行数的步骤包括:
在指定的存储区域判断是否存储有用于记录已写行数的变量;
若是,则提取所述变量的值,获得已写行数;
若否,则在所述指定的存储区域设置所述变量,并设置初始值。
4.根据权利要求2或3所述的方法,其特征在于,所述将所述文件中未写入所述数据库的部分数据写入所述数据库的步骤包括:
将所述文件中、位于所述已写行数后一行的数据写入所述数据库;
更新所述已写行数;
判断本次写操作写入所述数据库的数据的行数是否到达行数阈值;
若是,则结束本次写操作;
若否,则返回执行所述将所述文件中、位于所述已写行数后一行的数据写入所述数据库的步骤。
5.一种数据库的写装置,其特征在于,包括:
文件获取模块,用于获取待写入数据库的文件;
多次写操作模块,用于将所述文件通过至少两次写操作写入所述数据库,以在相邻两次写操作之间的时间内,允许对所述数据库进行读操作;
所述多次写操作模块包括:
文件锁申请子模块,用于向所述数据库申请写文件锁;
文件完成写子模块,用于判断是否将所述文件全部写入所述数据库;若是,则调用文件写结束子模块,若否,则调用继续写子模块;
文件写结束子模块,用于结束将所述文件写入所述数据库;
文件继续写子模块,用于将所述文件中未写入所述数据库的部分数据写入所述数据库;
文件锁释放子模块,用于释放所述写文件锁;
休眠子模块,用于休眠一段时间,返回调用所述写文件锁申请子模块;
所述装置还包括:
在进行所述读操作时向所述数据库申请读文件锁;
所述多次写操作模块,还用于在进行所述读操作时向所述数据库申请读文件锁;
其中,所述文件通过至少两次写操作写入所述数据库过程中,每次写操作写入所述数据库的部分数据相对独立。
6.根据权利要求5所述的装置,其特征在于,所述文件完成写子模块包括:
已写行数读取单元,用于读取所述文件已写入所述数据库的数据的已写行数;
总行数判断单元,用于判断所述已写行数是否小于所述文件的总行数;若是,则调用第一确定单元,若否,则调用第二确定单元;
第一确定单元,用于确定所述文件未全部写入所述数据库;
第二确定单元,用于确定所述文件已全部写入所述数据库。
7.根据权利要求6所述的装置,其特征在于,所述已写行数读取单元包括:
变量判断子单元,用于在指定的存储区域判断是否存储有用于记录已写行数的变量;若是,则调用变量值提取子单元,若否,则调用变量设置子单元;
变量值提取子单元,用于提取所述变量的值,获得已写行数;
变量设置子单元,用于在所述指定的存储区域设置所述变量,并设置初始值。
8.根据权利要求6或7所述的装置,其特征在于,所述文件继续写子模块包括:
行数据写单元,用于将所述文件中、位于所述已写行数后一行的数据写入所述数据库;
已写行数更新单元,用于更新所述已写行数;
行数阈值判断单元,用于判断本次写操作写入所述数据库的数据的行数是否到达行数阈值;若是,则调用本次写结束单元,若否,则返回调用行数据写单元;
本次写结束单元,用于结束本次写操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611051156.8A CN106682082B (zh) | 2016-11-23 | 2016-11-23 | 一种数据库的写方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611051156.8A CN106682082B (zh) | 2016-11-23 | 2016-11-23 | 一种数据库的写方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106682082A CN106682082A (zh) | 2017-05-17 |
CN106682082B true CN106682082B (zh) | 2021-03-26 |
Family
ID=58866138
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611051156.8A Active CN106682082B (zh) | 2016-11-23 | 2016-11-23 | 一种数据库的写方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106682082B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108021339B (zh) * | 2017-11-03 | 2021-05-04 | 网宿科技股份有限公司 | 一种磁盘读写的方法、设备以及计算机可读存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184256A (zh) * | 2011-06-02 | 2011-09-14 | 北京邮电大学 | 一种针对海量相似短文本的聚类方法和系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104793988B (zh) * | 2014-01-20 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 跨数据库分布式事务的实现方法和装置 |
CN105373541B (zh) * | 2014-08-22 | 2019-03-22 | 博雅网络游戏开发(深圳)有限公司 | 数据库的数据操作请求的处理方法和系统 |
-
2016
- 2016-11-23 CN CN201611051156.8A patent/CN106682082B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102184256A (zh) * | 2011-06-02 | 2011-09-14 | 北京邮电大学 | 一种针对海量相似短文本的聚类方法和系统 |
Non-Patent Citations (1)
Title |
---|
操作系统期末测试2答案;马如风00;《百度文库》;20120107;第1-3页 * |
Also Published As
Publication number | Publication date |
---|---|
CN106682082A (zh) | 2017-05-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9058204B2 (en) | Control method and control device for releasing memory | |
CN108345977B (zh) | 一种业务处理方法及装置 | |
WO2017177931A1 (zh) | 一种文本信息的显示方法、装置和移动设备 | |
CN103092700A (zh) | 内存清理方法、装置和终端设备 | |
CN103593257B (zh) | 一种数据备份方法及装置 | |
US9451423B2 (en) | Method and apparatus for recording information during a call | |
CN111625456B (zh) | 一种卡顿定位方法和装置 | |
CN106682082B (zh) | 一种数据库的写方法和装置 | |
CN111008044A (zh) | 一种应用程序的恢复方法、系统以及电子设备 | |
CN109460193B (zh) | 一种存储系统中io处理方法、装置及终端 | |
CN110798521B (zh) | 分享文件的方法、装置、电子设备及存储介质 | |
CN105808556B (zh) | 一种数据库的操作方法及数据库引擎 | |
US10754674B2 (en) | Method, apparatus, and system for reducing memory usage of a browser in a portable terminal device | |
CN108769152B (zh) | 服务刷新策略注册、服务刷新请求方法、装置以及设备 | |
CN103377071A (zh) | 一种数据批量删除方法和系统 | |
CN109101843A (zh) | 一种归档数据安全存储方法和装置 | |
CN114461053B (zh) | 资源调度方法及相关装置 | |
CN114564149A (zh) | 一种数据存储方法、装置、设备及存储介质 | |
CN110704157B (zh) | 一种应用启动方法、相关装置及介质 | |
CN106407019A (zh) | 一种移动终端的数据库处理方法及其移动终端 | |
CN104102324A (zh) | 管理移动设备内存的方法、服务器及计算机可读介质 | |
CN107862095B (zh) | 一种数据处理方法及装置 | |
CN105446774B (zh) | 一种插件处理方法及用户终端 | |
CN116257365B (zh) | 数据入库方法、装置、设备、存储介质 | |
CN106570032B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 266071 Shandong city of Qingdao province Jiangxi City Road No. 11 Patentee after: Qingdao Hisense Mobile Communication Technology Co.,Ltd. Address before: 266071 Shandong city of Qingdao province Jiangxi City Road No. 11 Patentee before: HISENSE MOBILE COMMUNICATIONS TECHNOLOGY Co.,Ltd. |