CN102200977B - 多租户环境下扩展数据库表的方法和*** - Google Patents

多租户环境下扩展数据库表的方法和*** Download PDF

Info

Publication number
CN102200977B
CN102200977B CN201010132487.0A CN201010132487A CN102200977B CN 102200977 B CN102200977 B CN 102200977B CN 201010132487 A CN201010132487 A CN 201010132487A CN 102200977 B CN102200977 B CN 102200977B
Authority
CN
China
Prior art keywords
tenant
database table
description document
request
extended field
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.)
Expired - Fee Related
Application number
CN201010132487.0A
Other languages
English (en)
Other versions
CN102200977A (zh
Inventor
刘长浩
王宁
王启荣
王小锋
周英华
肖振春
张春林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Priority to CN201010132487.0A priority Critical patent/CN102200977B/zh
Priority to US13/053,032 priority patent/US8346747B2/en
Publication of CN102200977A publication Critical patent/CN102200977A/zh
Application granted granted Critical
Publication of CN102200977B publication Critical patent/CN102200977B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及数据库技术,尤其涉及在多租户环境下对数据库表进行扩展的技术。本发明提供了一种用于扩展数据库表的方法,包括:接收租户关于扩展数据库表的请求;以及根据所接收到的请求,生成对应于所述租户的描述文件,所述描述文件将为数据库表定义的扩展字段描述为至少一个扩展列。

Description

多租户环境下扩展数据库表的方法和***
技术领域
本发明涉及数据库技术,尤其涉及在多租户环境下对数据库表进行扩展的技术。
背景技术
由于SaaS(Software as a Service软件作为服务、软件即服务)的出现,软件行业正在经历一场深刻的变革。SaaS在许多国家已经流行并进入了普及阶段。SaaS的安全技术日新月异,越来越多的企业开始认可SaaS安全性和可靠性。基于互联网的特点,SaaS软件有许多区别于前一代软件的独特性,从服务器端软件和数据库、数据传输、到客户端浏览器都出现了许多新技术。
开发SaaS软件***时,均建立在多重租赁(Multi-Tenant),又称“多租户”的基础上,也就是一套软件和数据库平台,经过软件和数据库的隔离及保密等技术,多个企业(或者企业内部多个租户)同时使用。虽然非多重租赁的SaaS产品不一定是“假SaaS”产品,然而多重租赁大大提高了运营效率、稳定性,降低运营商的维护和升级成本,变相地说最终消费者得到了价格上的实惠。
在SaaS***中,相对于应用程序计算逻辑/层面而言,如何处理多租户(Multi-Tenant)对数据库的访问更具有挑战性。在与“多租户对数据库的访问”相关的问题中,如何满足不同的租户对于扩展数据库表的不同需求是一个基础性的问题。举例而言,在某SaaS员工信息***中,存在一个基础信息统计表I,在表I中,租户A需要对其内部每个员工的员工代码进行记录,用于标识员工,而租户B不需要记录其每个员工的员工代码,而是通过记录员工的家庭住址来标识员工。这就导致该员工信息***在设计数据库表时会产生难题,因为在设计该***时无法充分预料到未来的租户可能会有哪些对数据库表的需求。
目前存在一些在多租户环境下扩展数据库表的技术方案。根据一种现有技术中的解决方案,可以在设计多租户SaaS应用***时为每个数据库表定义好所有的允许租户根据各自不同的需求去扩展的数据库表列。根据上面的例子,可以在设计该员工信息***时就在表I中定义好一个可扩展的空表列。“员工代码”列和“员工家庭住址”列。这样,租户A就可以选择该空表列作为“员工代码”列,而租户B就可以选择该空表列作为“员工家庭住址”列,从而根据各自的需求将该预先定义好的可扩展的空表列定义为其所需的表列,并完成相应的数据输入、查询等数据库操作。该解决方案的显著缺点是:如果在设计***时开发人员只提供了较少的可扩展的空表列,那么大量租户的对数据库表进行扩展的需求可能将无法得到满足。而如果在设计***时开发人员提供了大量的可扩展的空表列,那么又会使得数据库表占用并且浪费大量空间,因为有许多可扩展表列可能仅仅是极个别租户所需的。在有些情况下,上述两个缺点可能同时发生:既存在一些租户的需求无法被满足,又存在大量的可扩展表列的使用率极低导致大量空间被浪费。该解决方案的再一缺点是:由于事先定义的可扩展的空表列不包含数据类型等相关信息(如数字型、日期型、字符串型),这些信息必须由租户自行定义,因此必须通过联合操作(JointOperation)才能对数据正确进行解释,这就会耗费大量的运算资源从而影响***性能以及用户体验。并且这样的解决方案需要多租户应用***的开发者对于该产生的租户需求非常了解,会加大***开发者的负担。
根据另一种现有技术中的解决方案,通过创建私有表来为每个租户存储其私有数据(需要扩展的数据表列)。该解决方案的显著缺点是:其一,需要在多租户***中创建大量的私有表以满足大量未知租户的需求,并且所能创建的私有表的数量受到数据库管理***DBMS的限制;其二,租户对其创建的私有数据(扩展表列中的数据)进行操作时,必须通过私有表和公有表之间的联合操作(Join Operation)才能进行,会耗费大量的运算资源从而影响***性能以及用户体验。
发明内容
考虑到上述存在的问题,本发明的目的之一在于提供一种对应用的开发者透明的扩展数据库表(定制化)的方法和***。本发明的又一目的在于提供一种对租户而言具有统一的数据模型的扩展数据库表(定制化)的方法和***。本发明的再一目的在于提供一种无需占用大量数据库空间并且在执行数据库处理操作时无需进行联合操作(Joint Operation)的扩展数据库表(定制化)的方法和***。
根据本发明的一个方面,提供了一种用于扩展数据库表的方法,包括:接收租户关于扩展数据库表的请求;以及根据所接收到的请求,生成对应于所述租户的描述文件,所述描述文件将为数据库表定义的扩展字段描述为至少一个扩展列。
根据本发明的一个实施方式,所述方法还包括:接收所述租户对所述数据库表的数据处理请求,所述数据处理请求与所述数据库表的扩展字段相关;根据所述租户的标识信息以及所述数据处理请求要处理的数据库表,查找对应于所述租户的所述描述文件;根据所查找到的所述描述文件的内容,重写所述数据处理请求;以及利用重写后的数据处理请求执行数据处理。
根据本发明的另一方面,提供了一种用于扩展数据库表的***,包括:扩展请求接收装置,用于接收租户关于扩展数据库表的请求;以及描述文件生成装置,用于根据所接收到的请求,生成对应于所述租户的描述文件,所述描述文件将为数据库表定义的扩展字段描述为至少一个扩展列。
通过本发明的方法和***,可以实现使得扩展数据库表的过程无论对于多租户***的设计开发者而言还是对于租户自身而言都是透明的技术效果。还可以实现向租户提供一种统一的数据模型来扩展数据库表(定制化)的技术效果。还可以实现在扩展数据库表时无需占用并浪费大量的数据库空间的技术效果。
附图说明
通过对结合附图所示出的实施方式进行详细说明,本发明的上述以及其他特征将更加明显,本发明附图中相同的标号表示相同或相似的部件。在附图中,
图1示出了根据本发明一个实施例的用于扩展数据库表的方法的流程图;
图2示出了根据本发明另一个实施例的用于扩展数据库表的方法的流程图;
图3示出了在图1或图2的基础上根据本发明一个实施例的用于扩展数据库表的方法的流程图;
图4A至4D示出了根据本发明又一个实施例的对数据库表进行扩展的实例的表结构变化图,其中图4A示出了多租户***(平台)中的一个未经扩展的“employee”表,图4B示出了定义了扩展字段后的“employee”表,也就是定义了扩展字段后的多租户***的后端数据库中的实际表结构,图4C示出了租户tenant1扩展了其所需的“ID”列的前端(租户端)的数据结构展示,图4D示出了租户tenant2扩展了其所需的“Home Address”列的前端(租户端)的数据结构展示;
图5示出了根据本发明一个实施例的用于扩展数据库表的***的结构图;
图6示出了根据本发明另一个实施例的用于扩展数据库表的***的结构图。
具体实施方式
在下文中,将参考附图通过实施方式对本发明提供的用于确定要被物化的节点的方法和***进行详细地描述。
图1示出了根据本发明一个实施例的用于扩展数据库表的方法的流程图。首先需要指出的是,在本说明书、权利要求书以及附图的任何地方,“扩展数据库表”并不一定意味着从物理上或者实际上对数据库表进行了真正的扩展,而可能意味着虽然没有真正从物理上或者实际上扩展数据库表,但是对于多租户***中的租户而言,产生了扩展数据库表的效果或用户体验。
在步骤101中,接收租户关于扩展数据库表的请求。根据本发明的一个实施方式,租户的扩展数据库表的请求可以是例如:“ALTERTABLE employee ADD COLUMN homeaddress varchar(100)”这样的SQL语句。在多租户***中,有的租户可能需要对原始数据库表进行扩展,而有的租户可能不需要对原始数据库表进行扩展,并且有扩展需求的租户对于将原始数据库表扩展多少列、扩展什么列这样具体的扩展需求也是不同的。租户扩展数据库表的请求的表达方式可以有多种。如上面所举的例子,租户可以通过输入SQL语句中的“ALTERTABLE...ADD COLUMN”语句来直接表达其扩展数据库的请求,也可以通过其它任何可能的语句和模式来表达该种请求,只要租户提出的请求包含有扩展数据库表的目的(虽然可能并不是唯一目的),即可认为租户提出了扩展数据库的请求。当然,多租户***(平台)可以另行设置一些对扩展数据库的请求的类型或格式的限制。
接下来进行至步骤102,根据所接收到的请求,生成对应于所述租户以及所述数据库表的描述文件,所述描述文件将为数据库表定义的扩展字段描述为至少一个扩展列。下面,首先详细介绍扩展字段的含义和定义过程。
在多租户应用***或多租户应用平台上,***或平台的开发者已经定义了一些数据库表,这些数据库表中可以包括一些基础性的表列(也就是无论是什么租户来使用,都会需要的表列)。例如在员工信息管理***这样一个多租户***中,该***的开发者可能定义了一个名叫“employee”的表,这个表中包含有“员工姓名”、“员工性别”等所有租户都会使用的列。根据本发明,除了这些已经由多租户***的开发者定义好的表列之外,再加入一个用于由各个租户根据自身的需求来扩展的扩展字段,由于此时多租户***的开发者不可能清楚准确地预计到租户会需要什么样的表列,因此这个扩展字段不对要扩展的表列的标题或者信息类型作出任何限定。同时这个扩展字段也不是通常意义上的空列,因为空列实际上相当于仅仅为原始的数据库表预留了一个数据存储空间,并且空列的数目必须是事先确定的。而根据本发明,可以只定义一个扩展字段,并且根据这一个扩展字段可以扩展出不限定数目的表列。根据本发明的一个实施方式,为数据库表定义的扩展字段是可扩展标记语言(XML)类型的字段,而对于该XML类型的字段,可以有多个不同的描述文件来验证XML数据的有效性。根据本发明的另一个实施方式,为数据库表定义的扩展字段是Java脚本对象注释(JavaScript Object Notation)(下文简称Json)类型的字段。本领域技术人员应当了解,除了XML和Json之外,依据数据库类型的不同,可以定义其它各种类型的扩展字段,均落入本发明的保护范围。
在为数据库表定义的扩展字段是XML类型字段的实施方式下,根据本发明的一个实施方式,在多租户***或多租户平台上线运行前就在多租户***或平台的数据库表中定义了XML类型的扩展字段。根据本发明的另一个实施方式,在多租户***或多租户平台上线运行前并不在数据库表中定义XML类型的扩展字段,而是在接收到来自租户(tenant)的扩展数据库表的请求时,先在数据库表中定义XML类型的扩展字段。同理,在定义Json类型的扩展字段的情况下,也可以有上述两种实施方式。也就是说,在图1中的步骤101和“为数据库表定义扩展字段”之间并没有绝对的时间上的先后顺序。在第一种实施方式下(先“为数据库表定义扩展字段”,再执行步骤101),在多租户***或平台上线运行前通过例如下面的语句为数据库中的表增加XML扩展字段:ALTER TABLE employee ADD COLUMN X_COLXML。其中,“employee”是表的名称,“X_COL XML”即表示XML类型的扩展字段。在第二种实施方式下(先执行步骤101,再“为数据库表定义扩展字段”),租户的扩展数据库表的请求可以是例如:ALTER TABLE employee ADD COLUMN homeaddress varchar(100)。其中“homeaddress”表示租户希望在名称为“employee”的表中增加名称为“homeaddress”的列,“varchar(100)”表示该列具有可变长度的字符类型,最多不超过100个字符。当在步骤101中接收到例如上面的来自租户的扩展数据库表的请求时,即在“employee”表中定义一个XML类型的扩展字段,然后再根据所接收到的租户的扩展数据库表的请求中的具体内容来生成将所定义的扩展字段描述为至少一个扩展列的描述文件,具体生成描述文件的方式将在下文详述。本领域技术人员应当了解,也可以采用另外的实施方式,例如对于一部分的表,在多租户***或平台上线运行前即定义好扩展字段,而对于另一部分的表,当实时运行过程中接收到来自租户的扩展数据库表的请求时再定义扩展字段。但是一旦某个表已经存在了定义好的扩展字段,那么所有的租户在提出扩展数据库表的请求时都无需再重新定义扩展字段,而只需要生成新的描述文件即可。也就是说,对于一个特定的表而言,扩展字段适用于多个租户或者所有的租户(也就是由多个租户共享)。本领域技术人员还应当了解,上文中给出的定义扩展字段和来自租户的请求的语句均只是为了示例性地说明技术方案,并非构成对本发明保护范围的任何限制,根据数据库类型的不同,本领域技术人员完全可以采用其它的语句描述方式而仍然落入本发明的保护范围。
根据本发明的一个实施方式,无论是在多租户***或平台上线运行前就定义好扩展字段,还是在接收到来自租户(tenant)的扩展数据库表的请求时再定义扩展字段,也无论租户的数量以及每个租户需要扩展的数据库表列的数量,对于一个数据库表而言,只定义一个扩展字段。这是因为,XML和Json均属于描述性的语言,可以通过描述文件的方式对一个扩展字段进行多种描述,从而根据不同租户的不同需求而生成多种描述文件以实现对数据库表的扩展。
还需要特别指出的是,无论是在多租户***或平台上线运行前就定义好扩展字段,还是在接收到来自租户(tenant)的扩展数据库表的请求时再定义扩展字段,都不需要了解租户要扩展的数据库表列的具体内容(包括列标题以及数据格式信息等均无需了解)。也就是说,对于多租户***的租户以及多租户***的设计开发者而言,扩展数据库表的操作都是透明的。因为多租户***的设计开发者在定义扩展字段时无需了解将来租户需要扩展什么样的表列,而租户在实际使用多租户***时如果需要扩展表列的话也只需按照传统的方式提出扩展数据库表的SQL语句即可而并不知晓在原始数据库表中已经定义了一个扩展字段。在接收到来自租户(tenant)的扩展数据库表的请求时再定义扩展字段的实施方式下,并非根据租户的扩展数据库表的请求的具体内容来定义扩展字段,而是只要接收到来自任意一个租户的对于一个特定的表的扩展请求,就自动定义扩展字段,这与该请求所要扩展的表列的具体内容无关。而且只要定义过一次扩展字段,以后再接收到来自租户(无论是同一租户还是其它租户)的扩展数据库表的请求,也无需再次定义扩展字段,而是直接执行步骤102中生成描述文件的操作。
接下来详细描述步骤102中生成描述文件的过程。虽然对于一个表而言,之前定义的扩展字段的数量可能只有一个,但是每个租户仍然可以利用这一个扩展字段来扩展出任意数量、任意类型的表列。之所以能够实现这样的效果,就是因为对于一个扩展字段(例如XML类型的扩展字段,XML类型的扩展字段是描述性的扩展字段),可以生成多个不同的描述文件,从而实现扩展数据库表的效果。根据本发明的一个实施方式,描述文件是XML结构定义(XML SchemasDefinition,以下简称xsd)文件。根据本发明的另一个实施方式,描述文件是文档类型定义(Document Type Definition,以下简称dtd)文件。
继续采用上文中的例子,当接收到租户的扩展数据库表的请求ALTER TABLE employee ADD COLUMN homeaddress varchar(100)时,所生成的xsd描述文件如下:
<?xml version=″1.0″encoding=″UTF-8″?>
<xs:schema xmlns:xs=″http://www.aa.org/2001/XMLSchema″
   targetNamespace=″http://www.bb.com/database/tenant1″
   xmlns=″http://www.bb.com/database/tenant1″>
   <xs:element name=″X_COL″type=″xs:string″maxOccurs=″1″
minOccurs=″1″>
     <xs:attribute name=″homeaddress″type=″xs:string″
use=″optional″></xs:attribute>
    </xs:element>
</xs:schema>
可选地,如果采用dtd文件作为描述文件,则所生成的描述文件如下:
<!DOCTYPE X_COL[
   <!ELEMENT X_COL  (homeaddress)>
   <!ELEMENT homeaddress  (#PCDATA)>
]>
需要指出的是,无论采用何种方式生成描述文件,所生成的描述文件都是对应于提出扩展数据库请求的租户,并且对应于所述数据库表的。因为只有这样才能使得每个租户都根据自己的特定需求实现对特定数据表所进行的不同的扩展,而不会使一个租户所作的扩展影响到另一个租户,从而真正实现定制化的对数据库表的扩展。如果上述描述文件是针对租户1(tenant1)所提出的扩展数据库表的请求而生成的,那么该描述文件即可以被命名为tenant1.xsd或者tenant1.dtd。也可以将该描述文件命名为employee-tenant1.xsd以体现该描述文件既对应于该租户,又对应于该租户要扩展的数据库表。然而,本领域技术人员可以了解,对所生成的描述文件进行命名并保存并非实现扩展数据库表的技术方案所必须的特征或步骤,因为即使不对描述文件进行命名或者保存,只要描述文件已经生成,就实现了对数据库表的扩展。如上面给出的例子,描述文件将已经定义的数据库表的扩展字段X_COL描述为“homeaddress”这个扩展列。当然,一个描述文件还可以将扩展字段X_COL描述为多个扩展列,本领域技术人员在参考了上面的例子之后,完全可以知晓根据租户的具体需求来生成将扩展字段X_COL描述为多个扩展列的描述文件。也就是说,描述文件将已经定义好的数据库表的扩展字段描述为至少一个扩展列。也可以将描述文件的作用理解为将租户所要扩展的表列的信息“填写”或“填充”到由扩展字段所定义的“骨架”之中。或者也可以这样理解,根据租户扩展数据库的请求而生成的描述文件是对所定义的扩展字段进行的一个“实例化”。当然,这样的理解只是为了帮助本领域技术人员更好地理解本发明的内容,并不构成任何对本发明保护范围的限制。
还需要指出的是,根据本发明的一个实施方式,描述文件所描述的至少一个扩展列具有树形结构。举例而言,如果租户tenant1请求扩展的家庭住址(home address)列里面还要包含家庭电话(homephone)以及居住时间(living time),那么租户tenant1的描述文件tenant1.xsd将被修改为:
<?xml version=″1.0″encoding=″UTF-8″?>
<xs:schema xmlns:xs=″http://www.aa.org/2001/XMLSchema″
   targetNamespace=″http://www.bb.com/database/tenant1″
   xmlns=″http://www.bb.com/database/tenant1″>
   <xs:element name=″X_COL″type=″xs:string″maxOccurs=″1″
minOccurs=″1″>
     <xs:attribute name=″homeaddress″type=″xs:string″
use=″optional″>
             <xs:attribute name=″homephone″type=″xs:string″
use=″optional″>
             <xs:attribute name=″livingtime″type=″xs:string″
use=″optional″>
         </xs:attribute>
     </xs:element>
</xs:schema>
由此可见,通过增加一个XML或Json类型的扩展字段方式,我们不仅能实现通常的字段扩展,也能实现树形结构的扩展,甚至其他结构模型的扩展。
还需要指出的是,如果该租户之前已经提出过扩展数据库表的请求并且生成过对应于该租户的描述文件(旧的描述文件),然后该租户又提出了新的扩展数据库表的请求,那么在步骤102中仍然要针对该租户新提出的扩展数据库表的请求生成新的对应于该租户的描述文件。而如果不存在旧的描述文件,则直接创建描述文件即可。具体的技术方案将在图2以及下文相应的文字部分进行描述。
通过上述内容可以看出,利用图1所示的方法,可以使扩展数据库表的过程无论对于多租户***的设计开发者而言还是对于租户自身而言都是透明的。利用图1所示的方法,还可以向租户提供一种统一的数据模型来扩展数据库表(定制化)。这种统一的数据模型正是体现在多租户***后端数据库中的统一扩展字段。在后端数据库中,数据库表被定义了统一的单一扩展字段,而在多租户***的前端(租户端),租户通过提交不同的扩展数据库表列的请求而生成不同的描述文件,从而实现了对后端统一的扩展字段的前端实例化。利用图1所示的方法,显然还可以实现在扩展数据库表时无需占用并浪费大量的数据库空间的技术效果,因为不需要为每个数据库表事先定义大量的可扩展的空列。并且利用图1所示的方法,在针对扩展后的数据库表执行数据库处理操作时无需进行大量的不同表之间的联合操作(Joint Operation),因为并没有增加另外的新表。
图2示出了根据本发明另一个实施例的用于扩展数据库表的方法的流程图。图2中的步骤201对应于图1中的步骤101,不再重述。与图1的步骤102不同的是,图2加入了判断步骤,也就是在接收到租户关于扩展数据库表的请求之后,在步骤202中根据该请求中包含的租户的身份信息以及要扩展的数据库表的标识信息,判断是否已经存在对应于所述租户以及所述数据库表的描述文件。如果判断结果为是,则在步骤203中通过修改旧的描述该新的描述文件覆盖旧的描述文件,也就是说无论一个租户提出过多少次扩展数据库表的请求,始终只存在一个描述文件与其相对应。当然,新的描述文件中会包含旧的描述文件中关于扩展数据库表的内容,从而不会使得原先租户已经请求扩展的数据库表列无效。本领域技术人员应当理解,步骤203中的“修改”可以包括多种实施方式。根据本发明的一个实施方式,“修改”包括读取旧的描述文件,并对旧的描述文件进行编辑而生成新的描述文件。根据本发明的另一个实施方式,“修改”是指先根据租户的扩展数据库表的请求生成新的描述文件,然后将旧的描述文件中的内容合并到新的描述文件中,并且删除旧的描述文件。如果步骤202的判断结果为否,则在步骤204中直接创建对应于所述租户的描述文件。
图3示出了根据本发明另一个实施例的用于扩展数据库表的方法的流程图。图3中的步骤301和步骤302可以理解为分别对应于图1中的步骤101和102,在此不再详述。
在步骤303中,接收租户的数据处理请求,所述数据处理请求与数据库表的扩展字段相关。之所以所述数据处理请求是与数据库表的扩展字段相关的,是因为如果一个数据处理请求只涉及原始数据库表(例如查询一个原始数据库表中的表列的数值),那么这个数据处理请求可以直接由数据库服务器解析并执行,而不会产生错误。需要指出的是,由于租户要先登录才能提交数据处理请求,因此所接收到的租户的数据处理请求中含有租户的身份信息或者标识信息。租户提交的数据处理请求可能包括但不限于数据***、数据查询、数据更新或数据删除等,并且数据处理请求不包括扩展数据库的请求,因为如果是接收到了扩展数据库的请求,应当生成描述文件。
在步骤304中,根据租户的数据处理请求中所包含的租户的身份信息(或称为“识别信息”)以及该数据处理请求要处理的数据库表的识别信息,查找与该租户对应的描述文件。在多租户***中,可能存在大量的数据库表,而对于同一租户而言,如果该租户对多个数据库表都提出了扩展请求,那么就会存在多个对应于该租户但是对应于不同的数据库表的描述文件。而对于同一个数据库表而言,如果有多个租户对该数据库表都提出了扩展请求,那么就会有多个对应于该数据库表但是对应于不同租户的描述文件。因此,要查找到正确的描述文件,必须根据数据处理请求要处理的特定的数据库表和提出请求的特定租户来查找描述文件。本领域技术人员应当了解,租户的身份信息或标识信息作为租户的元数据信息加以保存从而便于租户登录多租户***并进行后续的操作,这是SaaS或多租户技术的通常技术手段,在此不展开描述。本领域技术人员还应当了解,在步骤302中生成了描述文件后,可能采取一些手段保存所生成的描述文件,也可能多租户***会自动保存所生成的描述文件。保存描述文件的目的是为了当接收到租户的数据处理请求时能够找到对应于该租户的描述文件,需要指出的是,描述文件的保存位置没有限制,例如可以保存在多租户***的后端数据库中,也可以保存在租户本地,还可以保存在通过以太网等网络连接的任何远程存储装置上。
在步骤305中,根据所查找到的所述描述文件的内容,重写所述数据处理请求。之所以要重写租户的数据处理请求,是因为租户的数据处理请求是根据其所了解的前端(租户端)的数据结构而提出的,租户可能并不知道(也没有必要知道)在后端(多租户***数据库)实际上数据库表中只有一个扩展字段,而并没有租户在前端所见的经扩展后的表列。这样的话,如果直接把租户的数据处理请求发送至后端的多租户***的数据库服务器,则数据库服务器无法正确执行该请求,从而返回错误。因此,通过重写租户的数据库处理请求的方式来解决这一问题。
举例而言,如果租户tenant1在将原始“employee”表中扩展了“homeaddress”列之后,提出了***一行记录的数据处理请求,该请求的S QL语句如下:Insert into employee(PersonID,Employee Type,LastName,FirstName,homeaddress)values(1003,‘Regular’,‘Yang’,‘Matt’,Street 1,New York’),那么在步骤304中,根据该租户的身份识别信息查找该租户对应的描述文件,假设是tenant1.xsd。根据tenant1.xsd的内容,可以获知表列“homeaddress”是描述文件tenant1.xsd将X_COL扩展字段描述成的一个扩展列,从而将上面租户请求的SQL语句进行重写如下:Insert into employee(PersonID,EmployeeType,LastName,FirstName,X_COL)values(1003,‘Regular’,‘Yang’,‘Matt’,XMLPARSE(document‘<X_COL homeaddress=”Street 1,New York”/>’),经重写后的这个语句才会真正被利用来执行数据处理(也就是步骤306)。
再以查询请求为例,如果租户tenant1请求查询家庭住址为”Street1,New York”的员工姓名信息,则该查询请求对应的标准SQL语句为:select LastName,FirstName from employee where homeaddress=’Street1,New York’,类似地,可以获知表列“homeaddress”是描述文件tenant1.xsd将X_COL扩展字段描述成的一个扩展列,从而将上面租户请求的SQL语句进行重写如下:select LastName,FirstName fromemployee where XMLEXISTS(“$i/X_COL[homeaddress=‘Sreet 1,NewYork”’PASSINGX_COL AS i),经重写后的这个语句才会真正被利用来执行数据处理(也就是步骤306)。
类似地,本领域技术人员根据上述内容完全可以了解在数据处理请求为数据更新请求或数据删除请求的情况下,如何重写所述请求并利用重写后的数据处理请求执行数据处理。
需要强调的是,步骤306中“执行数据处理”的含义广泛,可能是指将重写后的数据处理请求发送至多租户***的数据库服务器,以便由该服务器最终执行数据处理(此时步骤306中的“执行数据处理”实际上是发送该重写后的数据处理请求)。如果本发明的方法或***直接实现在多租户***的数据库服务器中的话,则步骤306中的“执行数据处理”即是指直接执行经重写后的数据处理请求。
由此可见,通过上述重写机制,尽管前端(租户端)的数据结构与多租户***后端的实际数据库表的结构不同,并且租户可能也不知晓这种不同,仍然可以将租户的数据处理请求“映射”到后端的实际数据库表的结构上,保证了不仅在扩展数据库表的操作上,而且在扩展完成后对数据库进行数据处理操作对前端的租户和后端的多租户***的开发人员均具有透明性。此外,从上述例子中可以看出,在进行数据处理操作时,无需进行跨多个表之间的联合操作(JointOperation),从而节省了大量运算资源,提升了***性能和租户体验。需要指出的是,图3中的步骤303-306是在扩展数据库表完成后,对租户提出的数据处理请求进行处理的步骤,其并非本发明的技术方案的必要组成步骤,因为一旦完成了步骤302,就已经实现了对数据库表的扩展。还需要指出的是,图2所示的方法也可以合并到图3所示的方法中。
图4A至4D示出了根据本发明又一个实施例的对数据库表进行扩展的实例的表结构变化图。
其中图4A示出了多租户***(平台)中的一个未经扩展的“employee”表,该原始表中含有“Sex”、“Last Name”和“First Name”三列。假设有两个租户tenant1和tenant2使用这个多租户***,tenant1希望将原始表“employee”中增加一列“ID”,而tenant2希望将原始台表“employee”中增加一列“Home Address”。
图4B示出了定义了扩展字段后的“employee”表,也就是定义了扩展字段后的多租户***的后端数据库中的实际表结构。需要指出的是,如图1以及对应的文字部分所描述的那样,定义扩展字段可以发生在多租户***上线运行前,也可以发生在多租户***实际运行过程中接收到来自租户的扩展数据库表的请求时。从图4B中可以看出,原始“employee”表中增加了一列“X_COL”,此即XML类型的扩展字段。tenant1和tenant2均可以利用该同一扩展字段根据自己不同的需求来扩展“employee”表的列。
图4C示出了租户tenant1扩展了其所需的“ID”列的前端(租户端)的数据结构展示。从图4C中可以看出,租户tenant1可以看见展示在其面前的表结构中已经包含了“ID”列,而实际上“ID”列并未存在于后端的实际数据库表中。后端的实际的“employee”表的结构仍然如图4B所示。
图4D示出了租户tenant2扩展了其所需的“Home Address”列的前端(租户端)的数据结构展示。从图4D中可以看出,租户tenant2可以看见展示在其面前的表结构中已经包含了“Home Addres”列,而且并不包含展示在租户tenant1面前的“ID”列。而实际上“HomeAddres”列也并未存在于后端的实际数据库表中。后端的实际的“employee”表的结构仍然如图4B所示。
关于tenant1和tenant2如何扩展数据库表,以及***如何执行两个租户后续提出的数据处理请求的相关内容,已在图1、图2、图3以及相应的文字部分进行了详细描述。
图5示出了根据本发明一个实施例的用于扩展数据库表的***的结构图。图5所示的***在总体上由500表示。***500包括扩展请求接收装置501,用于接收来自租户的扩展数据库表的请求;以及描述文件生成装置502,用于根据所接收到的请求,生成对应于所述租户的描述文件,所述描述文件将为数据库表定义的扩展字段描述为至少一个扩展列。可以理解,***500中包含的装置501和502分别对应于图1所示的流程图中的步骤101和102。利用图5所示的***500,可以使扩展数据库表的过程无论对于多租户***的设计开发者而言还是对于租户自身而言都是透明的,可以向租户提供一种统一的数据模型来扩展数据库表(定制化),可以实现在扩展数据库表时无需占用并浪费大量的数据库空间的技术效果,并且在针对扩展后的数据库表执行数据库处理操作时无需进行大量的不同表之间的联合操作(Joint Operation),因为并没有增加另外的新表。
图6示出了根据本发明另一个实施例的用于扩展数据库表的***的结构图。图6所示的***在总体上由600表示。***600包括扩展请求接收装置601,用于接收来自租户的扩展数据库表的请求;描述文件生成装置602,用于根据所接收到的请求,生成对应于所述租户以及所述数据库表的描述文件,所述描述文件将为数据库表定义的扩展字段描述为至少一个扩展列;数据处理请求接收装置603,用于接收租户提出的数据处理请求;描述文件查找装置604,用于根据提出数据处理请求的租户的身份信息查找对应的描述文件;数据处理请求重写装置605,用于根据查找到的描述文件的内容重写该租户提出的数据处理请求;以及数据处理执行装置606,用于利用重写后的数据处理请求执行数据处理。可以理解,***600中的装置601-606分别对应于图3所示的流程图中的步骤301-306。需要指出的是,***600中的装置603-606用于在扩展数据库表完成后,对租户提出的数据处理请求进行处理,其并非本发明的技术方案的必要组成部分。在图6中示出装置603-606的目的在于说明利用图6所示的***600可以保证不仅在扩展数据库表的操作上,而且在扩展完成后对数据库进行数据处理操作对前端的租户和后端的多租户***的开发人员均具有透明性。
需要强调的是,图5所示的***500中的描述文件生成装置502以及图6所示的***600中的描述文件生成装置602均可以被进一步配置为执行如图2所示的步骤202-204。
还需要强调的是,根据本发明的各个实施方式的方法或***,既可以在租户端部署或执行,也可以在多租户***的服务器端部署或执行,还可以在其它任何位置或区域部署或执行,只要该位置或区域能够与多租户***的租户端或服务器端进行通信即可。
通过以上对具体实施例的描述,本领域技术人员可以理解,上述的***、装置和方法可以使用计算机可执行指令和/或包含在处理器控制代码中来实现,例如在诸如磁盘、CD或DVD-ROM的载体介质、诸如只读存储器(固件)的可编程的存储器或者诸如光学或电子信号载体的数据载体上提供了这样的代码。本实施例的装置、服务器及其单元可以由诸如超大规模集成电路或门阵列、诸如逻辑芯片、晶体管等的半导体、或者诸如现场可编程门阵列、可编程逻辑设备等的可编程硬件设备的硬件电路实现,也可以用由各种类型的处理器执行的软件实现,也可以由上述硬件电路和软件的结合实现。
虽然以上结合具体实施例,对本发明的利用远程应用处理本地文件的***及方法进行了详细描述,但本发明并不限于此。本领域普通技术人员能够在说明书教导之下对本发明进行多种变换、替换和修改而不偏离本发明的精神和范围。应该理解,所有这样的变化、替换、修改仍然落入本发明的保护范围之内。本发明的保护范围由所附权利要求来限定。

Claims (14)

1.一种用于扩展数据库表的方法,包括:
接收租户关于扩展数据库表的请求;以及
根据所接收到的请求,生成对应于所述租户以及所述数据库表的描述文件,所述描述文件将为所述数据库表定义的扩展字段描述为至少一个对应于所述租户的扩展列,
其中对于一个数据库表而言,只定义一个扩展字段,并且所定义的一个扩展字段由多个租户共享,并且根据该一个扩展字段可以扩展出不限定数目的列。
2.如权利要求1所述的方法,其中根据所接收到的请求,生成对应于所述租户的描述文件的步骤包括:
根据所接收到的请求,判断是否已经存在对应于所述租户以及所述数据库表的描述文件;
如果判断结果为是,则通过修改所述已经存在的描述文件来生成对应于所述租户以及所述数据库表的新的描述文件。
3.如权利要求2所述的方法,其中根据所接收到的请求,生成对应于所述租户的描述文件的步骤还包括:
如果判断结果为否,则创建对应于所述租户以及所述数据库表的描述文件。
4.如权利要求1至3任一所述的方法,还包括:
接收所述租户对所述数据库表的数据处理请求,所述数据处理请求与所述数据库表的扩展字段相关;
根据所述数据处理请求中包含的所述租户和所述数据库表的标识信息,查找所述描述文件;
根据所查找到的描述文件的内容,重写所述数据处理请求;以及
利用重写后的数据处理请求执行数据处理。
5.如权利要求4所述的方法,其中数据处理请求至少包括下列之一:数据***请求、数据查询请求、数据更新请求和数据删除请求。
6.如权利要求1所述的方法,其中扩展字段包括XML扩展字段。
7.如权利要求1所述的方法,所述描述文件所描述的至少一个扩展列具有树形结构。
8.一种用于扩展数据库表的***,包括:
扩展请求接收装置,用于接收租户关于扩展数据库表的请求;以及
描述文件生成装置,用于根据所接收到的请求,生成对应于所述租户以及所述数据库表的描述文件,所述描述文件将为数据库表定义的扩展字段描述为至少一个对应于所述租户的扩展列,
其中对于一个数据库表而言,只定义一个扩展字段,并且所定义的一个扩展字段由多个租户共享,并且根据该一个扩展字段可以扩展出不限定数目的列。
9.如权利要求8所述的***,其中所述描述文件生成装置进一步被配置为:
判断是否已经存在对应于所述租户以及所述数据库表的描述文件;
如果判断结果为是,则通过修改所述已经存在的描述文件来生成对应于所述租户以及所述数据库表的新的描述文件。
10.如权利要求9所述的***,其中所述描述文件生成装置进一步被配置为:
如果判断结果为否,则直接创建对应于所述租户以及所述数据库表的描述文件。
11.如权利要求8至10任一所述的***,还包括:
数据处理请求接收装置,用于接收所述租户对所述数据库表的数据处理请求,所述数据处理请求与所述扩展字段相关;
描述文件查找装置,用于根据所述数据处理请求中包含的所述租户和所述数据库表的标识信息,查找所述描述文件;
数据处理请求重写装置,用于根据所查找到的描述文件的内容,重写所述数据处理请求;以及
数据处理执行装置,用于利用重写后的数据处理请求执行数据处理。
12.如权利要求11所述的***,其中数据处理请求包括下列之一:数据***请求、数据查询请求、数据更新请求和数据删除请求。
13.如权利要求8所述的***,其中扩展字段包括XML扩展字段。
14.如权利要求8所述的***,所述描述文件所描述的至少一个扩展列具有树形结构。
CN201010132487.0A 2010-03-23 2010-03-23 多租户环境下扩展数据库表的方法和*** Expired - Fee Related CN102200977B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201010132487.0A CN102200977B (zh) 2010-03-23 2010-03-23 多租户环境下扩展数据库表的方法和***
US13/053,032 US8346747B2 (en) 2010-03-23 2011-03-21 Extending database tables in a multi-tenant environment

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010132487.0A CN102200977B (zh) 2010-03-23 2010-03-23 多租户环境下扩展数据库表的方法和***

Publications (2)

Publication Number Publication Date
CN102200977A CN102200977A (zh) 2011-09-28
CN102200977B true CN102200977B (zh) 2014-10-29

Family

ID=44657557

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010132487.0A Expired - Fee Related CN102200977B (zh) 2010-03-23 2010-03-23 多租户环境下扩展数据库表的方法和***

Country Status (2)

Country Link
US (1) US8346747B2 (zh)
CN (1) CN102200977B (zh)

Families Citing this family (37)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP2375367A1 (en) * 2010-04-08 2011-10-12 Accenture Global Services Limited Project management system
US9311664B2 (en) * 2010-05-25 2016-04-12 Salesforce.Com, Inc. Systems and methods for automatically collection of performance data in a multi-tenant database system environment
US20120330915A1 (en) * 2011-06-21 2012-12-27 Salesforce.Com, Inc. Streaming transaction notifications
US8635152B2 (en) * 2011-09-14 2014-01-21 Microsoft Corporation Multi tenancy for single tenancy applications
US8935218B2 (en) * 2011-11-04 2015-01-13 Sap Se Multi-client generic persistence for extension nodes
US8930413B2 (en) * 2012-01-03 2015-01-06 International Business Machines Corporation Dynamic structure for a multi-tenant database
US9037614B1 (en) * 2012-02-24 2015-05-19 Amazon Technologies, Inc. Secondary mappings to enable code changes without schema updates
US10991000B2 (en) * 2012-03-09 2021-04-27 Salesforce.Com, Inc. Advertisement distribution system, method and computer program product using a multi-tenant on-demand database system
US9508083B2 (en) * 2012-07-02 2016-11-29 Oracle International Corporation Extensibility for sales predictor (SPE)
US10430391B2 (en) 2012-09-28 2019-10-01 Oracle International Corporation Techniques for activity tracking, data classification, and in database archiving
CN103838761B (zh) * 2012-11-23 2017-03-01 阿里巴巴集团控股有限公司 一种元数据的更新方法及装置
TWI490716B (zh) * 2012-12-07 2015-07-01 Ind Tech Res Inst 多租戶應用程序的開發方法、資料存取方法與系統
US9208212B2 (en) 2012-12-17 2015-12-08 Sap Ag Field extensibility in a multi-tenant environment with columnar database support
US20140173033A1 (en) * 2012-12-17 2014-06-19 Salesforce.Com, Inc. System, method and computer program product for processing data in a dynamic and generic manner
US9477710B2 (en) * 2013-01-23 2016-10-25 Microsoft Technology Licensing, Llc Isolating resources and performance in a database management system
US9442993B2 (en) * 2013-02-11 2016-09-13 Dell Products L.P. Metadata manager for analytics system
TWI506452B (zh) * 2013-03-18 2015-11-01 Quanta Comp Inc 雲端平台及其資料交換方法
US9705686B2 (en) 2013-08-22 2017-07-11 Red Hat, Inc. Measuring resource consumption in a multi-tenant platform-as-a-service (PaaS) system
CN103593403B (zh) * 2013-10-16 2017-12-29 东软集团股份有限公司 一种流程表中业务数据关联方法及***
US9507810B2 (en) 2013-12-10 2016-11-29 Sap Se Updating database schemas in a zero-downtime environment
CN103617284A (zh) * 2013-12-11 2014-03-05 北京金和软件股份有限公司 一种数据字段扩展方法
US10990629B2 (en) * 2014-05-05 2021-04-27 Aveva Software, Llc Storing and identifying metadata through extended properties in a historization system
US20160028833A1 (en) * 2014-07-25 2016-01-28 Violeta Georgieva Tenant aware session manager
US9471803B2 (en) 2014-08-07 2016-10-18 Emc Corporation System and method for secure multi-tenancy in an operating system of a storage system
CN104346466B (zh) * 2014-11-12 2018-03-23 中国建设银行股份有限公司 数据库中添加新属性数据的方法和装置
CN104462421B (zh) * 2014-12-12 2018-06-05 中国科学院声学研究所 基于键-值数据库的多租户扩展方法
US10410155B2 (en) 2015-05-01 2019-09-10 Microsoft Technology Licensing, Llc Automatic demand-driven resource scaling for relational database-as-a-service
CN107122364B (zh) 2016-02-25 2021-05-18 华为技术有限公司 数据操作方法和数据管理服务器
CN106469224A (zh) * 2016-09-26 2017-03-01 武汉工程大学 一种用于SaaS平台的可扩展数据模型
WO2018064375A1 (en) * 2016-09-30 2018-04-05 salesforce.com,inc. Multi-tenant non-relational platform objects
US10380094B2 (en) 2016-09-30 2019-08-13 Salesforce.Com, Inc. Custom multi-tenant non-relational platform objects
US10747814B2 (en) 2017-09-29 2020-08-18 Oracle International Corporation Handling semi-structured and unstructured data in a sharded database environment
US10824648B2 (en) * 2018-04-18 2020-11-03 Sap Se Classification and distribution of extension objects in multitenant environments
CN109800229B (zh) * 2018-12-29 2021-10-08 深圳云天励飞技术有限公司 数据访问方法及相关设备
CN109800234A (zh) * 2019-01-25 2019-05-24 苏州科达科技股份有限公司 业务平台数据库***、升级方法、设备及存储介质
CN111669358B (zh) * 2019-03-08 2022-08-30 厦门网宿有限公司 一种批量处理vrouter网络隔离空间的方法和装置
US11899695B2 (en) * 2021-01-22 2024-02-13 Sap Se Field extension hub for extension fields across a customer landscape

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7529728B2 (en) * 2003-09-23 2009-05-05 Salesforce.Com, Inc. Query optimization in a multi-tenant database system

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005516432A (ja) * 2001-07-02 2005-06-02 グローベスパン・バイラータ・インコーポレーテッド リングアーキテクチャを使用した通信システム
US7779039B2 (en) * 2004-04-02 2010-08-17 Salesforce.Com, Inc. Custom entities and fields in a multi-tenant database system
US7313575B2 (en) * 2004-06-14 2007-12-25 Hewlett-Packard Development Company, L.P. Data services handler
US7302447B2 (en) * 2005-01-14 2007-11-27 International Business Machines Corporation Virtual columns
US8069153B2 (en) * 2005-12-02 2011-11-29 Salesforce.Com, Inc. Systems and methods for securing customer data in a multi-tenant environment
CN101454997B (zh) * 2006-05-19 2013-09-04 高通股份有限公司 具有主/从配置的无线中继器***
US8601467B2 (en) * 2006-10-03 2013-12-03 Salesforce.Com, Inc. Methods and systems for upgrading and installing application packages to an application platform
CN101290213B (zh) * 2007-04-20 2011-12-21 华为技术有限公司 光纤长度测量方法、通信设备、通信***
US8122055B2 (en) * 2007-04-26 2012-02-21 Microsoft Corporation Hosted multi-tenant application with per-tenant unshared private databases
US7809757B2 (en) * 2007-08-21 2010-10-05 International Business Machines Corporation XML based object-relationship mapping for different object type
US9276769B2 (en) * 2007-09-19 2016-03-01 Coriant Operations, Inc. Circuit bundle for resiliency/protection of circuits
CN101499061A (zh) * 2008-01-30 2009-08-05 国际商业机器公司 面向多租户的数据库引擎及其数据访问方法
US8737399B2 (en) * 2010-01-05 2014-05-27 Futurewei Technologies, Inc. Enhanced hierarchical virtual private local area network service (VPLS) system and method for Ethernet-tree (E-Tree) services
US8984009B2 (en) * 2010-04-21 2015-03-17 Salesforce.Com, Inc. Methods and systems for utilizing bytecode in an on-demand service environment including providing multi-tenant runtime environments and systems

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7529728B2 (en) * 2003-09-23 2009-05-05 Salesforce.Com, Inc. Query optimization in a multi-tenant database system

Also Published As

Publication number Publication date
US8346747B2 (en) 2013-01-01
US20110238709A1 (en) 2011-09-29
CN102200977A (zh) 2011-09-28

Similar Documents

Publication Publication Date Title
CN102200977B (zh) 多租户环境下扩展数据库表的方法和***
Grinberg Flask web development
Banker et al. MongoDB in action: covers MongoDB version 3.0
CN107402992B (zh) 一种分布式NewSQL数据库***和全文检索建立方法
Bean Laravel 5 essentials
CN100468396C (zh) 用于任意数据模型的映射体系结构
US8112459B2 (en) Creating a logical table from multiple differently formatted physical tables having different access methods
CN109947767A (zh) 多重租赁数据库***中的***共享类型
CN110147369A (zh) 多重租赁数据库***中的数据分离和写入重新定向
CN110019215A (zh) 多重租赁数据库***中的键模式管理
CN101546259B (zh) 支持运行时模型扩展的对象关系映射***和方法
CN101788994A (zh) 一种数据展示模型建立方法、数据展示方法及装置
CN101183379A (zh) 用于检索数据的方法和***
Gudivada et al. Renaissance in database management: navigating the landscape of candidate systems
CN108319661A (zh) 一种备件信息的结构化存储方法及装置
CN103838837A (zh) 基于语义模板的遥感元数据集成方法
CN108228762B (zh) 用于配置主数据库通用模板的方法和***
Vavrek et al. MM-evolver: A Multi-model Evolution Management Tool.
Gaspar et al. Bridging relational and NoSQL databases
CN108228151A (zh) 一种新型网络机器人的设计方法
Phaltankar et al. MongoDB Fundamentals: A hands-on guide to using MongoDB and Atlas in the real world
JP5056384B2 (ja) 検索プログラム、方法及び装置
CN111680069B (zh) 数据库访问方法及装置
RU2613026C1 (ru) Способ подготовки документов на языках разметки при реализации пользовательского интерфейса для работы с данными информационной системы
CN1326078C (zh) 包装器的生成方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20141029

Termination date: 20210323