CN112800062A - 一种标签数据存储方法及系统 - Google Patents
一种标签数据存储方法及系统 Download PDFInfo
- Publication number
- CN112800062A CN112800062A CN202110127920.XA CN202110127920A CN112800062A CN 112800062 A CN112800062 A CN 112800062A CN 202110127920 A CN202110127920 A CN 202110127920A CN 112800062 A CN112800062 A CN 112800062A
- Authority
- CN
- China
- Prior art keywords
- tag
- user
- stored
- label
- offset
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 40
- 238000013500 data storage Methods 0.000 title claims description 32
- 238000003860 storage Methods 0.000 claims abstract description 21
- 238000004364 calculation method Methods 0.000 claims description 18
- 230000005055 memory storage Effects 0.000 claims description 14
- 230000002085 persistent effect Effects 0.000 abstract 1
- 238000009482 thermal adhesion granulation Methods 0.000 description 54
- 238000010586 diagram Methods 0.000 description 6
- 239000012530 fluid Substances 0.000 description 6
- 238000013523 data management Methods 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 230000026676 system process Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002250 progressing effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2291—User-Defined Types; Storage management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种标签数据存储方法及系统,将待存储用户标识除以用户块内用户数量取整和取余,分别得到待存储用户标识对应的第一目标用户块和第一用户偏移量,将待存储标签标识除以64取整得到待存储标签标识的第一标签偏移量,根据第一用户偏移量和第一标签偏移量,在第一目标用户块内定位得到第一标签值,将待存储标签标识除以64取余得到待存储标签标识在第一标签值对应的二进制位中的第一标签位置编号,将第一标签位置编号对应的二进制值置为1,完成对待存储用户添加待存储标签。本发明为用户和标签进行了定制化存储,不需要单独设定Schema,读写操作过程通过直接操作内存实现,因此可以定期持久化到磁盘,提高写入性能。
Description
技术领域
本发明涉及互联网技术领域,更具体的说,涉及一种标签数据存储方法及系统。
背景技术
随着互联网技术的广泛普及,越来越多的企业会通过一些特定的标签数据对线上用户进行标识,分析用户在线上的行为,进而有针对性的为用户提供服务。
现有技术中,标签数据管理平台在对标签数据进行存储时,往往需要借助多个基础软件实现。例如,基于关系数据库存储+缓存的方案,基于文档数据库存储+缓存的方案等等。基于关系数据库存储+缓存的方案往往需要固定Schema,Schema代表模式,在数据库里表示一个表的列,往往在建表初期确定,然而当列中所示的标签类别变动较大时,就需要频繁更改Schema。基于文档数据库存储+缓存的方案解决了频繁更改Schema的问题,但是,文档数据库存储+缓存的方案在操作内存的同时需要同步操作磁盘,因此,当需要存储的用户数及对应的标签数较多时,写入时间基本以小时计,例如,在一个7亿人数的白名单标签,可能需要耗时8个小时,所以文档数据库存储+缓存的方案需要耗费大量的时间。
发明内容
有鉴于此,本发明公开一种标签数据存储方法及系统,以实现为用户和标签进行定制化存储,不需要单独设定Schema,也能够根据给定的一个用户标识和一个标签标识,为用户标识添加上该标签标识,另外,读写操作过程通过直接操作内存实现,因此可以定期持久化到磁盘,从而大大提高写入性能,提高写入效率。
一种标签数据存储方法,包括:
获取待存储标签数据,所述待存储标签数据包括:待存储用户标识和待存储标签标识;
将所述待存储用户标识除以用户块内用户数量取整,得到所述待存储用户标识对应的目标用户块,记为第一目标用户块;
将所述待存储用户标识除以所述用户块内用户数量取余,得到所述待存储用户标识在所述第一目标用户块内的用户偏移量,记为第一用户偏移量;
将所述待存储标签标识除以64取整得到所述待存储标签标识的标签偏移量,记为第一标签偏移量;
根据所述第一用户偏移量和所述第一标签偏移量,在所述第一目标用户块内定位得到一个标签值,记为第一标签值;
将所述待存储标签标识除以64取余得到所述待存储标签标识在所述第一标签值对应的二进制位中的标签位置编号,记为第一标签位置编号;
将所述第一标签位置编号对应的二进制值置为1,完成对所述待存储用户标识对应的待存储用户添加所述待存储标签标识对应的待存储标签。
可选的,所述第一目标用户块为:Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Tags表示标签集合,BASE_SIZE表示所述用户块内用户数量,TAG_BLOCK_RANGE表示uint64的元素个数,uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签。
可选的,所述第一用户偏移量为:所述待存储用户标识在内存存储结构中的第一维的下标;
所述内存存储结构如下:
Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Data表示变量名称,N表示一维数组元素个数,Tags表示标签集合,BASE_SIZE表示所述用户块内用户数量,TAG_BLOCK_RANGE表示uint64的元素个数,uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签。
可选的,所述第一标签偏移量为:所述待存储标签标识在所述内存存储结构中的第二维的下标。
可选的,还包括:
获取待查询标签数据,所述待查询标签数据包括:待查询用户标识和待查询标签标识;
将所述待查询用户标识除以所述用户块内用户数量取整,得到所述待查询用户标识对应的目标用户块,记为第二目标用户块;
将所述待查询用户标识除以所述用户块内用户数量取余,得到所述待查询用户标识在所述第二目标用户块内的用户偏移量,记为第二用户偏移量;
将所述待查询标签标识除以64取整得到所述待查询标签标识的标签偏移量,记为第二标签偏移量;
根据所述第二用户偏移量和所述第二标签偏移量,在所述第二目标用户块内定位得到一个标签值,记为第二标签值;
将所述待查询标签标识除以64取余得到所述待查询标签标识在所述第二标签值对应的二进制位中的标签位置编号,记为第二标签位置编号;
判断所述第二标签位置编号为1或是0;
如果所述第二标签位置编号为1,则确定所述待查询用户标识对应的待查询用户具有所述待查询标签标识对应的待查询标签;
如果所述第二标签位置编号为0,则确定所述待查询用户标识对应的待查询用户不具有所述待查询标签标识对应的待查询标签。
一种标签数据存储系统,包括:
第一获取单元,用于获取待存储标签数据,所述待存储标签数据包括:待存储用户标识和待存储标签标识;
第一用户块计算单元,用于将所述待存储用户标识除以用户块内用户数量取整,得到所述待存储用户标识对应的目标用户块,记为第一目标用户块;
第一用户偏移量计算单元,用于将所述待存储用户标识除以所述用户块内用户数量取余,得到所述待存储用户标识在所述第一目标用户块内的用户偏移量,记为第一用户偏移量;
第一标签偏移量计算单元,用于将所述待存储标签标识除以64取整得到所述待存储标签标识的标签偏移量,记为第一标签偏移量;
第一标签值计算单元,用于根据所述第一用户偏移量和所述第一标签偏移量,在所述第一目标用户块内定位得到一个标签值,记为第一标签值;
第一标签位置编号计算单元,用于将所述待存储标签标识除以64取余得到所述待存储标签标识在所述第一标签值对应的二进制位中的标签位置编号,记为第一标签位置编号;
存储单元,用于将所述第一标签位置编号对应的二进制值置为1,完成对所述待存储用户标识对应的待存储用户添加所述待存储标签标识对应的待存储标签。
可选的,所述第一目标用户块为:Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Tags表示标签集合,BASE_SIZE表示所述用户块内用户数量,TAG_BLOCK_RANGE表示uint64的元素个数,uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签。
可选的,所述第一用户偏移量为:所述待存储用户标识在内存存储结构中的第一维的下标;
所述内存存储结构如下:
Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Data表示变量名称,N表示一维数组元素个数,Tags表示标签集合,BASE_SIZE表示所述用户块内用户数量,TAG_BLOCK_RANGE表示uint64的元素个数,uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签。
可选的,所述第一标签偏移量为:所述待存储标签标识在所述内存存储结构中的第二维的下标。
可选的,还包括:
第二获取单元,用于获取待查询标签数据,所述待查询标签数据包括:待查询用户标识和待查询标签标识;
第二用户块计算单元,用于将所述待查询用户标识除以所述用户块内用户数量取整,得到所述待查询用户标识对应的目标用户块,记为第二目标用户块;
第二用户偏移量计算单元,用于将所述待查询用户标识除以所述用户块内用户数量取余,得到所述待查询用户标识在所述第二目标用户块内的用户偏移量,记为第二用户偏移量;
第二标签偏移量计算单元,用于将所述待查询标签标识除以64取整得到所述待查询标签标识的标签偏移量,记为第二标签偏移量;
第二标签值计算单元,用于根据所述第二用户偏移量和所述第二标签偏移量,在所述第二目标用户块内定位得到一个标签值,记为第二标签值;
第二标签位置编号计算单元,用于将所述待查询标签标识除以64取余得到所述待查询标签标识在所述第二标签值对应的二进制位中的标签位置编号,记为第二标签位置编号;
判断单元,用于判断所述第二标签位置编号为1或是0;
第一确定单元,用于如果所述第二标签位置编号为1,则确定所述待查询用户标识对应的待查询用户具有所述待查询标签标识对应的待查询标签;
第二确定单元,用于如果所述第二标签位置编号为0,则确定所述待查询用户标识对应的待查询用户不具有所述待查询标签标识对应的待查询标签。
从上述的技术方案可知,本发明公开了一种标签数据存储方法及系统,通过将待存储用户标识除以用户块内用户数量取整,得到待存储用户标识对应的第一目标用户块,将待存储用户标识除以用户块内用户数量取余,得到待存储用户标识在第一目标用户块内的第一用户偏移量,将待存储标签标识除以64取整得到待存储标签标识的第一标签偏移量,根据第一用户偏移量和第一标签偏移量,在第一目标用户块内定位得到第一标签值,将待存储标签标识除以64取余得到待存储标签标识在第一标签值对应的二进制位中的第一标签位置编号,将第一标签位置编号对应的二进制值置为1,完成对待存储用户标识对应的待存储用户添加待存储标签标识对应的待存储标签。本发明为用户和标签进行了定制化存储,不需要单独设定Schema,也能够根据给定的一个用户标识和一个标签标识,为用户标识添加上该标签标识,另外,读写操作过程通过直接操作内存实现,因此可以定期持久化到磁盘,从而大大提高了写入性能,提高了写入效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据公开的附图获得其他的附图。
图1为本发明实施例公开的一种标签数据存储方法流程图;
图2为本发明实施例公开的一种标签数据存储的集群方案示意图;
图3为本发明实施例公开的一种标签数据查询方法流程图;
图4为本发明实施例公开的一种标签数据存储系统的结构示意图;
图5为本发明实施例公开的一种标签数据存储系统中标签数据查询模块的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种标签数据存储方法及系统,以实现为用户和标签进行定制化存储,不需要单独设定Schema,也能够根据给定的一个用户标识和一个标签标识,为用户标识添加上该标签标识,另外,读写操作过程通过直接操作内存实现,因此可以定期持久化到磁盘,从而大大提高写入性能,提高写入效率。
参见图1,本发明实施例公开的一种标签数据存储方法流程图,该方法包括:
步骤S101、获取待存储标签数据;
其中,待存储标签数据包括:待存储用户标识和待存储标签标识。
需要说明的是,本实施例中的待存储用户标识和待存储标签标识均为不小于0的整数,比如,64位数据,表示方式为uint64。uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签,可以存储64个标签。
步骤S102、将所述待存储用户标识除以用户块内用户数量取整,得到所述待存储用户标识对应的目标用户块,记为第一目标用户块;
需要说明的是,本实施例中的存储结构如下:
内存部分为一个一维数组,一维数组的元素为一个二维数组,二维数组可以称为用户块或区块。
内存存储结构表达为:
Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Data表示变量名称,N表示一维数组元素个数,BASE_SIZE表示用户块内用户数量,在实际应用中,BASE_SIZE的取值依据实际需要而定,比如,BASE_SIZE=100000,TAG_BLOCK_RANGE表示uint64的元素个数,[TAG_BLOCK_RANGE]uint64表示当前可存储的标签总数,TAG_BLOCK_RANGE的取值依据实际需要而定,比如,TAG_BLOCK_RANGE=3,[3]uint64表示当前可存储的标签总数为:3*64。
磁盘部分可简单描述为:一个用户块对应磁盘中的一个用户块文件,用户块中的用户数据会通过另外一个线程定期写入磁盘上对应的用户块文件中,系统重启时也会通过多个线程并发读取多个用户块文件记载到Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构内。
本实施例中得到的待存储用户标识对应的目标用户块也即待存储用户标识在Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中一维数组的下标,根据该下标获取对应元素,也即第一目标用户块为:
Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64。
步骤S102对应的公式可以表示为:
uidIdx=uid/BASE_SIZE;
式中,uidIdx表示第一目标用户块,uid表示待存储用户标识。
步骤S103、将所述待存储用户标识除以所述用户块内用户数量取余,得到所述待存储用户标识在所述第一目标用户块内的用户偏移量,记为第一用户偏移量;
其中,计算得到的第一用户偏移量也即待存储用户标识在Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中的第一维的下标。
步骤S103对应的计算公式为:
uidPos=uid%BASE_SIZE;
式中,uidPos表示第一用户偏移量。
步骤S104、将所述待存储标签标识除以64取整得到所述待存储标签标识的标签偏移量,记为第一标签偏移量;
其中,将待存储标签标识除以64取整得到待存储标签标识的第一标签偏移量,第一标签偏移量也即待存储标签标识在Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中的第二维的下标。
步骤S104对应的计算公式为:
tagIdx=tagId/64;
式中,tagIdx表示第一标签偏移量,tagId表示待存储标签标识。
步骤S105、根据所述第一用户偏移量和所述第一标签偏移量,在所述第一目标用户块内定位得到一个标签值,记为第一标签值;
其中,标签值也即uint64中的元素值。
步骤S106、将所述待存储标签标识除以64取余得到所述待存储标签标识在所述第一标签值对应的二进制位中的标签位置编号,记为第一标签位置编号;
其中,标签位置编号的范围为0~63之间。
步骤S106对应的计算公式为:
tagPos=tagId%64;
式中,tagPos表示第一标签值。
步骤S107、将所述第一标签位置编号对应的二进制值置为1,完成对待存储用户标识对应的待存储用户添加待存储标签标识对应的待存储标签。
综上可知,本发明公开的标签数据存储方法,通过将待存储用户标识除以用户块内用户数量取整,得到待存储用户标识对应的第一目标用户块,将待存储用户标识除以用户块内用户数量取余,得到待存储用户标识在第一目标用户块内的第一用户偏移量,将待存储标签标识除以64取整得到待存储标签标识的第一标签偏移量,根据第一用户偏移量和第一标签偏移量,在第一目标用户块内定位得到第一标签值,将待存储标签标识除以64取余得到待存储标签标识在第一标签值对应的二进制位中的第一标签位置编号,将第一标签位置编号对应的二进制值置为1,完成对待存储用户标识对应的待存储用户添加待存储标签标识对应的待存储标签。本发明为用户和标签进行了定制化存储,不需要单独设定Schema,也能够根据给定的一个用户标识和一个标签标识,为用户标识添加上该标签标识,另外,读写操作过程通过直接操作内存实现,因此可以定期持久化到磁盘,从而大大提高了写入性能,提高了写入效率。
另外,本发明中内存和磁盘都在一个系统进程内,内存和磁盘相关操作都可以通过设定合理的进程锁和区块锁,保证操作的原子性,无需考虑多个外部存储和缓存更新一致的问题。
需要说明的是,本实施例中可以同时存储[TAG_BLOCK_RANGE]uint64个标签,且可循环利用。为了支持更多的标签,本专利设计了一个集群方案,通过定制用户标签系统Proxy(代理)的方式,Proxy通过范围(Range)方式区分。以TAG_BLOCK_RANGE=3为例,根据标签范围[0,64*3),[64*3,64*3*2)依次递进的方式,路由到不同范围的实例,实现支持更大范围的标签存储。
参见图2所示的标签数据存储的集群方案示意图,区块存储结构中,内存用于存储用户块,如图2中的用户块1、用户块2,…,用户块N,磁盘用于存储用户块文件,如图2中示出的用户块文件1、用户块文件2,…,用户块N,内存中的一个用户块对应磁盘中的一个用户块文件,无状态代理层中为Proxy,Proxy接收携带标签范围的接口请求,Proxy根据标签范围选择实例,并路由到与标签范围对应的实例,实例接收到接口请求后,根据用户标识计算目标用户块和用户偏移量,根据标签标识计算标签偏移量,并进而基于目标用户块、用户偏移量和便签偏移量计算标签位置编号。若是为用户添加标签,则将标签位置编号对应的二进制(bit)值置为1;若时查询标签,则根据签位置编号对应的二进制值为1还是0确定标签查询结果,并将标签查询结果返回至Proxy,其中,图2中的标签元数据为存储标签的语义,是一段文字描述信息,比如,18这个标签代表“白名单”。
图1所示的实施例示出的标签数据存储示出了为用户添加标签的过程,在图1所示实施例的基础上,还可以用户标识与某个标签标识是否对应。
因此,为进一步优化上述实施例,在图1所示实施例的基础上,参见图3,本发明实施例公开的一种标签数据查询方法流程图,该方法包括:
步骤S201、获取待查询标签数据;
其中,待查询标签数据包括:待查询用户标识和待查询标签标识。
需要说明的是,本实施例中的待查询用户标识和待查询标签标识均为不小于0的整数,比如,64位数据,表示方式为uint64。uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签,可以存储64个标签。
步骤S202、将所述待查询用户标识除以用户块内用户数量取整,得到所述待查询用户标识对应的目标用户块,记为第二目标用户块;
本实施例中得到的待查询用户标识对应的目标用户块也即待查询用户标识在Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中一维数组的下标,根据该下标获取对应元素,也即第二目标用户块为:
Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64。
步骤S202对应的公式可以表示为:
uidIdx=uid/BASE_SIZE;
式中,uidIdx表示第二目标用户块,uid表示待查询用户标识。
步骤S203、将所述待查询用户标识除以所述用户块内用户数量取余,得到所述待查询用户标识在所述第二目标用户块内的用户偏移量,记为第二用户偏移量;
其中,计算得到的用户偏移量也即待查询用户标识在Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中的第二维的下标。
步骤S103对应的计算公式为:
uidPos=uid%BASE_SIZE;
式中,uidPos表示第二用户偏移量。
步骤S204、将所述待查询标签标识除以64取整得到所述待查询标签标识的标签偏移量,记为第二标签偏移量;
其中,将待查询标签标识除以64取整得到待查询标签标识的第二标签偏移量,第二标签偏移量也即待查询标签标识在Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中的第二维的下标。
步骤S204对应的计算公式为:
tagIdx=tagId/64;
式中,tagIdx表示第二标签偏移量,tagId表示待查询标签标识。
步骤S205、根据所述第二用户偏移量和所述第二标签偏移量,在所述第二目标用户块内定位得到一个标签值,记为第二标签值;
其中,标签值也即uint64中的元素值。
步骤S206、将所述待查询标签标识除以64取余得到所述待查询标签标识在所述第二标签值对应的二进制位中的标签位置编号,记为第二标签位置编号;
其中,标签位置编号的范围为0~63之间。
步骤S206对应的计算公式为:
tagPos=tagId%64;
式中,tagPos表示第二标签值。
步骤S207、判断所述第二标签位置编号为1或是0,如果所述第二标签位置编号为1,则执行步骤S208,如果所述第二标签位置编号为0,则执行步骤S209;
步骤S208、确定所述待查询用户标识对应的待查询用户具有所述待查询标签标识对应的待查询标签。
步骤S209、确定所述待查询用户标识对应的待查询用户不具有所述待查询标签标识对应的待查询标签。
综上可知,本发明通过将待存储用户标识除以用户块内用户数量取整,得到待存储用户标识对应的第二目标用户块,将待存储用户标识除以用户块内用户数量取余,得到待存储用户标识在第二目标用户块内的第二用户偏移量,将待存储标签标识除以64取整得到待存储标签标识的第二标签偏移量,根据第二用户偏移量和第二标签偏移量,在第二目标用户块内定位得到第二标签值,将待存储标签标识除以64取余得到待存储标签标识在第二标签值对应的二进制位中的第二标签位置编号,通过判断第二标签位置编号为1还是0,即可确定待查询用户标识对应的待查询用户是否具有待查询标签标识对应的待查询标签。并且,当第二标签位置编号为1时,确定待查询用户具有待查询标签。因此,本发明可以根据给定的一个用户标识和一个标签标识,可以判断该用户标识是否具有该标签标识。
与上述方法实施例相对应,本发明还公开了一种标签数据存储系统。
参见图4,本发明实施例公开的一种标签数据存储系统的结构示意图,该系统包括:
第一获取单元301,用于获取待存储标签数据,所述待存储标签数据包括:待存储用户标识和待存储标签标识;
需要说明的是,本实施例中的待存储用户标识和待存储标签标识均为不小于0的整数,比如,64位数据,表示方式为uint64。uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签,可以存储64个标签。
第一用户块计算单元302,用于将所述待存储用户标识除以用户块内用户数量取整,得到所述待存储用户标识对应的目标用户块,记为第一目标用户块;
需要说明的是,本实施例中的存储结构如下:
内存部分为一个一维数组,一维数组的元素为一个二维数组,二维数组可以称为用户块或区块。
内存存储结构表达为:
Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Data表示变量名称,N表示一维数组元素个数,BASE_SIZE表示用户块内用户数量,在实际应用中,BASE_SIZE的取值依据实际需要而定,比如,BASE_SIZE=100000,TAG_BLOCK_RANGE表示uint64的元素个数,[TAG_BLOCK_RANGE]uint64表示当前可存储的标签总数,TAG_BLOCK_RANGE的取值依据实际需要而定,比如,TAG_BLOCK_RANGE=3,[3]uint64表示当前可存储的标签总数为:3*64。
磁盘部分可简单描述为:一个用户块对应磁盘中的一个用户块文件,用户块中的用户数据会通过另外一个线程定期写入磁盘上对应的用户块文件中,系统重启时也会通过多个线程并发读取多个用户块文件记载到Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构内。
本实施例中得到的待存储用户标识对应的目标用户块也即待存储用户标识在Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中一维数组的下标,根据该下标获取对应元素,也即第一目标用户块为:
Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64。
第一用户偏移量计算单元303,用于将所述待存储用户标识除以所述用户块内用户数量取余,得到所述待存储用户标识在所述第一目标用户块内的用户偏移量,记为第一用户偏移量;
其中,计算得到的第一用户偏移量也即待存储用户标识在Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中的第一维的下标。
第一标签偏移量计算单元304,用于将所述待存储标签标识除以64取整得到所述待存储标签标识的标签偏移量,记为第一标签偏移量;
其中,将待存储标签标识除以64取整得到待存储标签标识的第一标签偏移量,第一标签偏移量也即待存储标签标识在Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中的第二维的下标。
第一标签值计算单元305,用于根据所述第一用户偏移量和所述第一标签偏移量,在所述第一目标用户块内定位得到一个标签值,记为第一标签值;
其中,标签值也即uint64中的元素值。
第一标签位置编号计算单元306,用于将所述待存储标签标识除以64取余得到所述待存储标签标识在所述第一标签值对应的二进制位中的标签位置编号,记为第一标签位置编号;
其中,标签位置编号的范围为0~63之间。
存储单元307,用于将所述第一标签位置编号对应的二进制值置为1,完成对所述待存储用户标识对应的待存储用户添加所述待存储标签标识对应的待存储标签。
综上可知,本发明公开的标签数据存储系统,通过将待存储用户标识除以用户块内用户数量取整,得到待存储用户标识对应的第一目标用户块,将待存储用户标识除以用户块内用户数量取余,得到待存储用户标识在第一目标用户块内的第一用户偏移量,将待存储标签标识除以64取整得到待存储标签标识的第一标签偏移量,根据第一用户偏移量和第一标签偏移量,在第一目标用户块内定位得到第一标签值,将待存储标签标识除以64取余得到待存储标签标识在第一标签值对应的二进制位中的第一标签位置编号,将第一标签位置编号对应的二进制值置为1,完成对待存储用户标识对应的待存储用户添加待存储标签标识对应的待存储标签。本发明为用户和标签进行了定制化存储,不需要单独设定Schema,也能够根据给定的一个用户标识和一个标签标识,为用户标识添加上该标签标识,另外,读写操作过程通过直接操作内存实现,因此可以定期持久化到磁盘,从而大大提高了写入性能,提高了写入效率。
另外,本发明中内存和磁盘都在一个系统进程内,内存和磁盘相关操作都可以通过设定合理的进程锁和区块锁,保证操作的原子性,无需考虑多个外部存储和缓存更新一致的问题。
上述实施例示出的标签数据存储示出了为用户添加标签的过程,在图4所示实施例的基础上,还可以用户标识与某个标签标识是否对应。
因此,为进一步优化上述实施例,参见图5,本发明实施例公开的一种标签数据存储系统中标签数据查询模块的结构示意图,标签数据查询模块包括:
第二获取单元401,用于获取待查询标签数据,所述待查询标签数据包括:待查询用户标识和待查询标签标识;
第二用户块计算单元402,用于将所述待查询用户标识除以所述用户块内用户数量取整,得到所述待查询用户标识对应的目标用户块,记为第二目标用户块;
本实施例中得到的待查询用户标识对应的目标用户块也即待查询用户标识在Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64结构中一维数组的下标,根据该下标获取对应元素,也即第二目标用户块为:
Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64。
第二用户偏移量计算单元403,用于将所述待查询用户标识除以所述用户块内用户数量取余,得到所述待查询用户标识在所述第二目标用户块内的用户偏移量,记为第二用户偏移量;
第二标签偏移量计算单元404,用于将所述待查询标签标识除以64取整得到所述待查询标签标识的标签偏移量,记为第二标签偏移量;
第二标签值计算单元405,用于根据所述第二用户偏移量和所述第二标签偏移量,在所述第二目标用户块内定位得到一个标签值,记为第二标签值;
第二标签位置编号计算单元406,用于将所述待查询标签标识除以64取余得到所述待查询标签标识在所述第二标签值对应的二进制位中的标签位置编号,记为第二标签位置编号;
判断单元407,用于判断所述第二标签位置编号为1或是0;
第一确定单元408,用于如果所述第二标签位置编号为1,则确定所述待查询用户标识对应的待查询用户具有所述待查询标签标识对应的待查询标签;
第二确定单元409,用于如果所述第二标签位置编号为0,则确定所述待查询用户标识对应的待查询用户不具有所述待查询标签标识对应的待查询标签。
综上可知,本发明通过将待存储用户标识除以用户块内用户数量取整,得到待存储用户标识对应的第二目标用户块,将待存储用户标识除以用户块内用户数量取余,得到待存储用户标识在第二目标用户块内的第二用户偏移量,将待存储标签标识除以64取整得到待存储标签标识的第二标签偏移量,根据第二用户偏移量和第二标签偏移量,在第二目标用户块内定位得到第二标签值,将待存储标签标识除以64取余得到待存储标签标识在第二标签值对应的二进制位中的第二标签位置编号,通过判断第二标签位置编号为1还是0,即可确定待查询用户标识对应的待查询用户是否具有待查询标签标识对应的待查询标签。并且,当第二标签位置编号为1时,确定待查询用户具有待查询标签。因此,本发明可以根据给定的一个用户标识和一个标签标识,可以判断该用户标识是否具有该标签标识。
需要特别说明的是,系统实施例中各组成部分的具体工作原理,请参见方法实施例对应部分,此处不再赘述。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种标签数据存储方法,其特征在于,包括:
获取待存储标签数据,所述待存储标签数据包括:待存储用户标识和待存储标签标识;
将所述待存储用户标识除以用户块内用户数量取整,得到所述待存储用户标识对应的目标用户块,记为第一目标用户块;
将所述待存储用户标识除以所述用户块内用户数量取余,得到所述待存储用户标识在所述第一目标用户块内的用户偏移量,记为第一用户偏移量;
将所述待存储标签标识除以64取整得到所述待存储标签标识的标签偏移量,记为第一标签偏移量;
根据所述第一用户偏移量和所述第一标签偏移量,在所述第一目标用户块内定位得到一个标签值,记为第一标签值;
将所述待存储标签标识除以64取余得到所述待存储标签标识在所述第一标签值对应的二进制位中的标签位置编号,记为第一标签位置编号;
将所述第一标签位置编号对应的二进制值置为1,完成对所述待存储用户标识对应的待存储用户添加所述待存储标签标识对应的待存储标签。
2.根据权利要求1所述的标签数据存储方法,其特征在于,所述第一目标用户块为:Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Tags表示标签集合,BASE_SIZE表示所述用户块内用户数量,TAG_BLOCK_RANGE表示uint64的元素个数,uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签。
3.根据权利要求1所述的标签数据存储方法,其特征在于,所述第一用户偏移量为:所述待存储用户标识在内存存储结构中的第一维的下标;
所述内存存储结构如下:
Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Data表示变量名称,N表示一维数组元素个数,Tags表示标签集合,BASE_SIZE表示所述用户块内用户数量,TAG_BLOCK_RANGE表示uint64的元素个数,uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签。
4.根据权利要求3所述的标签数据存储方法,其特征在于,所述第一标签偏移量为:所述待存储标签标识在所述内存存储结构中的第二维的下标。
5.根据权利要求1所述的标签数据存储方法,其特征在于,还包括:
获取待查询标签数据,所述待查询标签数据包括:待查询用户标识和待查询标签标识;
将所述待查询用户标识除以所述用户块内用户数量取整,得到所述待查询用户标识对应的目标用户块,记为第二目标用户块;
将所述待查询用户标识除以所述用户块内用户数量取余,得到所述待查询用户标识在所述第二目标用户块内的用户偏移量,记为第二用户偏移量;
将所述待查询标签标识除以64取整得到所述待查询标签标识的标签偏移量,记为第二标签偏移量;
根据所述第二用户偏移量和所述第二标签偏移量,在所述第二目标用户块内定位得到一个标签值,记为第二标签值;
将所述待查询标签标识除以64取余得到所述待查询标签标识在所述第二标签值对应的二进制位中的标签位置编号,记为第二标签位置编号;
判断所述第二标签位置编号为1或是0;
如果所述第二标签位置编号为1,则确定所述待查询用户标识对应的待查询用户具有所述待查询标签标识对应的待查询标签;
如果所述第二标签位置编号为0,则确定所述待查询用户标识对应的待查询用户不具有所述待查询标签标识对应的待查询标签。
6.一种标签数据存储系统,其特征在于,包括:
第一获取单元,用于获取待存储标签数据,所述待存储标签数据包括:待存储用户标识和待存储标签标识;
第一用户块计算单元,用于将所述待存储用户标识除以用户块内用户数量取整,得到所述待存储用户标识对应的目标用户块,记为第一目标用户块;
第一用户偏移量计算单元,用于将所述待存储用户标识除以所述用户块内用户数量取余,得到所述待存储用户标识在所述第一目标用户块内的用户偏移量,记为第一用户偏移量;
第一标签偏移量计算单元,用于将所述待存储标签标识除以64取整得到所述待存储标签标识的标签偏移量,记为第一标签偏移量;
第一标签值计算单元,用于根据所述第一用户偏移量和所述第一标签偏移量,在所述第一目标用户块内定位得到一个标签值,记为第一标签值;
第一标签位置编号计算单元,用于将所述待存储标签标识除以64取余得到所述待存储标签标识在所述第一标签值对应的二进制位中的标签位置编号,记为第一标签位置编号;
存储单元,用于将所述第一标签位置编号对应的二进制值置为1,完成对所述待存储用户标识对应的待存储用户添加所述待存储标签标识对应的待存储标签。
7.根据权利要求6所述的标签数据存储系统,其特征在于,所述第一目标用户块为:Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Tags表示标签集合,BASE_SIZE表示所述用户块内用户数量,TAG_BLOCK_RANGE表示uint64的元素个数,uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签。
8.根据权利要求6所述的标签数据存储系统,其特征在于,所述第一用户偏移量为:所述待存储用户标识在内存存储结构中的第一维的下标;
所述内存存储结构如下:
Data[N]Tags[BASE_SIZE][TAG_BLOCK_RANGE]uint64;
其中,Data表示变量名称,N表示一维数组元素个数,Tags表示标签集合,BASE_SIZE表示所述用户块内用户数量,TAG_BLOCK_RANGE表示uint64的元素个数,uint64为无符号64位整数,采用位运算方式取值,每一位代表一个标签。
9.根据权利要求8所述的标签数据存储系统,其特征在于,所述第一标签偏移量为:所述待存储标签标识在所述内存存储结构中的第二维的下标。
10.根据权利要求6所述的标签数据存储系统,其特征在于,还包括:
第二获取单元,用于获取待查询标签数据,所述待查询标签数据包括:待查询用户标识和待查询标签标识;
第二用户块计算单元,用于将所述待查询用户标识除以所述用户块内用户数量取整,得到所述待查询用户标识对应的目标用户块,记为第二目标用户块;
第二用户偏移量计算单元,用于将所述待查询用户标识除以所述用户块内用户数量取余,得到所述待查询用户标识在所述第二目标用户块内的用户偏移量,记为第二用户偏移量;
第二标签偏移量计算单元,用于将所述待查询标签标识除以64取整得到所述待查询标签标识的标签偏移量,记为第二标签偏移量;
第二标签值计算单元,用于根据所述第二用户偏移量和所述第二标签偏移量,在所述第二目标用户块内定位得到一个标签值,记为第二标签值;
第二标签位置编号计算单元,用于将所述待查询标签标识除以64取余得到所述待查询标签标识在所述第二标签值对应的二进制位中的标签位置编号,记为第二标签位置编号;
判断单元,用于判断所述第二标签位置编号为1或是0;
第一确定单元,用于如果所述第二标签位置编号为1,则确定所述待查询用户标识对应的待查询用户具有所述待查询标签标识对应的待查询标签;
第二确定单元,用于如果所述第二标签位置编号为0,则确定所述待查询用户标识对应的待查询用户不具有所述待查询标签标识对应的待查询标签。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110127920.XA CN112800062A (zh) | 2021-01-29 | 2021-01-29 | 一种标签数据存储方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110127920.XA CN112800062A (zh) | 2021-01-29 | 2021-01-29 | 一种标签数据存储方法及系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112800062A true CN112800062A (zh) | 2021-05-14 |
Family
ID=75812909
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110127920.XA Pending CN112800062A (zh) | 2021-01-29 | 2021-01-29 | 一种标签数据存储方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112800062A (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6324633B1 (en) * | 1999-12-29 | 2001-11-27 | Stmicroelectronics, Inc. | Division of memory into non-binary sized cache and non-cache areas |
CN110597865A (zh) * | 2019-09-02 | 2019-12-20 | 深圳前海微众银行股份有限公司 | 一种处理用户标签的方法、装置、计算设备及存储介质 |
CN111274249A (zh) * | 2020-01-19 | 2020-06-12 | 深圳前海微众银行股份有限公司 | 用户画像数据存储优化方法、设备及可读存储介质 |
CN112015775A (zh) * | 2020-09-27 | 2020-12-01 | 北京百度网讯科技有限公司 | 标签数据处理方法、装置、设备和存储介质 |
-
2021
- 2021-01-29 CN CN202110127920.XA patent/CN112800062A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6324633B1 (en) * | 1999-12-29 | 2001-11-27 | Stmicroelectronics, Inc. | Division of memory into non-binary sized cache and non-cache areas |
CN110597865A (zh) * | 2019-09-02 | 2019-12-20 | 深圳前海微众银行股份有限公司 | 一种处理用户标签的方法、装置、计算设备及存储介质 |
CN111274249A (zh) * | 2020-01-19 | 2020-06-12 | 深圳前海微众银行股份有限公司 | 用户画像数据存储优化方法、设备及可读存储介质 |
CN112015775A (zh) * | 2020-09-27 | 2020-12-01 | 北京百度网讯科技有限公司 | 标签数据处理方法、装置、设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8886598B1 (en) | Tag-based synchronization | |
US8924365B2 (en) | System and method for range search over distributive storage systems | |
US7689574B2 (en) | Index and method for extending and querying index | |
CN100468402C (zh) | 一种数据存储及查询方法 | |
US7376658B1 (en) | Managing cross-store relationships to data objects | |
CN112363979B (zh) | 一种基于图数据库的分布式索引方法和系统 | |
CN102609488B (zh) | 客户端及其数据查询方法、服务端和数据查询系统 | |
CN108932286B (zh) | 一种数据查询方法及装置 | |
CN103186622B (zh) | 一种全文检索系统中索引信息的更新方法以及装置 | |
CN109284273B (zh) | 一种采用后缀数组索引的海量小文件查询方法及系统 | |
CN111090656B (zh) | 一种动态构建对象画像的方法及系统 | |
US20130024459A1 (en) | Combining Full-Text Search and Queryable Fields in the Same Data Structure | |
CN101963993B (zh) | 一种数据库单表记录快速查找的方法 | |
CN102193988A (zh) | 一种图形数据库节点数据的检索方法及系统 | |
CN105677645A (zh) | 一种数据表比对方法和装置 | |
US7890456B2 (en) | Sharing of database objects | |
EP3343395B1 (en) | Data storage method and apparatus for mobile terminal | |
KR20080079346A (ko) | 맵 업데이트 시스템 및 방법, 방법 프로그램을 기록한저장매체, 사용자 단말기 | |
CN112800062A (zh) | 一种标签数据存储方法及系统 | |
US9230011B1 (en) | Index-based querying of archived data sets | |
CN110874360A (zh) | 一种基于固定容量的有序队列缓存方法及装置 | |
KR20190123819A (ko) | 데이터 저장장치의 주소 맵핑 테이블 운용 방법 | |
CN110543627B (zh) | 一种报表配置信息的存储方法及系统 | |
JP2004192657A (ja) | 情報検索システム、情報検索方法および情報検索用プログラムを記録した記録媒体 | |
CN101751390B (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 |