CN102402545A - 一种存储数据的方法及装置 - Google Patents

一种存储数据的方法及装置 Download PDF

Info

Publication number
CN102402545A
CN102402545A CN2010102837135A CN201010283713A CN102402545A CN 102402545 A CN102402545 A CN 102402545A CN 2010102837135 A CN2010102837135 A CN 2010102837135A CN 201010283713 A CN201010283713 A CN 201010283713A CN 102402545 A CN102402545 A CN 102402545A
Authority
CN
China
Prior art keywords
data
node
module
type
self
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.)
Granted
Application number
CN2010102837135A
Other languages
English (en)
Other versions
CN102402545B (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.)
Tencent Technology Shenzhen Co Ltd
Tencent Cloud Computing Beijing Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201010283713.5A priority Critical patent/CN102402545B/zh
Priority to PCT/CN2011/079035 priority patent/WO2012034477A1/zh
Priority to EP11824547.1A priority patent/EP2618268A4/en
Priority to US13/642,518 priority patent/US20130036143A1/en
Publication of CN102402545A publication Critical patent/CN102402545A/zh
Application granted granted Critical
Publication of CN102402545B publication Critical patent/CN102402545B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/185Hierarchical storage management [HSM] systems, e.g. file migration or policies thereof

Landscapes

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

Abstract

本发明提供了一种存储数据的方法及装置。该方法包括:建立至少包括作为根节点的第一节点的自定义数据结构,其中,每个节点包括第一模块,用于存储数据的类型标识和值,以及第二模块用于存储节点的子节点的标识与子节点的之间的映射列表;每接收一个数据判断数据将要存储的位置以及接收的数据的类型;如果数据存储于第一节点,将数据的类型以及数据的值存储第一节点的第一模块中;如果数据存储于自定义数据结构的第二节点,将数据的类型以及数据的值存储在第二节点的第一模块中。根据本发明,可以方便地进行不同数据类型的转换、对数据进行读取和传递。

Description

