另一个问题则是更新队列的长度。如不雅一向行任何优化,更新队列理论上是无穷长的,甚至会跨越数据集的大年夜小。一个优化办法是我们限制住更新队列的最大年夜长度,一旦长度跨越限制,则履行归并(Merge)操作。Merge操作将队列中的数据进行两两归并,归并后的版本号以较大年夜的版本号为准,归并后的更新数据集是两个数据集的并。Merge后,新的队列长度降低为原更新队列的一半。


MerkleTree同步——数据集比较算法
紧缩的本质是应用共性,在不影响信息量的情况下进行从新编码,以缩减空寄┞芳用。上节中的字节紧缩是单行紧缩,是以只能应用到同一笔记录中的共性,而无法顾及全局共性。举个例子:假设某个用户维度特点所有效户的特点值是完全一样的,字节紧缩逐条紧缩不克不及节俭任何的存储空间,而我们却知道实际上只有一个反复的值袈溱反复竽暌箍现。即就是单笔记录内部,因为紧缩算法窗口大年夜小的限制,长Pattern也很难被顾及到。是以,对全局的特点值做一次字典统计,主动或人工的将频繁Pattern参加到字典并从新编码,可以或许解决短文本字节紧缩的局限性。
2.3 数据同步
基于版本号的同步应用的是类似RedoLog的思惟,将营业更改的汗青记录下来,并经由过程回放未同步的汗青记录获得Diff。因为记录赓续增长的RedoLog须要不小的开销,所以采取了Merge策略来退化原始日记(Log)。对于批量或者微批量的更新来说,基于版本号的同步算法能较好的工作;相反,若数据是及时更新的,将会出现大年夜量的RedoLog,并快速的退化,影响同步的效力。
Merkle Tree同步算法走的昵囗一条路,简单来说就是经由过程每次直接比较两个数据集的差别来获取Diff。起首看一个最简单的算法:每次内存副本将所稀有据的Hash值发送给数据源,数据源比较全部数据集,对于Hash值不合的数据履行同步操作——如许就精确计算出了两个数据集之间的Diff。但显而易见的问题,是每次传输所稀有据的Hash值可能并不比多传几个数据轻松。Merkle Tree同步算法就是应用Merkle Tree数据构造来竽暌古化这一比较过程。
Merkle Tree简单来说是就是把所稀有据集的hash值组织成一棵树,这棵树的叶子节点描述一个(或一组)数据的Hash值。而中心节点的值由其所有儿子的Hash值袈滟次Hash获得,描述了以它为根的子树所包含的数据的┞符体Hash。显然,在不推敲Hash冲突的情况下,如不雅两颗Merkle Tree根节点雷同,代表这是两个完全雷同的数据集。

Merkle Tree同步协定由副本提议,将副本根节点值发送给数据源,若与数据源根节点hash值一致,则没稀有据更改,同步完成。不然数据源将把根结点的所有儿子节点的hash发送给副本,进行递归比较。对于不合的hash值,一向持续获取直到叶子节点,就可以完全肯定已经改变的数据。以二叉树为例,所有的数据同步最多经由LogN次交互完成。

2.3.2 客户端缓存技巧
当数据范围大年夜,无法完全放入到内存中,冷热数据分明,对于数据时效性请求又不高的时刻,平日各类营业都邑采取客户端缓存。客户端缓存的集中实现,是特点办事延长的一部分。通用的缓存协定和应用方法不多说,大年夜在线特点体系的营业角度出发,这里给出几个偏向的思虑和经验。
接口通用化——缓存逻辑与营业分别
实验结不雅图中的毫秒时光为单笔记录的紧缩或解紧缩时光。紧缩比的计算方法为紧缩前字节码长度/紧缩后字节码长度。可以看出,所有紧缩算法的紧缩/解压时光都邑跟着紧缩比的上升而整体呈上升趋势。个中LZ4的Java Unsafe、Java Safe版因为推敲平台兼容性问题,出现了明显的速度异常。
一个特点体系要知足各类营业需求,它的接口肯定是丰富的。大年夜数据含义角度分有效户类、商户类、产品类等等,大年夜数据传输协定分有Thrift、HTTP,大年夜调用方法角度分有同步、异步,大年夜数据组织情势角度分有单值、List、Map以及互相嵌套等等……一个优胜的架构设计应当尽可能将数据处理与营业剥分开,抽象各个接口的通用部分,一次缓存实现,多处接口同时受益复竽暌姑。下面以同步异步接口为例介绍客户端接口通用化。
在数据源更新时,对于每一次数据变更,基于版本号的同步算法会为此次变更分派一个独一的递增版本号,并应用一个更新队列记录所有版本号对应的数据变更。
同步接口只有一步:
- 向办事端提议请求获得结不雅。
异步接口分为两步:
- 向办事端提议请求获得Future实例。
- 向Future实例提议请求,获得数据。
同步和异步接口的数据处理只有次序的差别,只须要梳理好各个步调的履行次序即可。惹人缓存后,数据处理流程对比如下:

不合色彩的处理框表示不合的请求。异步流程须要应用方的两次请求才能获取到数据。像图中“用办事端数据更新缓存”(update cache)、“办事端数据与缓存数据汇总”(merge data)步调在异步流程里是在第二次请求中完成的,差别于同步流程第一次请求就完成所有步调。将数据流程拆分为这些子步调,同步与异步只是这些步调的不合次序的组合。是以读写缓存(search cache、update cache)这两个步调可以抽象出来,与其余逻辑解耦。
推荐阅读
在中国电商成长的汗青中,造节促销一向是巨擘们激烈竞争的┞方场,但聚美优品似乎更愿意选择一条完全不合的路径。在某次全网电商节日开端之前,因为看法不合,聚美优品CEO陈欧和一位核心高管在会议室里起了争执,甚至>>>详细阅读
本文标题:人工智能在线特征系统中的数据存取技术
地址:http://www.17bianji.com/lsqh/36079.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示