一种数据存储结构、数据存储查询方法、终端及介质与流程

文档序号:14774289发布日期:2018-06-23 02:37阅读:168来源:国知局

本发明属于数据存储技术领域,具体涉及一种数据存储结构、数据存储查询方法、终端及介质。



背景技术:

广告程序化交易对API请求的实时性要求非常高,大部分ADX(广告交易平台)都要求DSP在100ms以内完成请求的响应,请求的频率非常高,请求的数据量非常大,在API端往往需要在内存中缓存广告的人群数据,这部分数据量往往非常大,随着内存成本的水涨船高,这部分的资源消耗也成为广告程序化交易服务的一大资源开销。

在程序化广告交易的竞价流量中,程序逻辑一般会通过广告流量中的设备ID获取该设备的设备数据,设备数据是一个比较庞大的集群,设备ID的量也非常大,一般在10亿规模以上,如此大规模的数据需要非常大的存储空间。

为了加快API的响应效率,我们一般会把数据存储在内存中,当然这也造成了非常高的存储成本。通过观察发现,因为网民更换手机设备等原因,一部分的设备将不会再出现在互联网上,还有部分网民上网的频率比较低,如果我们一直将这部分数据存储在内存中,将会造成资源的浪费和成本的增加。



技术实现要素:

针对现有技术中的缺陷,本发明提供了一种数据存储结构、数据存储查询方法、终端及介质,将广告人群数据进行冷热数据区分,将频繁出现在互联网上的设备数据存储在内存的热数据集群中,一段时间不在互联网上出现的设备数据存储在成本较低的硬盘的冷数据集群中,从而充分利用了资源、节约了存储成本。

第一方面,本发明提供了一种数据存储结构,包括硬盘的冷数据集群、内存的热数据集群和内存的ID收录集群;

所述冷数据集群,用于存储若干个设备数据,每个设备数据包括设备ID;

所述热数据集群,用于存储活跃数据,活跃数据为在设置的时间阈值T内被重复查询的设备数据;

所述ID收录集群,用于存储设备ID。

第二方面,本发明提供了一种数据存储查询方法,基于第一方面所述的数据存储结构,包括以下步骤:

获取广告请求,根据广告请求得到设备ID;

查询ID收录集群;

判断ID收录集群是否存储有设备ID,若是,查询热数据集群,若否,将广告请求反馈给广告出价单元;

判断热数据集群是否存储有与设备ID相关的设备数据,若是,将设备数据反馈给广告出价单元,若否,则查询冷数据集群;

将从冷数据集群中查询到的设备数据反馈给广告出价单元,并将设备数据作为活跃数据更新到热数据集群中;

根据当前设备数据被查询的时间作为初始时间,判断在设置的时间阈值T内,设备数据是否被再次查询,若否,将设备数据从热数据集群中删除。

优选地,在获取广告请求前,还包括获取设备数据,将设备数据存入冷数据集群,将设备ID存入ID收录集群。

优选地,所述冷数据集群,用于存储若干个设备数据,每个设备数据包括设备ID;

所述热数据集群,用于存储活跃数据,活跃数据为在设置的时间阈值T内被重复查询的设备数据;

所述ID收录集群,用于存储设备ID。

优选地,所述冷数据集群采用Pika数据库,热数据集群和ID收录集群采用Redis数据库。

优选地,所述将设备ID存入ID收录集群具体为:

ID收录集群根据设备ID进行hash计算得到键值,将键值标识为1作为hash表的一个数据项进行存储。

优选地,所述hash计算具体为:

将设备ID做CRC32运算并得到运算结果,将运算结果对1500万进行取模得到键值。

第三方面,本发明提供了一种终端,包括处理器和与处理器连接的存储器,其中,存储器用于存储计算机程序,计算机程序包括程序指令,处理器被配置用于调用程序指令,执行第二方面所述的方法。

第四方面,本发明提供了一种计算机可读存储介质,计算机存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被处理器执行时使处理器执行第二方面所述的方法。

本发明的有益效果为:本发明将广告人群数据进行冷热数据区分,将频繁出现在互联网上的设备数据存储在内存的热数据集群中,一段时间不在互联网上出现的设备数据存储在成本较低的硬盘的冷数据集群中,从而充分利用了资源、节约了存储成本。

附图说明

为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍。在所有附图中,类似的元件或部分一般由类似的附图标记标识。附图中,各元件或部分并不一定按照实际的比例绘制。

图1为本实施例中数据存储查询方法的流程图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

应当理解,当在本说明书和所附权利要求书中使用时,术语“包括”和“包含”指示所描述特征、整体、步骤、操作、元素和/或组件的存在,但并不排除一个或多个其它特征、整体、步骤、操作、元素、组件和/或其集合的存在或添加。