一种存储数据的方法及装置
技术领域
本发明涉及计算机技术领域,具体涉及一种存储数据的方法及装置。
背景技术
随着计算机技术和网络技术的发展,出现了各种各样的基于计算机的通讯系统,比如即时通讯IM系统,微博通讯系统等。在这类通讯系统中,需要对系统的数据进行存储以及使用,以实现系统的各种功能。其中数据的存储和使用可以通过各种程序语言来实现。在程序语言中,一般需要将数据按照一定的类型进行存储,并且编译器在编译阶段(尤其是C++这种强类型语言中)会对数据的类型安全进行严格的检查,不同的数据类型,是不能够互相转换,赋值的。在此情况下,当存储一些稍微复杂一点的数据时,往往需要使用stl+一些自定义数据结构来存储。而对于不同场景下的数据,往往又需要定义不同的数据结构。因此,采用这种方法存储的数据使用起来比较麻烦。
基于上述原因,出现一些改进的存储方法,以实现不同数据类型的灵活使用,比如转换、读取或传递等。例如,在脚本语言中,在存储数据时,使用VARIANT结构来表示数据类型。然而,VARIANT结构中,一次只能有一种类型是有效的,也就是每次只能处理一个数据,没办法既存储数字,又存储字符串,不能批量处理数据。
发明内容
有鉴于此,本发明实施例提供了一种存储数据的方法及装置,该方法及装置可以处理批量数据。
根据本发明实施例,一种存储数据的方法包括:
建立至少包括作为根节点的第一节点的自定义数据结构,其中,每个节点包括第一模块,用于存储数据的类型标识和值,以及第二模块用于存储节点的子节点的标识和数据的映射列表;
每接收一个数据判断数据将要存储的位置以及接收的数据的类型;
如果数据存储于第一节点,将数据的类型以及数据的值存储在第一节点的第一模块中;
如果数据存储于自定义数据结构的第二节点,将数据的类型以及数据的值存储在第二节点的第一模块中。
根据本发明另一实施例,一种存储数据的装置包括:
数据接口,用于接收数据;
通用数据类型组件,用于建立并保存至少包括作为根节点的第一节点的自定义数据结构,其中,每个节点包括第一模块,用于存储数据的类型标识和值,以及第二模块用于存储节点的子节点的标识和子节点之间的映射列表;每当数据接口接收一个数据,判断数据将要存储的位置以及数据的类型;如果数据存储于第一节点,则将数据的类型以及数据的值存储在第一节点的第一模块中;如果数据存储于自定义数据结构的第二节点中,则将数据的类型以及数据的值存储在第二节点的第一模块中。
根据本发明又一实施例,一种通用数据类型组件包括:节点建立模块,判断模块和存储模块;
节点建立模块,用于建立并保存至少包括作为根节点的第一节点的自定义数据结构,其中,每个节点包括第一模块,用于存储数据的类型标识和值,以及第二模块用于存储节点的子节点的标识和子节点之间的映射列表;
判断模块,用于每接收一个数据后,判断数据将存储于第一节点或自定义数据结构的第二节点,判断数据的类型,并将判断结果通知给存储模块;
存储模块,用于在判断模块判断数据将存储于第一节点时,将数据的类型以及数据的值存储在第一节点的第一模块中;在判断模块判断数据将存储于自定义数据结构的第二节点时,将数据的类型以及数据的值存储在第二节点的第一模块中。
与现有技术相比,本发明实施例的自定义数据结构定义了一种通用数据类型;当将数据存储为该通用数据类型时,该通用数据类型可以判断待存储数据的基本类型,并将待存储数据的基本类型和值进行存储。而且,由于在一个自定义数据结构定义的通用数据类型中,每个节点都可以设有其子节点的<标识,子节点>的映射列表,因此,可以将大量的数据存储于该通用数据类型中。这种情况下,只要将大量的数据存储成一个通用数据类型,则使用该通用数据类型定义的一个变量就可以存储大量的数据。并且,由于这种通用数据类型中各节点间存储的数据类型可以不同,因此通过通用数据类型存储的具有不同类型的数据,则使用该通用数据类型定义的一个变量就可以使用大量的具有不同类型的数据。
并且,由于通用数据类型的变量中各个节点都有各自的类型标识,因此各个节点可以存储不同类型的数据,而不需要存储兼容类型的数据,即可以存储LONG和int数据,也可以存储BSTR字符串数据。
附图说明
图1为根据本发明实施例的一种存储数据的方法的流程图;
图2为本发明实施例中存储数据的存储模型;
图3示出了本发明实施例中存储数据的通用数据类型的树状结构;
图4为本发明实施例的一种存储数据的装置;
图5为本发明另一实施例的一种存储数据的装置。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
图1为根据本发明实施例的一种存储数据的方法的流程图。如图1所示,该方法包括:
步骤101:建立至少包括第一节点的自定义数据结构。
在本步骤中,该第一节点为根节点。每个节点包括第一模块,用于存储数据的类型标识和值,以及第二模块用于存储该节点的子节点的标识与子结点之间的映射列表。
为了描述方便,本发明将这种自定义数据结构定义的数据类型称为通用数据类型(WData)。
步骤102:每接收一个数据判断数据将要存储的位置以及数据的类型。
本步骤中,当用户为具有自定义数据结构的变量赋值时,则自定义数据结构接收到数据。在此,用户为变量赋值相当于将数据存储于该变量中;数据的类型可以是任何的基本类型,比如整型(int),浮点型(float),字节型(byte)等。
步骤103:如果数据存储于第一节点,则将数据的类型以及数据的值存储在第一节点的第一模块中。
本步骤中,当数据存储于第一节点,即存储于根节点时,该根节点无需对应一个节点标识与节点之间的映射列表,即<key,WData节点>(以下简称<key,WData>)。并且,当自定义数据结构中仅有第一节点,则第一节点中的第二模块的映射列表为空。当第一节点存在子节点时,则第一节点中的第二模块的映射列表记录第一节点的子节点标识与子节点之间的映射列表<key,WData>。
步骤104:如果数据存储于自定义数据结构的其他节点(称为第二节点),则将数据的类型以及数据的值存储在第二节点的第一模块中。
本步骤中,当数据存储于第二节点时,由于第二节点为子节点,则该数据属于子数据。此时,第二节点对应一个节点标识与节点之间的映射列表,比如<key2,WData>。该映射列表存储于第二节点的父节点中,用于索引第二节点的子节点,从而索引子结点中的数据。
在步骤104之前,还包括:判断自定义数据结构中是否包括第二节点;如果没有,则建立所述自定义数据结构的第二节点;否则,直接将数据的类型以及数据的值存储在所述第二节点的第一模块中。
建立自定义数据结构的第二节点可以包括:在第二节点的父节点的第二模块中填写第二节点的标识与第二节点之间的映射列表。
同理,当接收到存储于第二节点的子节点的数据时,在第二节点中的第二模块填写子节点的标识与子节点之间的映射列表。
以上的自定义数据结构可以由C++语言、或脚本语言或VB语言等来实现。
由以上实施例可以看出,由于自定义数据结构定义了一种通用数据类型;当将数据存储为该通用数据类型时,该通用数据类型可以判断待存储数据的类型,并将待存储数据的类型和值进行存储。因而,用户在存储数据时,不用手动进行不同数据类型的转换。
而且,由于在一个自定义数据结构的通用数据类型中,每个节点都可以设有其子节点的<key,WData>映射列表,因此,可以将大量的数据存储于该通用数据类型中。这种情况下,只要将大量的数据存储成一个通用数据类型,则可以在传递一个通用数据类型的变量的情况下传递大量的数据,从而可以大大简化通讯系统的构建和维护。
图2为本发明实施例中存储数据的存储模型,即示出了自定义数据结构中每个节点的存储模型。如图2所示,每个存储模型至少存储一个WData数据,其包括第一模块(Value模块),用于存储WData数据的类型标识和值,以及第二模块(<key,WData>模块),用于存储该节点的子节点的标识与子节点之间的映射列表<key,WData>。在第二模块中,key可以使用字符串表示。
通过以上的存储模型,通用数据类型WData可以构造成一个树状的通用数据类型。
根据本发明实施例,上述的第一模块可以利于VARIANT结构来实现数据的类型标识和值的存储。具体地,VARIANT结构的内部利用一个类型标识来表示具体的数据类型。当需要使用存储的数据时,可以根据VARIANT结构中的类型标识来判断数据的类型,然后获取存储的数据。
VARIANT结构的定义如下:
struct tagVARIANT
{
      union
      {
          struct_tagVARIANT
          {
               VARTYPE vt;//类型标识
               WORD wReserved1
               WORD wReserved2
               WORD wReserved3
               //以下为具体的类型,每次只有一个有效
               //具体根据类型标识来判断哪个类型有效
               union
               {
                   LONG lVal
                   BYTE bVal
                   SHORT iVal
                   FLOAT fltVal
                   ......
               }
               ......
          }
          ......
在定义VARIANT结构后,则可以按照上述结构存储数据。在存储数据后,则可以使用存储的数据。
图3示出了本发明实施例中存储数据的通用数据类型的树状结构。如图3所示,第一节点(根节点)可以有一个或多个子节点,而每个子节点也可以有一个或多个子节点,依此类从。这种情况下,一个通用数据类型的变量可以存储大量的数据。并且,由于<key,WData>这种映射关系的使用,可以很方便地读取各个存储的数据,并可以方便地改变存储的某个或某些数据的数据类型或数据值。图3中,第一节点的第一模块存储自身的一个值,以及该值的类型标识,第二模块中存储的<key,WData>列表包括5个映射关系,即(key1,WData),(key2,WData),(key3,WData),(key4,WData)和(key5,WData)。其中,(key3,WData)对应的节点的第二模块中又存储有包括2个映射关系的<key,WData>列表,即(key6,WData)和(key7,WData);而(key4,WData)对应的节点的第二模块中又存储有包括一个映射关系的<key,WData>列表,即(key8,WData)。
由此可见,本发明实施例提出的存储模型是一种递归的存储方式,可以构成树状的通用数据类型,存储大量的数据。
图3所示的树状结构只是本发明的通用数据类型的一种结构,并不用于限制本发明通用数据类型的结构。本发明的通用数据类型还可以由嵌套结构等具有多级索引特性的其他结构来实现。
在通过图2和3所示的通用数据类型定义了一个变量之后,则可以方便地利用该变量对数据进行操作,比如对数据进行读取、转换以及传递。
图1所示的存储数据的方法可以实现不同类型的数据在同一变量中的存储,并且可以实现大量的数据的多级存储,比如图3所示的树状存储。在以下实施例中,以C++语言的系统为例并结合图3所示的树状结构,说明本发明实施例中数据存储方法。
在C++语言中,定义一个通用数据类型以及将数据存储在通用数据类型如下所示:
WData data;data=5;data=”xxx”;
data[“key1”]=10;data[“key1”]=”sss”;
data[“key3”][“key6”]=15;
data[“key3”][“key6”][...][...]...=...
从以上可以看出,首先定义了一个通用数据类型的变量data。其次,则可以对变量data进行赋值,即可以在data中存储数据。在本实施例中,给data赋值整型数据“5”;再次,还可以给data赋值字符串数据“xxx”,即将字符串数据“xxx”存储到WData通用数据类型的变量data中,覆盖了之前存储的整型数据“5”。具体地,可以通过重载“=”操作符的方式实现将数据“5”或“xxx”存储在变量data的根节点的第一模块中(即Value模块中)。
除了将数据存储在根节点外,还可以进行多级存储,即可以在根节点的子节点存储数据。例如,在key1对应的子节点中存储整型数据10或字符串数据“sss”。再例如,在key3对应的子节点中的key6对应的子节点中存储整型数据15。通过以上的存储方法,可以将大量的不同类型的数据存储在一个通用数据类型的变量中,从而可以方便数据的使用。在多级存储中,可以重载[]操作符来实现key与各个WData的映射。
在采用图1所示的方法存储数据之后,则可以方便地使用存储的数据,比如读取、转换以及传递等。以下将结合存储数据的装置来说明如何使用存储的数据。
图4为本发明实施例的一种存储数据的装置。如图4所示,该装置包括:
数据接口401,用于接收数据;
通用数据类型组件402,用于建立并存储至少包括作为根节点的第一节点的自定义数据结构,其中,每个节点包括第一模块,用于存储数据的类型标识和值,以及第二模块用于存储所述节点的子节点的标识与子节点之间的映射列表;每当数据接口401接收一个数据,用于判断数据将要存储的位置以及数据的类型;如果数据存储于第一节点,则将数据的类型以及数据的值存储在第一节点的第一模块中;如果数据存储于自定义数据结构中的第二节点,将数据的类型以及数据的值存储在第二节点的第一模块中。
根据本发明实施例,通用数据类型组件包括:节点建立模块,判断模块和存储模块;
节点建立模块,用于建立并保存至少包括作为根节点的第一节点的自定义数据结构;
判断模块,用于判断数据的存储于第一节点或第二节点以及数据的类型,并将判断结果通知给存储模块;
存储模块,用于根据判断模块的判断结果,将数据的类型以及数据的值存储在所述第一节点的第一模块中或将数据的类型以及数据的值存储在第二节点的第一模块中。
根据本发明实施例,判断模块还用于在数据存储于所述自定义数据结构的第二节点时,判断自定义数据结构中是否包括第二节点;如果没有,则通知节点建立模块建立自定义数据结构的第二节点;否则,通知存储模块将数据的类型以及数据的值存储在第二节点的第一模块中。
根据本发明实施例,节点建立模块通过在第二节点的父节点的第二模块中填写第二节点的标识与第二节点之间的映射列表来建立第二节点。
根据本发明实施例,数据接口还用于从通用数据类型组件读取第一节点的第一模块中的数据,以及根据节点标识从通用数据类型组件读取与节点标识对应的节点中存储的数据。
根据本发明实施例,判断模块还用于判断某个节点的数据的类型是否与新接收的待存储于所述节点的数据的类型不同,如果不同,则修改节点的第一模块中的数据的类型标识以及值;和/或
判断模块还用于判断是否接收到对自定义数据结构中的某个节点的数据的类型转换操作,如果是,则修改节点的第一模块中的数据的类型标识。
根据本发明实施例,通用数据类型组件还包括传递模块,用于将自定义数据结构在不同或相同程序语言环境的模块间直接传递。
根据本发明实施例,通用数据类型组件可以由C++语言、或脚本语言、VB语言来实现。
根据本发明实施例,当通用数据类型组件由C++语言实现时,该装置还包括C++封装类(C++Wrapper),用于对通用数据类型组件中的自定义数据结构进行封装。
图5为本发明另一实施例的一种存储数据的装置。如图5所示,以利用C++语言来实现本发明的自定义数据结构为例,该装置包括:数据接口IWData,用于接收或发送数据;WData通用数据类型组件,用于根据图1所示的方法存储接收的数据;C++Wrapper封装类,用于对自定义数据结构的通用数据类型WData进行封装,从而可以使用“=”和/或“[]”操作符来实现数据的存储和/或多级存储。而WData通用数据类型组件可以是C++中的Com组件。在本发明实施例中,通过数据接口IWData还可以读取WData中根节点的数据值,并可以根据key读取WData中子节点的数据值。
在图5所示的实施例中,C++Wrapper封装类将WData通用数据类型组件封装成CWData组件。具体地,C++Wrapper封装类利用智能指针CComPtr<IWData>对数据接口IWData进行封装,从而使得在使用CWData组件时和直接通过数据接口IWData来使用WData通用数据类型组件没有区别。同时,CWData通过重载“=”等号操作符,即重新定义“=”的含义,使得“=”具有判断WData中的数据以及数据类型的功能,并通过重载类型转换操作符(比如(int)、(BYTE)等),即对类型转换操作符重新定义,使得类型转换符具有判断WData中的数据以及将WData中的数据进行类型转换的功能,可以实现在C++中在一个通用数据类型的变量中存储不同类型的数据,以及使用任意类型的数据;通过重载“[]”方括号操作符,实现了获取子节点中的WData数据的操作,比如data[“key1”]就等价于获取data中key1对应的子节点中的WData数据。由于返回的子节点中的WData数据仍然是CWData,所以直接多级使用方括号操作符,类似多维数组的使用。
在本发明又一实施例中,以图5所示的装置来说明如何使用存储的数据。具体地,说明对存储的数据的读取、转换以及传递。
1)数据接口IWData的定义以及数据的读取可以如下:
数据接口定义:
interface IWData:IDispatch
{
     //读取WData自身Value
     HRESULT GetValue(VARIANT*pVar);
     HRESULT SetValue(VARIANT var);
     //根据key读取子WData的操作,读取的子WData又可以
     //有自身的Value和子WData.
     HRESULT GetSubData(BSTR bsKey,IWData**ppData);
     HRESULT SetSubData(BSTR bsKey,IWData*pData);
     ......
}
在以上实例中,每个节点中的Value模块可以使用VARIANT结构来实现。
2)将WData用C++Wrapper封装类封装之后得到CWData,利用CWData存储数据,并对存储的数据进行类型转换:
CWData data;
data=10;
data=“string”;
data[1]=10;
data[“key”]=20;
data[“key 1”][“key2”][“key3”]=“test”;
int x=(int)data;
data=(BYTE)3;
由以上的使用实例可以看出,在进行数据类型转换时,可以由用户指定具体的类型。由于CWData通用数据类型中具有数据类型判断功能,可以将data中数据的基本类型直接转换为指定的类型。又或者,可以不需要用户指定具体的类型,而且由CWData通用数据类型根据存储的数据的默认类型对data的基本类型进行转换。比如,当data中的数据是数字时,则转换为数字的默认类型,当data中的数据是字符串时,则转换为字符串的默认类型。
比如,“data=10”中,利用重载的“=”操作符把10存储在data的根节点的Value模块,而之后“data=“string”的操作中,利用重载的“=”操作符把string存储在data的根节点的Value模块中,而此操作同时也是实现了将data根节点的数据类型由整型转换为字符串型,此时类型标识由整型改为字符串型。
当然,也可以不利用C++Wrapper封装类封装WData,而直接使用WData存储数据,并对存储的数据进行使用。但是,这种情况下,操作会比较复杂,比如:
//直接使用WData存储和使用数据
CComPtr<IWData>pData;
CreateWData(&pData);
pData->SetValue(CComVariant(10));
pData->SetValue(CComVariant(“string”));
CComPtr<IWData>pSubData;
pData->GetSubValue(“key”,&pSubData);
pSubData->SetValue(CcomVariant(20));
以上直接使用WData存储和使用数据的结果相当于使用CWData的如下操作的结果:
CWData data;
data=10;
data=“string”;
data[1]=10;
data[“key”]=20;
由此可见,利用C++Wrapper封装类封装WData组件后,对WData的数据的存储和使用更加简洁、方便,从而可以使得通讯系统的运行速度更快,且通讯系统的维护也会更加方便,可以节省通讯系统的维护成本。
3)利用C++Wrapper封装类封装通用数据类型WData,在通讯系统的各模块间传递存储为通用数据类型WData的数据,例如,可以将本发明的技术方案利用在微博系统中以存储微博的用户资料,并在微博系统的各模块间传递存储的微博用户资料。
例如,微博系统中具有A模块如下:
CWData msg;
msg[“id”]=...;
msg[“content”]=“xxxxx”;
msg[“time”]=...;
......
而A模块可以将msg作为参数调用B模块,例如:
ShowMsg(CWData msg);
B模块如下:
Void ShowMsg(CWData msg)
{
    //显示内容
    ...msg[“content”]...
    //显示时间
    ...msg[“time”]...
    ......
}
从以上A和B模块之间的调用实例可以看出,A模块可以通过一个msg变量将“id”,“content”和“time”三个数据传递给B模块,从而可以实现A和B模块之间的大量数据的传递。因此,可以简化微博系统的建立和维护过程,节省微博系统的开发和维护成本。
以上仅仅是本发明的实施例,但并不意味着本发明的保护范围仅限于所述的实施例。

