发明内容
本发明提供了一种访问单文件数据库的方法及装置,以解决在现有的单数据库存储技术中存在当多个用户同时访问数据库或数据库存储量较大时,读写操作容易阻塞或出错、存储的数据容易损坏的问题。
一种访问单文件数据库的方法,包括:
根据业务关系的不同,将不同的数据表划分成若干个数据表群,并为每个数据表群建立对应的虚拟文件,这些数据表群与所述虚拟文件的对应关系都记录在日志文件中;
根据用户请求访问的数据表在日志文件中的所述对应关系,将与所述用户请求访问的数据表对应的所述虚拟文件提供给用户访问;
若多个用户同时请求访问同一个数据表相应的虚拟文件,则使用预定算法对多个用户进行优先级排序;
若多个用户同时对同一个数据表相应的虚拟文件并行存取,则对所述同一个数据表对应的虚拟文件实行预定的封锁机制。
一种访问单文件数据库的装置,包括:
虚拟文件建立单元,用于根据业务关系的不同,将不同的数据表划分成若干个数据表群,并为每个数据表群建立对应的虚拟文件,这些数据表群与所述虚拟文件的对应关系都记录在日志文件中;
虚拟文件访问单元,用于根据用户请求访问的数据表在日志文件中的所述对应关系,将与所述用户请求访问的数据表对应的所述虚拟文件提供给用户访问;
优先排序单元,用于若多个用户同时请求访问同一个数据表相应的虚拟文件,则使用预定算法对多个用户进行优先级排序;
虚拟文件封锁单元,用于若多个用户同时对同一个数据表相应的虚拟文件并行存取,则对所述同一个数据表相应的虚拟文件施行预定的封锁机制。
本发明通过将不同业务的数据表建立在不同的虚拟文件当中,并将表与虚拟文件建立对应关系存储于日志文件当中,实现了当多个用户同时访问数据库或数据库存储量较大时,读写操作不易出现阻塞或出错,存储的数据也不易被损坏。
具体实施方式
本发明的具体实施方式提供了一种访问单文件数据库的方法,该方法包括根据业务关系将单文件数据库中的数据表分别建立对应的虚拟文件,将数据表和对应的虚拟文件建立对应关系,并将对应关系存储于日志文件中;以及根据用户请求访问的数据表在日志文件中的对应关系,将与用户请求访问的数据表对应的虚拟文件提供给用户访问。
进一步地,相应的根据用户请求访问的数据表在日志文件中的对应关系包括对于每个访问请求都分别查找请求访问的数据表在日志文件中的对应关系。
另外,该方法还包括若多个用户同时请求访问同一个数据表相应的虚拟文件,则使用预定算法对多个用户进行优先级排序;以及若多个用户同时对同一个数据表相应的虚拟文件并行存取,则对同一个数据表对应的虚拟文件实行预定的封锁机制。
为了更清楚的说明本发明的具体实施方式提供的一种访问单文件数据库的方法,可以应到已有的多种单文件数据库中,现以其在SQL单文件数据库中的应用,并结合说明书附图对该方法进行详细说明,如图2所示,该方法具体可以包括:
步骤21,根据业务关系将单文件数据库中的数据表分别建立对应的虚拟文件,将数据表和对应的虚拟文件建立对应关系,并将对应关系存储于日志文件中。
对数据库的操作可分为创建数据库和操作数据库。本具体实施方式在创建数据库时,数据库中的所有信息被保存在一个文件内,这些信息由若干个数据表组成并且需要明确各表之间的业务关系。如图3所示,在用户访问数据库之前,可以先根据业务关系的不同,将不同的数据表划分成若干个数据表群,并为每个数据表群建立对应的虚拟文件,这些数据表群与虚拟文件的对应关系都记录在日志文件中。
步骤22,根据用户请求访问的数据表在日志文件中的对应关系,将与用户请求访问的数据表对应的虚拟文件提供给用户访问。
用户对数据库的操作可能会出现多用户同时操作不同的数据表、多用户同时操作同一个数据表、多用户中既有同时操作不同的数据表的也有同时操作同一个数据表等复杂的情况,这些情况都容易导致数据库出现操作错误。
对于多用户同时操作的数据表不在同一个虚拟文件中的情况,本具体实施方式可以使用户通过日志文件中数据表和虚拟文件对应关系分别直接操作对应的虚拟文件。在每次使用数据库时都遵循日志文件中的数据表和虚拟文件发热对应关系,通过数据表名找到其对应的虚拟文件,以便操作对应的虚拟文件。
对于多用户同时操作同一个虚拟文件中的数据库的情况,可以使用最长等待时间优先算法排列各用户间的执行优先顺序,即当某用户需要操作较多数据时将DDL操作分成多块执行,以满足其他用户操作在短时间内可访问同一虚拟文件上的表数据。
另外,用户对数据库的操作还可能出现不同用户同时操作一个虚拟文件中的数据表,并且既有读操作也有写操作的并行读写操作的情况,在本具体实施方式中,可以采用数据封锁机制来解决并发操作中的数据一致性和完整性问题。封锁是防止存取同一资源的用户之间破坏性的干扰的机制,该干扰是指不正确地修改数据或不正确地更改数据结构。在本具体实施方式中使用两种封锁:排它(专用)封锁和共享封锁。排它封锁禁止相关资源的共享,如果一个事务以排它方式封锁一个资源,仅仅该事务可更改该资源,直至释放排它封锁;共享封锁允许相关资源可以共享,几个用户可同时读同一数据,几个事务可在同一资源上获取共享封锁,共享封锁比排它封锁具有更高的数据并行性。
本具体实施方式利用事务和封锁机制提供数据并发存取和数据完整性。在一个事务内由语句获取的全部封锁在事务期间被保持,防止其它并行事务的破坏性干扰,一个事务的SQL语句所作的修改在它提交之后所启动的事务中才是可见的,在一个事务中由语句所获取的全部封锁在该事务提交或回滚时被释放。
本具体实施方式在两个不同级上提供读一致性:语句级读一致性和事务级一致性。通过实施语句级读一致性,保证单个查询所返回的数据与该查询开始时刻相一致。所以一个查询从不会看到在查询执行过程中提交的其它事务所作的任何修改。为了实现语句级读一致性,在查询进入执行阶段时,在注视SCN的时候为止所提交的数据是有效的,而在语句执行开始之后其它事务提交的任何修改,查询将是看不到的。另外,本具体实施方式还可以通过实施事务级读一致性,以保证在同一事务内所有查询的数据的一致性。
对于数据库的并行读写操作,本具体实施方式可以选择使用不同封锁类型来控制数据的并行存取,防止用户之间的破坏性干扰。可以通过为一个事务自动地封锁其中的一个资源以防止其它事务对同一个资源的排它封锁。在某种事件出现或事务不再需要该资源时自动地释放,可以将相应的封锁类型分为以下三种:
数据封锁:数据封锁保护表数据,在多个用户并行存取数据时保证数据的完整性。数据封锁防止相冲突的DML和DDL操作的破坏性干扰。DML操作可在两个级获取数据封锁,即指定行封锁和整个表封锁,在防止冲突的DDL操作时也需表封锁。当行要被修改时,事务在该行获取排它数据封锁。表封锁可以有下列方式:共享封锁、排它封锁。
DDL封锁(日志控制封锁):DDL封锁保护模式对象(如数据表)的定义,DDL操作将影响对象,一个DDL语句隐式地提交一个事务。当任何DDL事务需要时自动获取日志控制封锁,用户不能显式地请求DDL封锁。在DDL操作期间,被修改或引用的模式对象被封锁。
内部封锁:保护内部数据库和内存结构,这些结构对用户是不可见的。
本具体实施方式提供的多用户操作数据库的流程可以参考图4,首先根据业务关系在日志文件中查找数据表对应的虚拟文件,若已经有用户在操作该虚拟文件,则进入等待,若没有用户在操作该虚拟文件,则执行对该虚拟文件的操作,通过本具体实施方式提供的方法,解决了多用户操作单文件数据库时由并行读写操作产生的容易破坏数据的问题,并使一个用户在操作数据库时不受其他用户的限制,实现了多用户同时高速操作单文件数据库。
本发明的具体实施方式还提供了一种访问单文件数据库的装置,如图5所示,具体可以包括:
虚拟文件建立单元51,用于根据业务关系将单文件数据库中的数据表分别建立对应的虚拟文件,将数据表和对应的虚拟文件建立对应关系,并将对应关系存储于日志文件中;
虚拟文件访问单元52,用于根据用户请求访问的数据表在日志文件中的对应关系,将与用户请求访问的数据表对应的虚拟文件提供给用户访问。
进一步地,在虚拟文件访问单元中,根据用户请求访问的数据表在日志文件中的对应关系包括对于每个访问请求都分别查找请求访问的数据表在日志文件中的对应关系。
另外,该装置还可以包括:
优先排序单元53,用于若多个用户同时请求访问同一个数据表相应的虚拟文件,则使用预定算法对多个用户进行优先级排序;
虚拟文件封锁单元54,用于若多个用户同时对同一个数据表相应的虚拟文件并行存取,则对同一个数据表相应的虚拟文件施行预定的封锁机制。
本具体实施方式可以通过虚拟文件建立单元51根据业务关系将单文件数据库中的数据表分别建立对应的虚拟文件,将数据表和对应的虚拟文件建立对应关系,并将对应关系存储于日志文件中;以及通过虚拟文件访问单元52根据用户请求访问的数据表在日志文件中的对应关系,将与用户请求访问的数据表对应的虚拟文件提供给用户访问。另外,还可以通过优先排序单元53使用预定算法对多个用户进行优先级排序;以及通过虚拟文件封锁单元54对同一个数据表相应的虚拟文件施行预定的封锁机制。
上述终端中包含的各单元的处理功能的具体实施方式在之前的方法实施方式中已经描述,在此不再重复描述。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求书的保护范围为准。