数据存储系统及其方法和数据分析系统及其方法_2

文档序号:9929574阅读:来源:国知局
发生注册或登录行为时,将 注册前的匿名id与真实id关联,发送一条数据记录(例如化ack_si即up记录,运里化ack_ signup表示运个记录既与事件有关也与用户属性有关)给数据采集系统230;在获知了用户 的属性(比如年龄或性别)时,发送一条用户属性有关的数据记录(例如profile记录,运里 prof i 1 e记录表示运个记录与用户属性有关)给数据采集系统230。
[0054] JS(Javascript)语言的SDK主要用来获得Web前端的用户行为的数据。例如,当用 户打开页面加载完成后触发一条事件有关的track请求,该请求内容包括页面U化等;当用 户点击广告的时候触发另一条事件有关的track请求,内容包括页面URL、广告id、展示位置 等;当用户的鼠标放到页面某个元素上时开始计时,鼠标离开的时候触发又一条事件有关 的track请求,内容包括悬停的元素的id,鼠标悬停时间等等。在track请求被触发后,该 track请求会携带请求内容被传送至数据采集系统230,在数据采集系统230形成一条track T^Elt 5? O
[0055] Android/iOS的SDK主要用来获得移动端的用户行为的数据。例如,当移动端用户 打开应用A卵时发送一条化ack记录至数据采集系统230;当用户使用某些功能时触发一条 track记录并传送至数据采集系统230等等。本发明的数据采集系统230可W通过上述任何 一种或者多种方式采集数据,但本发明并不限定采用上述几种方式,也可W采用除上述方 式之外的其它方式采集数据。
[0056] 在数据被采集前可W事先根据被采集的数据的特色及使用者的需求而将数据划 分成不同的类别(type),例如,划分成事件(event)和用户化ser)两个类别。对于被采集的 数据记录,其中都会包含表明类别的数据,例如,用"type"类型字段来表明数据类别,而对 于事件化vent)类别的数据,"type"字段的取值设置为"track",而对于用户类别的数据,贝U "type"字段的取值可W "profiled'开头,表示是用户概况(Profile),通常包括一个或多个 用户属性,例如年龄、性别、喜好等等,例如prof ile_set表示直接设置一个用户概况 profile。至于如何表明数据类别,并不限定上面例子所述的表示方式,可W根据需要和喜 好进行设定。需要说明的是,运里是W数据类别包含事件和用户两大类别为例进行说明,实 际不限于两大类别,可W包含更多的类别或者只包含一个类别。另外,关于两大类别的划分 也不限于按照事件和用户进行划分。
[0057] 为了进一步地对数据进行更精细地统计分析,对所划分的每个类别可W再进一步 地划分出多个子类别,例如,对于事件(event)类别,可W根据事件本身的性质划分为不同 的具体事件(即子类别),例如对于电商平台,可W包含:访问首页、捜索商品、浏览商品、用 户注册、提交订单等多个具体事件,通过具体事件的划分可W将事件有关的数据进一步细 分。对于所采集的有关事件的数据记录中,都会包含表明事件子类别的数据,例如可W用字 段"event"后面的名称表明当前的具体事件;对于用户类别的数据,每个新的用户即为一个 子类别,例如可W通过为每个用户创建的ID来表明,例如在用户未注册前,为其分配一个 匿名ID,在注册后为其分配一个真实ID,而且可W将同一用户的匿名ID与真实ID关联起来。 用户类别的数据可能会体现在事件中,也有可能不体现在事件中。
[005引另外,对于每一具体事件可W具有不同的属性(propedy),通过属性的划分又可 W将每个具体事件进一步细分,从而实现对数据的更为精细的划分。例如对于"浏览商品" 运一事件可W包括商品名称、商品类别、店铺名称等多种属性。例如,其在数据记录中可W 用"propedies"属性字段表明。而对于每一属性还可W进一步细分成预置属性和自定义属 性。例如,对于预置属性,在其属性名字段前放置T'表明该属性为预置属性。而在属性名字 段前没有放置T'表明该属性为自定义属性。
[0059] 虽然被采集的数据可能具有上述一种或者多种特征,但数据采集系统230在采集 到数据后,并不对数据特征进行解析,但也会对数据做一些处理,供后续装置(例如数据传 输装置240)使用,运些都是本领域技术人员所熟知的,例如通过Nginx对所述采集到的数据 进行解压缩和协议解析,写入本地的Nginx日志文件中等等。
[0060] 可选地,数据采集系统230还可W有其它的实现方式,例如,对于前面第一种数据 采集方式,数据采集系统230可W包括在客户端或服务器中实现的部分功能,即,将一段时 间的数据按照规定的数据格式写在一个文件中并上传;对于第二种数据采集方式,数据采 集系统230可W包括LogAgentW及存储数据的文件;对于第S种数据采集方式,数据采集系 统230可W包括设置于客户端或服务器侧的SDK。本发明并不限定数据采集系统230的实现 方式,只要能够实现本发明的数据采集功能的数据采集系统230都可W用于本发明。
[0061] 下面给出一个基于化Va SDK撰写的电商客户的"浏览商品"事件的数据接入代码:
[0062]
[0063] 通过上述代码,采集如下数据:用户使用设备的操作系统、操作系统的具体版本、 用户所在省份、城市、商品名称、商品类别、店铺名称,并且通过"track"表明运组数据是关 于一个事件的数据。
[0064] 上述代码只是一个例子,实际中,可W根据用户的需要通过put语句设置任何字段 W采集想要的数据。
[0065] 而且,由于本发明数据采集系统230可W采集用户服务端和业务数据库的数据,而 不是前端JS/APP SDK记录的数据因此,采集的数据相比于百度统计工具、友盟数据统计工 具更加全面、可靠。另外,由于本发明的数据分析系统可W完全安装在用户侧,而不是用于 分析用户数据的第=方平台,因此,用户可W安全地将自己的核屯、数据接入本发明的数据 采集系统230,运样,一方面解决了用户数据安全问题,另一方面保障采集的数据更全面、更 真实。
[0066] 数据传输系统240适于对数据采集系统230所采集到的数据进行提取、转换并传 输。例如数据传输系统240监控Nginx日志文件(针对前面数据采集系统230中提及的一个例 子),对其进行解析并格式化,例如格式化成JSO州各式,然后对其进行协议封装,例如按照 Kaf ka协议进行封装,然后传输给数据存储系统100。
[0067] 数据存储系统100如前所述,适于对从数据传输系统240接收的数据进行解析、存 储,后面将进一步详细说明。
[0068] 数据展现系统260主要适于基于使用者输入的查询条件和显示参数,获取对应的 数据分析结果并在W邸前端进行显示。运里,所述查询条件与所述数据存储系统中存储的数 据种类相对应,例如,在数据存储系统100中存储有关于"买入黄金"事件的数据(例如买入 黄金的重量、次数累积、买黄金的人的年龄等等),那么在显示系统中就会存在关于与"买入 黄金"对应的查询条件,例如"买入黄金"的总次数、总重量、不同年龄的人"买入黄金"的总 次数等等查询条件。
[0069] 所述数据展现系统260可W包括显示装置和查询装置等,其中所述显示装置适于 接收使用者输入查询条件和显示参数。所述查询装置适于根据所述所述查询条件和显示参 数从数据存储系统100中获取查询结果,然后由所述显示装置将数据结果显示给所述使用 者。运些可W通过现有技术来实现(运里将不具体说明),也可W通过本发明后面所述的实 施方式来实现,具体见后关于数据展现系统260的描述。另外,可选地,所述查询装置也可W 通过本发明后面描述的所述数据查询装置900来实现。另外,在上述描述中,使用者输入查 询条件和显示参数的方式可W有多种方式,可W是直接输入关键词,也可W是从预定的选 择菜单中的选项中选定的。
[0070] 下面W数据分析为例详细说明本发明的数据存储系统100。
[0071] 如前面所述,数据获取模块110获取的数据并不是直接从客户端或者服务器侧采 集到的数据,而是被采集到的数据经过提取、转换等处理后的需要存储的数据。另外,数据 会不断地被采集,因此,会不断地有需要存储的数据产生。
[0072] 例如,数据获取模块110获取电商平台关于"浏览商品"运一事件的数据如下(其W JSON格式给出):
[0073]
[0074]
[0075] 在上面的数据中,表明数据类别的字段"type"的取值为"track",所W该组数据记 录的类别是事件化vent)类别。表明具体事件的字段"event"的取值"ViewProduct",所W该 组数据记录的具体事件为"浏览商品"。另外,其中还包含了很多属性方面的数据,分别列在 字段"prope;rties"下面,即,
[0076] Smanirfacture:用户所使用设备的制造商;
[0077] Smodel:用户所使用设备的具体型号;
[0078] $os :用户所使用设备的操作系统;
[0079] $os_version:用户所使用设备的操作系统版本;
[0080] $app_version:用户所使用的APP的版本;
[0081 ] $wif i :运条事件发生时,用户是否在使用Wif i ;
[0082] $ip:用户使用设备的IP;
[0083] $p;rovince、$city:省、市;
[0084] $screen_wi 化h、$screen_hei 曲t:屏幕的宽和高;
[0085] product_id、product_name、product_classify、product_price:里艮商品相关的-- 些具体属性。
[0086] 其中,^$开头的各个属性都为预置属性,不^$开头的各个属性product_id、 product_name、product_classify、product_price 都是自定义属性。
[0087] 上述是W事件为例进行说明的,对于用户类别,同样地,也可W包括预置属性和自 定义属性。
[0088] 另外,在上述JSON数据中还可W包含有其它一些相关信息,例如,
[0089] distinct_id:类型是字符串,表明对用户的标识,对未登录用户,可W填充设备标 识,COOkieID等,对于登录用户,则应该填充注册帐号;运里的例子,我们假设是一个未注册 用户,所W填充的是一个设备编号;通过运个属性可W将事件类别的数据与用户类别的数 据联系起来。
[0090] time:类型是数字,表明事件发生的实际时间戳,精确到毫秒。
[0091] 虽然数据获取装置110所接收到的需要存储的数据有上述多种划分,但数据获取 装置110并不进行解析,只是将运些数据接收过来并进行一些简单的处理。之后,数据解析 装置120对数据获取装置110所接收到的需要存储的数据进行解析,解析出类别、子类别、属 性等具体数据。
[0092] 可选地,数据解析装置120,如图3所示,可W包括:第一解析模块123、第一注册模 块121、W及第二注册模块122。
[0093] 例如对于上面所获得的关于"浏览商品"运一事件的数据,数据解析装置120对其 解析的过程如下:
[0094] 第一解析模块123对数据的特征进行如下的解析:
[0095] 第一,解析出数据的类别。例如,在数据分析中,根据数据获取装置110所获取的 JSON数据中的类别(即"type")字段的取值,判断运组数据是事件event数据还是用户数据。 如上所述,当类别字段的取值为track时表示是事件类别,当Wprofile_开头时表示是用户 类别。
[0096] 第二,第一解析模块123解析各子类别。例如,对于数据分析,在解析出数据类别之 后,解析其所包含的事件event或用户的具体名称。当数据类别为事件类别时,通过其后的 字段"event"解析出具体事件的名称。当数据类别为用户类别时,通过用户的标识 distinct_id解析出不同的用户。
[0097] 对于每一子类别都会被分配有一个唯一的子类别标识符ID,W方便对其进行记 录、查询、和存储等。所有的子类别名称及对应的子类别标识符ID都会被存储在缓存器125 (例如化che)中,也会在元数据记录模块130记录的元数据信息。
[0098] 第一解析模块123在解析出各个子类别名称之后,会在缓存器中查找该子类别名 称,如果能查到该子类别名称具有相应的子类别标识号ID,那么表明该子类别曾经出现过, 已经为其分配了子类别标识号ID;如果未查到该子类别名称具有相应的子类别标识号ID, 那么表明该子类别是新的子类别,需要由第一注册模块121为其分配一个子类别标识号ID。 在本发明中,每一个新的事件子类别都需要第一注册模块121为其分配一个新的子类别标 识号ID,而对于用户子类别,可W由系统为每个用户自动设置的设备编号(例如前面的 distinct_id)或者用户的登录号作为子类别标识号,则不需要由第一注册模块121再专口 为其分配一个子类别标识号。
[0099] 第一注册模块121适于对所述需要存储的数据包含的新的子类别进行注册,为其 分配子类别标识号ID。在为所述新的子类别分配了子类别标识号ID之后,会将该子类别名 称及其对应的子类别标识号ID在元数据记录装置130中记录相应的元数据信息,另外,也可 W同时存储在缓存器125中。
[0100] 例如,对于上述"浏览商品"事件的JSON数据而言,第一解析模块123解析"event" 字段,获得事件名称"浏览商品",然后在缓存器125中通过事件名称查询该"浏览商品"事件 的ID号,如果查到,则接下来解析该"浏览商品"事件的属性。如果没有查到,则由第一注册 模块122为其分配一个ID号,然后将该"浏览商品"事件名称及ID号存储到缓存器125中,并 在元数据记录装置130中记录该"浏览商品"事件的元数据信息,该元数据信息包括"浏览商 品"事件名称及ID号,例如,记录在元数据记录装置130的事件描述元数据表(即event, define表,在后面关于元数据信息的的描述中有具体例子)中。
[0101] 上述例子设及的是具体事件,对于具体用户,用户标识符User_ID(和/或 distinct_id)如前所述会出系统自动生成,而对于每个用户概况(profile)(即"type"字段 中W "p;rofile_"开头的数据记录,其中包含一个或多个用户属性properities)与所述具体 事件一样,都会被分配一个标识符ID,例如,对于新的用户概况,采用与所述具体事件同样 的方式,为其新分配一个EvenLprof ile_ID (可W将具体用户概况(profile)看作一种特殊 的具体事件Event),并在元数据记录模块130中记录相应的元数据信息,例如记录在元数据 记录模块130中属性描述元数据表(即p;rope;rty_def ine表)中。例如,"type"字段中W "profiled'开头的数据记录可W包括"prof ile_set"(用于直接设置一个用户概况)、 "prof i 1 e_increment"(用于增加或减少一个用户的某个数字类型的用户概况Prof i 1 e,例 如用户年龄等)、"pr〇file_delete"(用于删除一个用户的整个概况Profile)、"p;rofile_ append"(用于向某个用户的某个数组类型的用户属性添加一个或者多个值,例如向用户 喜好运一用户属性中添加"枯子"、"抽子"等值)等等,它们都会被分别分配一个Event_ profile_ID。
[0102] 对于已有的具体事件和已有的具体用户,已经具有其Event_ID、Event_p;rofile_ ID、和Use;r_ID(或distinct_id),而且在元数据记录模块130中的event_def ine表和 propedy_define表中已经分别记录了已有具体事件和事件名称及对应的ID、已有具体用 户的用户名称与对应的ID。
[0103] 第=,第一解析模块123解析子类别的属性,所述属性如上所述可W包括预置属性 和自定义属性。
[0104] 具体地,第一解析模块123解析所述子类别包含的一个或多个属性的属性类别、属 性名、W及属性值的数据类型。
[0105] 首先,第一解析模块123判断所述属性是否是预置属性,如果是预置属性且不是用 户概况中的属性,另外,在缓存器125(例如cache)或元数据记录装置130中(例如属性描述 元数据表(pr〇pedy_define)中,后面将具体说明)查询到已经事先记录的与该预置属性对 应的元数据信息(通常如果设置缓存器125,则先查缓存器125,再查元数据记录装置130;如 果不设置缓存器125,则直接查元数据记录装置130),则返回该预置属性已有。如果判断是 预置属性但在元数据记录装置130却没有其对应的元数据信息,则视为该数据异常。
[0106] 例如,在上述的"浏览商品"事件的数据中,通过判断每个属性的属性名字段前是 否具有符号1",其event_id是否为-U例如将所有的预置属性的event_id都统一设置为-1,运样在元数据记录装置130中记载的元数据表中可容易识别预置属性),即可确定是否是 预置属性。例如下表给出预置属性的元数据表的一个例子:
[0107]
[0108] 上表中,记录了事件标识号event_id,属性英文名化me、属性中文名Cname、在 ¥61'1:;[。日数据库中存储的列名分别为¥61'1:;[。日_]1日1116和¥61'1:;[。日_]1日1116_的山1]1(1日]1。7,数据类型 Data_type、Is_value_mapping表明存储的是否是映射了的数值。由于上表中各数据都是存 储的映射值,所WVedica_name_redundancy是空值,具体原因在后面有详细解释说明。不 同的数据类型用不同的数字1-6中之一表示。从上表中的Event_id的取值为-1和Name中前 面带$字符可知,上述各数据都是预置属性。
[0109] 在属性不包含预置属性而只包含自定义属性的情形下,则省去上述第一解析模块 123对预置属性的解析过程。
[0110] 如果第一解析模块123判断所述属性是自定义属性,首先,判断该自定义属性是否 已经存储过,即,判断是已有的自定义属性还是新的自定义属性。例如,可W从缓存器125中 查找该自定义属性的属性名称及所属子类别的标识号ID,如果存在,则表明是已有的自定 义属性,否则为新的自定义属性。对于新的自定义属性,需要由第二注册模块122对其进行 注册。
[0111] 对于已有的自定义属性,其在元数据记录装置130中记录有包含其在数据存储装 置140中的存储位置和存储的数据类型的元数据信息(例如在元数据表P;rope;rty_define表 中)。运时,第一解析模块123只需
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1