Claims (18)

1.一种存储数据的方法,其特征在于,包括以下步骤:
建立至少包括作为根节点的第一节点的自定义数据结构,其中,每个节点包括第一模块,用于存储数据的类型标识和值,以及第二模块用于存储所述节点的子节点的标识和数据的映射列表;
每接收一个数据判断所述数据将要存储的位置以及接收的数据的类型;
如果所述数据存储于第一节点,将数据的类型以及数据的值存储在所述第一节点的第一模块中;
如果所述数据存储于所述自定义数据结构的第二节点,将数据的类型以及数据的值存储在所述第二节点的第一模块中。
2.如权利要求1所述的方法,其特征在于,还包括:如果所述数据要存储于所述自定义数据结构的第二节点,判断所述自定义数据结构中是否包括所述第二节点;
如果没有,则建立所述自定义数据结构的第二节点;
否则,直接将数据的类型以及数据的值存储在所述第二节点的第一模块中。
3.如权利要求2所述的方法,其特征在于,所述建立所述自定义数据结构的第二节点包括:
在所述第二节点的父节点的第二模块中填写第二节点的标识与第二节点之间的映射列表。
4.如权利要求1、2或3所述的方法,其特征在于,如果一个节点没有子节点,则其第二模块中的映射列表为空。
5.如权利要求4所述的方法,其特征在于,还包括:通过重载类型转换操作符以实现对存储在所述自定义数据结构中的数据进行类型的转换;
其中,所述判断接收的数据的类型包括:通过重载程序语言中的等号操作符来实现对数据的类型的判断。
6.如权利要求4所述的方法,其特征在于,还包括读取存储在所述自定义数据结构中的数据。
7.如权利要求4所述的方法,其特征在于,还包括通过传递所述自定义数据结构来实现将存储在自定义数据结构中一个或多个或所有数据在不同或相同程序语言环境的模块间的传递。
8.如权利要求4所述的方法,其特征在于,所述自定义数据结构由C++语言、或脚本语言或VB语言实现。
9.一种存储数据的装置,其特征在于,包括:
数据接口,用于接收数据;
通用数据类型组件,用于建立并保存至少包括作为根节点的第一节点的自定义数据结构,其中,每个节点包括第一模块,用于存储数据的类型标识和值,以及第二模块用于存储所述节点的子节点的标识和子节点之间的映射列表;每当数据接口接收一个数据,判断所述数据将要存储的位置以及数据的类型;如果所述数据存储于第一节点,则将数据的类型以及数据的值存储在所述第一节点的第一模块中;如果所述数据存储于所述自定义数据结构的第二节点中,则将数据的类型以及数据的值存储在所述第二节点的第一模块中。
10.如权利要求9所述的装置,其特征在于,所述通用数据类型组件包括:节点建立模块,判断模块和存储模块;
所述节点建立模块,用于建立并保存至少包括作为根节点的第一节点的自定义数据结构;
所述判断模块,用于判断所述数据的存储于第一节点或第二节点以及数据的类型,并将判断结果通知给所述存储模块;
所述存储模块,用于根据判断模块的判断结果,将数据的类型以及数据的值存储在所述第一节点的第一模块中或将数据的类型以及数据的值存储在所述第二节点的第一模块中。
11.如权利要求10所述的装置,其特征在于,所述判断模块还用于在所述数据要存储于所述自定义数据结构的第二节点时,判断所述自定义数据结构中是否包括所述第二节点;如果没有,则通知所述节点建立模块建立所述自定义数据结构的第二节点;否则,通知所述存储模块将数据的类型以及数据的值存储在所述第二节点的第一模块中。
12.如权利要求11所述的装置,其特征在于,所述节点建立模块通过在所述第二节点的父节点的第二模块中填写第二节点的标识与第二节点之间的映射列表来建立所述第二节点。
13.如权利要求10、11或12所述的装置,其特征在于,所述通用数据类型组件由C++程序语言实现;所述装置还包括:C++封装类(C++Wrapper),用于对通用数据类型组件中的自定义数据结构进行封装。
14.如权利要求12所述的装置,其特征在于,所述数据接口还用于从所述通用数据类型组件读取第一节点的第一模块中的数据,以及根据节点标识从所述通用数据类型组件读取与节点标识对应的节点中存储的数据。
15.如权利要求12所述的装置,其特征在于,所述判断模块还用于判断某个节点的数据的类型是否与新接收的待存储于所述节点的数据的类型不同,如果不同,则修改所述节点的第一模块中的数据的类型标识以及值;和/或
所述判断模块还用于判断是否接收到对所述自定义数据结构中的某个节点的数据的类型转换操作,如果是,则修改所述节点的第一模块中的数据的类型标识。
16.如权利要求12所述的装置,其特征在于,所述通用数据类型组件还包括传递模块,用于通过传递所述自定义数据结构来实现将存储在自定义数据结构中一个或多个或所有数据在不同或相同程序语言环境的模块间的传递。
17.如权利要求9、10或11所述的装置,其特征在于,所述数据接口是COM接口。
18.一种通用数据类型组件,其特征在于,包括:节点建立模块,判断模块和存储模块;
所述节点建立模块,用于建立并保存至少包括作为根节点的第一节点的自定义数据结构,其中,每个节点包括第一模块,用于存储数据的类型标识和值,以及第二模块用于存储所述节点的子节点的标识和子节点之间的映射列表;
所述判断模块,用于每接收一个数据后,判断所述数据将存储于第一节点或所述自定义数据结构的第二节点,判断数据的类型,并将判断结果通知给所述存储模块;
所述存储模块,用于在所述判断模块判断所述数据将存储于第一节点时,将数据的类型以及数据的值存储在所述第一节点的第一模块中;在所述判断模块判断所述数据将存储于所述自定义数据结构的第二节点时,将数据的类型以及数据的值存储在所述第二节点的第一模块中。
CN201010283713.5A 2010-09-14 2010-09-14 一种存储数据的方法及装置 Active CN102402545B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201010283713.5A CN102402545B (zh) 2010-09-14 2010-09-14 一种存储数据的方法及装置
PCT/CN2011/079035 WO2012034477A1 (zh) 2010-09-14 2011-08-29 一种存储数据的方法及装置
EP11824547.1A EP2618268A4 (en) 2010-09-14 2011-08-29 Method and device for data storage
US13/642,518 US20130036143A1 (en) 2010-09-14 2011-08-29 Method and Device for Data Storage

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010283713.5A CN102402545B (zh) 2010-09-14 2010-09-14 一种存储数据的方法及装置

