通用数据库操纵器的制作方法

文档序号:6608410阅读:130来源:国知局
专利名称:通用数据库操纵器的制作方法
背景技术
本发明涉及一种用于数据库的数据管理系统,其中该数据库响应由若干用户发起的数据操纵(manipulation)请求。这样的数据库在为诸如发出采购订单、准备报价、安排产品出货等的普通商务任务提供便利的企业管理系统、计算机网络中特别有用。在这样的系统中,数据库存储被称为“商务对象”、用来存储关于这些商务任务的数据的各种数据记录,以及诸如关于客户、厂家、供应商和分销商伙伴(统称为“商务伙伴”)的信息的其它商务记录。企业管理系统可以向若干操作者提供支持,所述若干运营商可能发出并发的且可能相冲突的寻址相同数据记录的请求。如果不相互考虑就执行对于数据库的多个请求(这里称为“事务(transaction)”),则可能引起数据一致性错误。
目前,用于事务管理的方法严重依赖于系统的下层结构和数据库格式。例如,图1示出了可用在现有技术中执行的一种用于事务管理的简单方法的流程图。如图所示,在101,用户1开始与数据库的连接,在102,该连接锁定他感兴趣的对象。如果用户1不能成功锁定他感兴趣的对象,则过程返回101。如果对该对象成功进行了锁定,则没有其他系统用户(例如,用户2)可以对被锁定的对象进行操作。在103,用户1启动事务,并在104、105、106和107执行像“检查(check)”、“选择”、“插入”、“更新/删除”这样的数据库操作。如果在数据库操作过程中发生错误,在108执行事务回退(rollback),它使被锁定对象的状态还原到它在锁定前的状态。其后,过程前进到110。如果没有错误发生,则在109用户1可以将事务结果提交(commit)给存储器,使事务保持不变(permanent),并且过程前进到110。在110,解锁对象并释放连接。其他用户,例如用户2,只要他能够锁定他感兴趣的对象,就能执行事务,如111、112、113、114、115、116、117、118、119和120所示。在这样的系统中,如果两个用户向共同的对象发出并发的(concurrent)请求,则只有一个用户能够锁定该对象。当第一个用户的锁定有效时,其他用户的操作被延迟。
可获得的事务管理要求从数据库或平台对事务直接支持。然而,不同厂家的数据库或平台所支持的操作是不同的。例如,有些数据库可能不支持事务的显式开始(explicit start),有些只支持隐式(implicit)数据库提交。
可获得的方法要求相当多的编码以对并发进行处理。在多用户环境中,有两种用于在数据库中更新数据的公共模型乐观并发(optimisticconcurrency)和悲观并发(pessimistic concurrency)。悲观并发要求大量的代码来锁定和解锁数据对象。有些应用使用时间戳来实现乐观并发,但也需要相当多的编码。而且,不可能同时支持乐观并发和悲观并发两者。
像授权、检查、约束(Constraint)、主关键字(Primary Key)和外关键字(Foreign Key)这样的数据库控制语言(DCL)在不同厂家的数据库中的语法不同。一些数据库或平台可能不支持主关键字和外关键字检查。由于数据验证(validation)不足,编程员必须编写相当多行代码来在更新数据库之前检查数据。
因此,期望提供一种提供有效的并发和数据验证检查、但独立于数据库的类型并且不要求额外的编码的通用数据操纵方法。还期望提供一种具有加强的异常处理、性能调整和表条目权限检查的通用数据操纵方法。

发明内容
根据本发明的一个方面,提供一种用于操纵数据库中的数据的方法,包括响应于来自用户的、用以操纵数据库中的数据对象的命令,在中间层向该数据对象分配缓存器存储器;对所述缓存器存储器中的数据对象执行所述命令;以及将由该命令导致的任何数据变化临时存储在该缓存器存储器中。
根据本发明的另一方面,提供一种数据存储设备与多个用户之间的接口,包括至少一个数据操纵模块,用以执行用于操纵所述数据存储设备中的数据的用户命令;缓存器部分,用于临时存储由在所述接口中执行的用户命令所引起的数据变化;以及命令提交模块,用于将临时存储在所述缓存器部分中的数据变化存储到所述数据存储设备中。
根据本发明的再一个方面,提供一种数据存储系统,包括数据存储设备;以及中间层,包括至少一个数据操纵模块,用于执行用来操纵该数据存储设备中的数据的用户命令;缓存器部分,用于临时存储由在所述中间层中执行的用户命令所导致的数据变化;以及命令提交模块,用于将临时存储在所述缓存器部分中的数据变化存储到所述数据存储设备中。