还应当理解,在此本发明说明书中所使用的术语仅仅是出于描述特定实施例的目的而并不意在限制本发明。如在本发明说明书和所附权利要求书中所使用的那样,除非上下文清楚地指明其它情况,否则单数形式的“一”、“一个”及“该”意在包括复数形式。

还应当进一步理解,在本发明说明书和所附权利要求书中使用的术语“和/或”是指相关联列出的项中的一个或多个的任何组合以及所有可能组合,并且包括这些组合。

实施例一:

实施例一提供了一种数据存储结构,包括硬盘的冷数据集群、内存的热数据集群和内存的ID收录集群;

所述冷数据集群,用于存储若干个设备数据,每个设备数据包括设备ID;

所述热数据集群,用于存储活跃数据,活跃数据为在设置的时间阈值T内被重复查询的设备数据;

所述ID收录集群,用于存储设备ID。

众所周知,内存的访问速度非常快,可以承受很高的吞吐量,相比之下,固态硬盘的访问速度比内存要慢得多,吞吐量也低得多,如果同一时间有大量请求涌进冷数据集群中,那么可能会把整个集群给压垮。所以,本技术方案让一部分请求命中内存的热数据集群,让另一部分请求命中硬盘的冷数据集群。

热数据集群用来存储最近几天活跃过的设备数据(即活跃数据),让大部分的请求都命中到热数据集群。冷数据集群存储有全部的设备数据,当在热数据集群中查询不到数据时,就到冷数据集群中重新查询数据。考虑到如果同一时间有大量未收录的广告请求进来时,这大量的请求会涌进冷数据集群,最终可能导致冷数据集群被压垮,所以本技术方案设有一个集群来记录收录了的设备ID,这样就可以过滤掉未收录的设备ID,从而禁止这些请求进入冷数据集群。

综上所述,本实施例将广告人群数据进行冷热数据区分,将频繁出现在互联网上的设备数据存储在内存的热数据集群中,一段时间不在互联网上出现的设备数据存储在成本较低的硬盘的冷数据集群中,从而充分利用了资源、节约了存储成本。

实施例二:

实施例二提供了一种数据存储查询方法,基于第一方面所述的数据存储结构,如图1所示,包括以下步骤:

S1,获取设备数据,将设备数据存入冷数据集群,将设备ID存入ID收录集群。

S2,获取广告请求,根据广告请求得到设备ID;

S3,查询ID收录集群;

S4,判断ID收录集群是否存储有设备ID,若是,查询热数据集群,若否,将广告请求反馈给广告出价单元;

S5,判断热数据集群是否存储有与设备ID相关的设备数据,若是,将设备数据反馈给广告出价单元,若否,则查询冷数据集群;

S6,将从冷数据集群中查询到的设备数据反馈给广告出价单元,并将设备数据作为活跃数据更新到热数据集群中;

S7,根据当前设备数据被查询的时间作为初始时间,判断在设置的时间阈值T内,设备数据是否被再次查询,若否,将设备数据从热数据集群中删除。

本实施例中,在获取广告请求之前,通过开发人员或者管理人员的操作,冷数据集群和ID收录集群分别存储有相应的数据。获取媒体方发送的广告请求(广告请求包括设备数据、广告位信息、广告位低价)后,得到设备ID,然后在各个集群中查找与设备ID相关的设备数据,然后将设备数据发送给广告出价单元,广告出价单元根据设备数据进行分析和出价(例如该用户喜欢购物,广告出价单元就会返回一些与购物相关的广告和一个价格给到媒体方,这个就是一个出价的过程),如果媒体方觉得我们出的价格合适,就会把我们返回的广告展示给用户看。

本实施例的所述冷数据集群,用于存储若干个设备数据,每个设备数据包括设备ID;所述热数据集群,用于存储活跃数据,活跃数据为在设置的时间阈值T内被重复查询的设备数据;所述ID收录集群,用于存储设备ID。

众所周知,内存的访问速度非常快,可以承受很高的吞吐量,相比之下,固态硬盘的访问速度比内存要慢得多,吞吐量也低得多,如果同一时间有大量请求涌进冷数据集群中,那么可能会把整个集群给压垮。所以,本技术方案让一部分请求命中内存的热数据集群,让另一部分请求命中硬盘的冷数据集群。

热数据集群用来存储最近几天活跃过的设备数据(即活跃数据),让大部分的请求都命中到热数据集群。冷数据集群存储有全部的设备数据,当在热数据集群中查询不到数据时,就到冷数据集群中重新查询数据。考虑到如果同一时间有大量未收录的广告请求进来时,这大量的请求会涌进冷数据集群,最终可能导致冷数据集群被压垮,所以本技术方案设有一个集群来记录收录了的设备ID,这样就可以过滤掉未收录的设备ID,从而禁止这些请求进入冷数据集群。