Publications (2)

Publication Number Publication Date
CN102402545A true CN102402545A (zh) 2012-04-04
CN102402545B CN102402545B (zh) 2015-09-02

Family

ID=45831003

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010283713.5A Active CN102402545B (zh) 2010-09-14 2010-09-14 一种存储数据的方法及装置

Country Status (4)

Country Link
US (1) US20130036143A1 (zh)
EP (1) EP2618268A4 (zh)
CN (1) CN102402545B (zh)
WO (1) WO2012034477A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103561019A (zh) * 2013-10-30 2014-02-05 上海斐讯数据通信技术有限公司 一种针对tr069数据访问方法
CN106294701A (zh) * 2016-08-08 2017-01-04 武汉斗鱼网络科技有限公司 网站前端的数据缓存系统及方法
CN107315539A (zh) * 2017-05-12 2017-11-03 武汉斗鱼网络科技有限公司 一种数据存储方法以及数据提取方法
CN109614371A (zh) * 2018-10-23 2019-04-12 平安科技(深圳)有限公司 存储信息的方法、装置、计算机设备及存储介质

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105451265A (zh) * 2014-08-29 2016-03-30 中国移动通信集团公司 一种多用户下行数据的处理方法、装置及终端
CN104636149B (zh) * 2015-03-11 2018-03-27 中国农业银行股份有限公司 一种接口信息的获取方法及装置
CN107168638A (zh) * 2016-03-07 2017-09-15 阿里巴巴集团控股有限公司 数据处理方法及装置
CN107545008B (zh) * 2016-06-27 2021-02-19 五八同城信息技术有限公司 数据的格式要求存储方法及装置
US10776426B1 (en) * 2017-04-28 2020-09-15 EMC IP Holding Company LLC Capacity management for trees under multi-version concurrency control

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087596A1 (en) * 2000-12-29 2002-07-04 Steve Lewontin Compact tree representation of markup languages
US20050262471A1 (en) * 2004-05-21 2005-11-24 Bea Sytems, Inc. System and method for managing cross project dependencies at development time
US20090275414A1 (en) * 2007-03-06 2009-11-05 Trion World Network, Inc. Apparatus, method, and computer readable media to perform transactions in association with participants interacting in a synthetic environment

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5680619A (en) * 1995-04-03 1997-10-21 Mfactory, Inc. Hierarchical encapsulation of instantiated objects in a multimedia authoring system
US6063128A (en) * 1996-03-06 2000-05-16 Bentley Systems, Incorporated Object-oriented computerized modeling system
US6437805B1 (en) * 1996-09-23 2002-08-20 National Instruments Corporation System and method for accessing object capabilities in a graphical program
US6986147B2 (en) * 2001-03-28 2006-01-10 International Business Machines Corporation Method for transparent, location-independent, remote procedure calls in a heterogeneous network environment
US6990632B2 (en) * 2003-02-28 2006-01-24 Microsoft Corporation Method and system for inferring a schema from a hierarchical data structure for use in a spreadsheet
JP4537391B2 (ja) * 2004-03-16 2010-09-01 株式会社ターボデータラボラトリー ツリー型データ構造を取り扱う方法、情報処理装置、及び、プログラム
JP4712718B2 (ja) * 2004-10-01 2011-06-29 株式会社ターボデータラボラトリー 配列の生成方法、及び、配列生成プログラム
KR20070101288A (ko) * 2005-01-25 2007-10-16 가부시키가이샤 터보 데이터 라보라토리 트리의 검색, 집계, 소트 방법, 정보 처리 장치, 및 트리의검색, 집계, 소트 프로그램
JP4886693B2 (ja) * 2005-08-12 2012-02-29 株式会社ターボデータラボラトリー 情報処理方法、情報処理装置および情報処理プログラム
US7552125B1 (en) * 2006-03-22 2009-06-23 Emc Corporation Synergistic data structures
WO2007143666A2 (en) * 2006-06-05 2007-12-13 Mark Logic Corporation Element query method and system
US7886223B2 (en) * 2006-11-17 2011-02-08 International Business Machines Corporation Generating a statistical tree for encoding/decoding an XML document
US8069188B2 (en) * 2007-05-07 2011-11-29 Applied Technical Systems, Inc. Database system storing a data structure that includes data nodes connected by context nodes and related method
US20110145255A1 (en) * 2009-12-11 2011-06-16 Sap Ag. Systems and methods for distribution of data in a database index

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087596A1 (en) * 2000-12-29 2002-07-04 Steve Lewontin Compact tree representation of markup languages
US20050262471A1 (en) * 2004-05-21 2005-11-24 Bea Sytems, Inc. System and method for managing cross project dependencies at development time
US20090275414A1 (en) * 2007-03-06 2009-11-05 Trion World Network, Inc. Apparatus, method, and computer readable media to perform transactions in association with participants interacting in a synthetic environment

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103561019A (zh) * 2013-10-30 2014-02-05 上海斐讯数据通信技术有限公司 一种针对tr069数据访问方法
CN103561019B (zh) * 2013-10-30 2018-02-06 上海斐讯数据通信技术有限公司 一种针对tr069数据访问方法
CN106294701A (zh) * 2016-08-08 2017-01-04 武汉斗鱼网络科技有限公司 网站前端的数据缓存系统及方法
CN107315539A (zh) * 2017-05-12 2017-11-03 武汉斗鱼网络科技有限公司 一种数据存储方法以及数据提取方法
CN107315539B (zh) * 2017-05-12 2020-08-04 武汉斗鱼网络科技有限公司 一种数据存储方法以及数据提取方法
CN109614371A (zh) * 2018-10-23 2019-04-12 平安科技(深圳)有限公司 存储信息的方法、装置、计算机设备及存储介质
CN109614371B (zh) * 2018-10-23 2024-01-16 平安科技(深圳)有限公司 存储信息的方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
CN102402545B (zh) 2015-09-02
EP2618268A1 (en) 2013-07-24
EP2618268A4 (en) 2017-01-25
US20130036143A1 (en) 2013-02-07
WO2012034477A1 (zh) 2012-03-22