图1是示出可获得的事务管理方法的流程图。
图2是示出根据本发明实施例的中间层的框图。
图3是示出根据本发明实施例的检查主关键字模块的操作的流程图。
图4是示出根据本发明实施例的插入操作的流程图。
图5是示出根据本发明实施例的更新操作的流程图。
图6是示出根据本发明实施例的删除操作的流程图。
图7是示出根据本发明实施例的选择操作的流程图。
图8是示出根据本发明实施例的通用数据操纵方法的流程图。
具体实施例方式
本发明的实施例提供一种用于商务应用的数据库预处理器(这里称为“中间层”),以用于在事务提交给数据库之前提供对数据库事务的预处理。中间层可以临时存储变化的数据,可以在更新数据库之前验证和锁定数据,并且可以在调用提交方法时同步变化的数据并对它进行整体上的解锁。以这种方式,对象的数据库备份(copy)可以以较短的基本(atomic)事务来锁定和释放。
在本发明的实施例中,对于所有的数据交互只需要六种通用方法,并且事务、隔离级别(isolation level)、异常格式和性能调整可以用这六种通用方法来集中地(centrally)执行。本发明可以在中间层中创建缓存器部分(或提交段),在缓存器中执行像插入、更新、删除和选择这样的操作,并最终把数据变化存储到数据存储设备中的缓存器中。
在本发明的实施例中,中间层可以包括一个集中式缓存器存储器来存储预处理数据。缓存器存储器被分成多个子段(subsection),或提交段(commitsegment)。不同用户或连接可以被分配单独的缓存器字段(或提交段)。典型地,一个用户不能访问其他用户的提交段。可以使用用户戳来维护用户专用的提交段。
在本发明的实施例中,典型地,不同提交段不会具有相同的记录,这由锁定机制来保证。当用户事务引起例如通过像“插入”、“更新”和“删除”这样的操作对数据对象进行写入时,数据最初被写入提交段而不是数据库本身。然而,当用户事务引起例如通过选择操作从数据对象进行读取时,该读取可以考虑来自用户提交段和数据库的对象数据。
图2示出了根据本发明实施例的中间层的框图。可以在服务器203的数据存储设备202与用户1、用户2、……、用户N之间提供中间层201。中间层201可以是服务器203中的编程接口,用来便利寻址到数据存储设备202的事务。中间层201可以提供六个公共接口“插入”方法204、“更新”方法205、“删除”方法206、“选择”方法207、“提交”方法208和“回退”方法209。插入方法导致向数据对象插入新数据项。更新方法导致新数据覆盖(overwrite)数据对象中的旧数据。删除方法导致数据项被从数据对象删除。选择方法导致数据项被从数据对象中读取。提交方法导致数据被存储到数据库,而回退方法使数据对象的状态回复到它在当前事务开始前所具有的状态。事务可以通过一系列这些操作来建立。
为了执行事务,用户调用这些公共接口之一。对象数据被读取到中间层201,并且该操作可能引起临时存储在缓存器210中的对象数据的变化。变化的数据存储在提交段中,但在用户调用提交方法208之前不会永久存储在数据存储设备中。如果用户不想永久存储数据操作,则用户例如可以调用回退方法209。
因此,用户通过调用这些接口而非编写代码来执行数据操作。中间层处理事务管理,节省用户的时间和精力。
在本发明的实施例中,数据验证也可以通过中间层来检查。例如,如图2所示,中间层201具有下列模块用于数据验证检查数据结构模块211、检查主关键字模块212和检查外关键字模块213。
检查数据结构模块211可以确保从用户接收的数据的结构与当数据对象驻留在数据库中时数据对象的结构匹配,从而使插入、更新和删除操作不会导致错误。模块211比较接收到的数据的结构与数据存储设备中的以及缓存器中的数据的结构。如果它们相同,则允许插入、更新或删除操作。否则,向用户呈现错误消息。
检查主关键字模块212确保新条目的主关键字在插入操作之前在数据存储设备的数据库中不存在,但在更新操作之前在数据库中存在。主关键字是数据库表中被索引且保持该表的主顺序的域。如果数据库具有条目的主关键字,则数据库已经具有该条目,所以用户可以更新该条目,但是不能将具有相同主关键字的条目插入到数据库中。如果数据库不具有条目的主关键字,则用户可以将该条目插入到数据库中,但是不能对该条目执行更新操作。
图3示出了根据本发明实施例的检查主关键字模块212的操作的流程图。在300,中间层响应于用户活动而接收新的条目。在301,模块212通过调用用于管理对数据库的同时访问的数据并发策略来获得关键字域(key field)。从302到303,该模块检查缓存器,特别是会话缓存器221中的主关键字。在302,确定在条目中是否存在重复的关键字。如果不存在,则过程前进到305。
如果重复的关键字存在且操作为插入,则在303向用户呈现错误消息。如果重复的关键字存在且操作为更新,则过程前进到305。
由于数据操作通常涉及会话缓存器221中的数据和数据库202中的数据两者,因此图3所示的实施例检查会话缓存器中的主关键字和数据库中的主关键字两者。在305、306、307、308、309、310和311,该模块可以检测数据库中的主关键字。在305,过程可以根据新条目从数据库中选择数据,并且可以将检索到的数据临时存储在缓存器中。该模块在306可以确定在所检索到的数据中是否存在重复的关键字。如果没有,则过程可以前进到307,并且插入操作被允许。
如果在所检索到的数据中存在重复的关键字并且动作为插入操作,则可以在在308向用户呈现错误消息。如果存在重复的关键字且动作为更新操作,则可以在309将该条目的关键字与所检索到的数据的关键字进行比较。如果不匹配,则可以在310向用户呈现错误消息。否则,可以在311允许更新操作。
如果在302存在重复的关键字且操作为更新,则没有必要检查数据库表中该条目的主关键字。因此,为了提高效率,模块212不需要检查数据库中该条目的主关键字。
模块213可以在插入或更新操作之前检查新条目是否具有外关键字。在有关系的(relational)数据库中,外关键字是在另一个表中被索引的一个表中的域。
因此,中间层可以为用户检查数据结构、主关键字和外关键字。用户没有必要编写用于数据验证的代码,从而可以节省相当多的时间和精力。
锁定表模块214可以确保在插入、更新和删除操作之前对对象施加锁定。当第一用户经由中间层从数据存储设备读取记录时,模块214可以锁定该记录。锁定的对象被池化(pool)到锁定对象池222中。如果第二用户试图读取同一记录,则模块214将根据内部隔离级别策略向该第二用户呈现错误消息,或者允许第二用户读取该记录。如果第二用户试图更新或删除该记录,则模块214可以返回错误消息,以指示该记录正在被读取,并且不能被改变。
因此,中间层可以为用户实现数据并发。当用户访问缓存器或数据库时,中间层可以调用方法“锁定表”。本发明的并发处理独立于被访问的数据库的类型,并可以节省用户花费在编写用于数据并发的代码上的时间和精力。
在其它实施例中,模块215可以用于异常处理。当在数据操作、数据验证检查或数据并发处理中存在错误时,模块215向用户呈现错误消息。
模块216可以支持权限检查功能,该功能确定用户是否具有执行想要执行的操作的权限。模块216可以保存所有用户的用户ID以及用户的权限级别的表,即,用户具有读取、更新和/或删除的权限以及用户究竟是否具有写入的权限的记录。例如,一些用户可能仅仅具有从数据存储设备读取数据的许可,但不能向数据存储设备写入。因此,权限检查可以在用户访问缓存器或数据存储设备时由中间层集中地执行。
图4示出了根据本发明实施例的插入操作的流程图。插入操作可以将数据临时插入到缓存器中或物理地插入到数据存储设备中。在401,用户可以调用插入方法204并且可以提供要插入的数据和所涉及的表的名称。在402,插入方法可以调用用于“锁定表”、“检查主关键字”、“检查外关键字”和“检查数据结构”的方法。如果发生错误,则过程可以结束。
在403,输入数据由放置数据到缓存器(Put Data to Buffer)模块230插入到会话缓存器221中。可以从数据存储设备检索所涉及的将接收该数据的表,并将其临时存储在会话缓存器221中以作为缓存器表。输入的数据被添加到该缓存器表中。如果缓存器或数据存储设备中没有具有所涉及的表的表名称的条目,则可以创建新的表名称,并且输入的数据可以添加到其中。
在404,变化的数据可以被导出到缓存器中的临时存储区域。
在405,插入方法可以经由产生和放置插入SQL(Generate and Put InsertSQL)模块231来调用更新任务模块220中的插入函数。变化的数据准备好被存储到数据库中,并且等待将被调用的提交方法。
图5示出了根据本发明实施例的更新操作的流程图。该更新操作可以更新缓存器中的数据和数据存储设备中的数据。
在501,用户可以调用更新方法205,并且可以提供数据和所涉及的表的名称。在502,更新方法可以调用用于锁定表、检查数据结构、检查主关键字和检查外关键字的方法。如果发生错误,则过程可以结束。在503,输入的数据可以由放置数据到缓存器模块230插入到会话缓存器221中。在504,变化的数据可以被导出到缓存器中的临时存储区域。在505,更新方法205可以经由产生和放置更新SQL(Generate and Put Update SQL)模块232调用更新任务模块220中的更新函数。变化的数据准备好被存储到数据库中,并且只要调用提交方法就可以被存储。
图6示出了根据本发明实施例的删除操作的流程图。删除操作用来从缓存器和数据存储设备中删除数据。
在601,用户可以调用删除方法206,并且可以提供待删除的数据和所涉及的表的名称。在602,删除方法可以调用诸如锁定表、检查数据结构、检查主关键字和检查外关键字的方法。如果发生错误,则过程可以结束。在603,可以通过放置数据到缓存器模块230从会话缓存器221中删除输入的数据。在604,变化的数据可以被导出到缓存器中的临时存储区域。在605,删除方法206可以通过产生和放置删除SQL(Generate and Put Delete SQL)模块233来调用更新任务模块220中的删除函数。变化的数据准备好被存储到数据库中,并且只要调用提交方法就可以存储变化的数据。
图7示出了根据本发明实施例的选择操作的流程图。该选择操作用于根据选择标准从缓存器和数据存储设备中选择数据。
在701,用户可以调用选择方法207,并且可以提供选择标准和所涉及的表的名称。在一个实施例中,标准支持按范围选择。它具有选择因子列表。每个选择因子可以包含每个域的域名称和选择范围。在702,选择方法可以调用数据结构检查方法。如果发生错误,则过程可以结束。在703,如果按照悲观并发协议操作,则选择方法可以使能锁定,或者如果按照乐观并发协议,则选择方法可以禁止锁定。被锁定的对象可以被池化到锁定对象池222中。在704,可以经由从缓存器选择(Select from Buffer)模块241和从数据库选择(Select from Database)模块242根据选择标准从缓存器和数据库中选择数据。
在图4至图7所示的实施例中,可以通过SAP内部表技术(Internal TableTechnology)来组织数据。
用户可以调用提交工作模块208以提交被插入、更新和删除操作改变并且存储在缓存器中的数据,从而将该变化的数据物理地存储到数据存储设备中。提交工作模块可以经由执行会话SQL(Execute Session SQL)模块217将用户的提交段中的所有变化同步到数据库中。
用户可以使用回退工作模块209来撤销由插入、更新或删除操作造成的变化。
在提交工作操作或回退工作操作之后,应当通过调用清除会话缓存器方法218来显式地(explicitly)清除缓存器,特别是用户的提交段。结果,通过释放会话锁定方法219释放所有表锁定。
图8示出了根据本发明实施例的通用数据操纵方法的流程图。在801,用户1可以开始与数据库的连接。在802,用户1可以插入一些数据到数据库中,然后在803释放连接。用户1可以在804、805和806执行更新和删除操作,并且在807、808和809执行选择操作。取决于在810是否要求了回退,用户1可以在811将所有操作一起提交,或者在812一起回退所有操作。用户2可以在步骤821、822、823、824、825、826、827、828、829、830、831和832并行地执行类似的操作。与图1所示的方法相比,连接保持的时间短得多。
缓存器210不仅用于临时存储来自用户的数据和被用户操作改变的数据,而且还用来临时存储从数据存储设备202检索到的数据。本领域技术人员将会理解,在缓存器中对从数据库中检索到的数据执行操作比直接在数据库中对数据执行操作快。中间层的性能可以通过利用交换(swapping)算法在缓存器中缓存数据存储设备中的所有数据来进一步提高。
尽管在上文参照一些实施例详细描述了本发明,但是在本发明范围和精神内的变化对于本领域普通技术人员来说是显而易见的。例如,尽管实施例是参照计算机描述的,但是也可以使用其它电气设备。
权利要求
1.一种用于操纵数据库中的数据的方法,包括响应于来自用户的、用以操纵数据库中的数据对象的命令,在中间层向该数据对象分配缓存器存储器;对所述缓存器存储器中的数据对象执行所述命令;以及将由该命令导致的任何数据变化临时存储在该缓存器存储器中。
2.如权利要求1所述的方法,其中,从由插入、更新、删除和搜索构成的组中选择所述命令。
3.如权利要求1所述的方法,其中,所述中间层还包括数据操纵机制,该数据操作机制从用于将数据插入到数据库中的机制、用于更新数据库中的数据的机制、用于从数据库中删除数据的机制以及用于在数据库中搜索数据的机制所构成的组中选择。
4.如权利要求1所述的方法,还包括如果用户调用命令提交机制,则将数据变化存储到数据库中。
5.如权利要求1所述的方法,其中,所述中间层还包括命令回退机制。
6.如权利要求5所述的方法,还包括如果用户调用命令回退机制,则从缓存器存储器中清除所述数据。
7.如权利要求1所述的方法,还包括将缓存器存储器分成多个用户专用的提交段,每个提交段只保存一个用户的记录。
8.如权利要求7所述的方法,其中,通过用户戳来保持所述提交段的用户专用。
9.如权利要求1所述的方法,还包括在执行命令之前,由所述中间层对照数据库中的数据的数据结构来检查从用户接收到的数据的数据结构。
10.如权利要求9所述的方法,还包括如果从用户接收到的数据的数据结构与数据库中的数据的不同,则提供错误消息。
11.如权利要求1所述的方法,还包括在执行命令之前,由所述中间层检查新条目是否具有主关键字。
12.如权利要求11所述的方法,还包括如果在数据库中存在新条目的主关键字但所述命令为插入,则提供错误消息。
13.如权利要求11所述的方法,还包括如果在数据库中不存在新条目的主关键字但所述命令为更新,则提供错误消息。
14.如权利要求1所述的方法,还包括在执行命令之前检查新条目是否具有外关键字。
15.如权利要求1所述的方法,还包括当用户访问数据库中的记录时锁定该记录。
16.如权利要求1所述的方法,还包括在执行命令之前由所述中间层检查用户的权限。
17.如权利要求1所述的方法,还包括将数据库中的所有数据缓存到缓存器存储器中。
18.一种数据存储设备与多个用户之间的接口,包括至少一个数据操纵模块,用以执行用于操纵所述数据存储设备中的数据的用户命令;缓存器部分,用于临时存储由在所述接口中执行的用户命令所引起的数据变化;以及命令提交模块,用于将临时存储在所述缓存器部分中的数据变化存储到所述数据存储设备中。
19.如权利要求18所述的接口,其中,所述用户命令是从由插入、更新、删除和搜索构成的组中选择的。
20.如权利要求18所述的接口,其中,所述数据操纵模块是从由用于将数据插入到所述数据存储设备中的模块、用于更新该数据存储设备中的数据的模块、用于从该数据存储设备删除数据的模块、以及用于在该数据存储设备中搜索数据的模块所构成的组中选择的。
21.如权利要求18所述的接口,还包括回退模块,用于撤销由用户命令导致的数据变化。
22.如权利要求18所述的接口,其中,所述缓存器部分被分成多个用户专用的提交段,每个提交段只保存一个用户的记录。
23.如权利要求22所述的接口,其中,通过用户戳来保持所述提交段的用户专用。
24.如权利要求18所述的接口,还包括检查数据结构模块,其在执行用户命令之前对照所述数据存储设备中的数据的结构检查从用户接收到的数据的结构。
25.如权利要求18所述的接口,还包括检查主关键字模块,其在执行用户命令之前检查新条目是否具有主关键字。
26.如权利要求18所述的接口,还包括检查外关键字模块,其在执行用户命令之前检查新条目是否具有外关键字。
27.如权利要求18所述的接口,还包括锁定表模块,其锁定所述数据存储设备中被用户访问的记录。
28.如权利要求18所述的接口,还包括权限检查模块,其在执行用户命令之前检查用户的权限。
29.如权利要求18所述的接口,还包括异常处理模块,其在发生错误时向用户提供错误消息。
30.如权利要求18所述的接口,还包括缓存器清除模块,其在提交或回退命令之后清除缓存器。
31.一种数据存储系统,包括数据存储设备;以及中间层,包括至少一个数据操纵模块,用于执行用来操纵该数据存储设备中的数据的用户命令;缓存器部分,用于临时存储由在所述中间层中执行的用户命令所导致的数据变化;以及命令提交模块,用于将临时存储在所述缓存器部分中的数据变化存储到所述数据存储设备中。
32.如权利要求31所述的系统,其中,所述用户命令从由插入、更新、删除和搜索构成的组中选择的。
33.如权利要求31所述的系统,其中,所述数据操作模块是从由用于将数据插入到所述数据存储设备中的模块、用于更新该数据存储设备中的数据的模块、用于从该数据存储设备删除数据的模块、以及用于在该数据存储设备中搜索数据的模块所构成的组中选择的。
34.如权利要求31所述的系统,其中,所述中间层还包括命令回退模块,用于撤销由命令导致的数据变化。
35.如权利要求31所述的系统,其中,所述缓存器部分被分成多个用户专用提交段,每个提交段只保存一个用户的记录。
36.如权利要求35所述的系统,其中,通过用户戳来保持所述提交段的用户专用。
37.如权利要求31所述的系统,还包括用于对照所述数据存储设备中的数据的数据结构来检查从用户接收到的数据的数据结构的模块。
38.如权利要求31所述的系统,还包括用于检查新条目是否具有主关键字的模块。
39.如权利要求31所述的系统,还包括用于检查新条目是否具有外关键字的模块。
40.如权利要求31所述的系统,还包括用于检查用户的权限的模块。
全文摘要
提供一种商业应用中的中间层,用以总体覆盖(wrap)所有数据库管理操作,临时存储变化的数据,在更新数据库之前验证和锁定数据,以及当调用提交方法时,同步数据变化并将其作为整体进行解锁。在实施例中,对于所有数据交互只需要六种通用方法。事务、隔离级别、异常格式以及性能调整操作可以用这六种通用方法集中地执行。可以在中间层创建缓存器部分。对存储在缓存器中的数据执行诸如插入、更新、删除和选择的操作。然后缓存的数据可以被存储到数据存储设备中。
文档编号G06F17/30GK101046821SQ20071009210
公开日2007年10月3日 申请日期2007年4月2日 优先权日2006年3月31日
发明者魏海钞, 石苓 申请人:Sap股份公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1