对于热数据集群和ID收录集群,本实施例使用当前比较流行的Redis数据库,Redis是一个基于内存的高性能key-value(键值对)数据库,能够满足我们高吞吐的需求;对于冷数据集群,本实施例使用Pika数据库,Pika是一个基于硬盘存储的key-value(键值对)数据库,它兼容了Redis数据库的协议,所以可以像使用Redis一样去使用它,从而减少了对业务代码的修改。

本实施例中所述将设备ID存入ID收录集群具体为:

ID收录集群根据设备ID做CRC32运算并得到运算结果,将运算结果对1500万进行取模得到键值,将键值标识为1作为hash表的一个数据项进行存储。

对于存储在内存的ID收录集群中的数据,本实施例做进一步的压缩后进行存储。例如,设备ID收录集群只需要存储设备的ID,若只是以设备ID作为key,value标识为1这种比较简单直观的方式来存储,那么存储十几亿个设备ID也会占用不少的内存。

例如,预计最多会存放50亿设备ID,若把这50亿设备ID分散到1500万个哈希表里面,平均每一个哈希表里面存储333个设备ID,并设置Redis当哈希表存储的数据项个数不超过512个的时候,使用Ziplist结构来存储。那么,在存储的时候,将设备ID做CRC32运算,再将运算结果对1500万进行取模,即可得出这个设备ID被分配到哪个哈希表里,具体公式如下:

bucket_id=crc32(md5_device_id)%15000000

最后,以bucket_id作为哈希表的key,md5_device_id作为哈希表的field,并把哈希表的value标识为true(即数字1),就可以完成整个存储过程。当在查询的时候,也可以通过上述公式计算该设备ID映射到的bucket_id,然后从对应的哈希表中尝试获取该设备ID的value,如果返回为true,则表明该数据已经收录,否则,则是未收录。

Redis数据库提供了丰富的数据结构,通过利用其中Ziplist(压缩列表)的特性,本实施例可以对内存做进一步的压缩。当使用Redis的哈希表时,如果当前集合中的数据项不超过设置的阈值512时,Redis会将哈希表底层的存储结构转为更加紧凑的压缩列表——Ziplist,这种存储结构与哈希表相比,它减少了指针等存储空间,从而减少内存的使用。

对于bucket_id来说,它作为哈希表的一个编号,通过上述公式可以计算一个设备ID具体存储到了哪个编号的哈希表,方面快速查询。

本实施例为bucket_id赋予一个更有意义的标识,从而做到更进一步的压缩。因为本实施例的设备ID都是经过MD5加密过的,所以一个设备ID的最终存储形式是一个32位的16进制字符串,例如:202cb962ac59075b964b07152d234b70。所以本实施例把其前6位作为哈希表的key,后26位作为field,并把哈希表的value标识为true来存储。因为MD5后的设备ID是一个16进制的字符串,所以前6位有16^6种组合情况,即16777216种,那么50亿数据就会被分散到这1600多万个哈希表里,平均每个哈希表存储300个设备ID。这种存储方式与之前的相比,key从1位到8位的字符串变成了整齐的6位字符串,field从32位的字符串变成了26位的字符串,更加节省内存空间;程序方面也减少了上述公式的计算量,只需要简单的截取设备ID的前6位即可。

综上所述,本实施例将广告人群数据进行冷热数据区分,将频繁出现在互联网上的设备数据存储在内存的热数据集群中,一段时间不在互联网上出现的设备数据存储在成本较低的硬盘的冷数据集群中,从而充分利用了资源、节约了存储成本。

实施例三:

本实施例提供了一种终端,包括处理器和与处理器连接的存储器,其中,存储器用于存储计算机程序,计算机程序包括程序指令,处理器被配置用于调用程序指令,执行实施例二所述的方法。

应当理解,在本实施例中,所称处理器可以是中央处理单元(Central Processing Unit,CPU),该处理器还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。

该存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。

实施例四:

本实施例提供了一种计算机可读存储介质,计算机存储介质存储有计算机程序,计算机程序包括程序指令,程序指令当被处理器执行时使处理器执行实施例二所述的方法。

计算机可读存储介质可以是前述实施例终端的存储器,例如终端的硬盘或内存。计算机可读存储介质也可以是终端的外部存储设备,例如终端上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,计算机可读存储介质还可以既包括终端的存储器也包括外部存储设备。计算机可读存储介质用于存储计算机程序以及终端所需的其他程序和数据。计算机可读存储介质还可以用于暂时地存储已经输出或者将要输出的数据。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的终端和介质的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1