Similar Documents

Publication Publication Date Title
CN102402545B (zh) 一种存储数据的方法及装置
US11997160B2 (en) Lightweight IoT information model
US9953296B2 (en) System, method, and computer-readable medium for managing edge devices
CN102523200B (zh) 一种物联网消息处理方法
CN109670081B (zh) 业务请求处理的方法及装置
CN106603394A (zh) 订阅通知的实现方法和装置
CN108881251B (zh) 一种任意二进制设备接入解析与标准化的系统及方法
CN102404306B (zh) 一种配置协议的方法及装置
CN109768970A (zh) 一种基于可配置的通用协议生成方法
CN101167327A (zh) 通过移动应用程序访问多个数据源的系统和方法
CN105786913A (zh) 一种面向云制造平台的erp集成数据库服务接口封装系统及方法
CN109871289A (zh) 一种远程过程调用rpc服务生成方法及装置
US7984052B2 (en) System and method for integration of data records having differing data types to a geographical information system
CN110413711A (zh) 一种差异数据获取方法及其存储介质
CN103593188B (zh) 一种用于仪器所见即所得菜单的管理系统及管理方法
KR20130126444A (ko) 사용자 식별 정보를 이용한 컨테이너 자원의 구성 방법, 기록 매체 및 그 장치
CN105516269A (zh) 应用的配置方法和应用的配置装置
EP1528467A2 (en) Method and system for delivery of data objects to components in a distributed system, using multiple data type representations
Li et al. Efficient oneM2M protocol conversion platform based on NB-IoT access
CN103167001A (zh) 一种基于xml的网络数据传输方法
KR100864537B1 (ko) 트리 레이블을 이용한 확장성 표시 언어 문서의 질의 처리 방법, 및 그 질의 처리 장치
CN114051058B (zh) 接口调用方法、平台、电子设备及计算机存储介质
CN115134361B (zh) 一种自动驾驶软件平台的跨平台通信方法及装置
KR100757681B1 (ko) 인터페이스 부하 최적화 시스템 및 방법
CN107623575A (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
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200821

Address after: 518057 Nanshan District science and technology zone, Guangdong, Zhejiang Province, science and technology in the Tencent Building on the 1st floor of the 35 layer

Co-patentee after: TENCENT CLOUD COMPUTING (BEIJING) Co.,Ltd.

Patentee after: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd.

Address before: Shenzhen Futian District City, Guangdong province 518044 Zhenxing Road, SEG Science Park 2 East Room 403

Patentee before: TENCENT TECHNOLOGY (SHENZHEN) Co.,Ltd.