如何在会话存储中构建智能:数据结构
来源:CPDA数据分析师网 / 作者:数据君 / 时间:2020-09-03
过滤器可能是著名的概率数据结构
过滤器用于测试的存在,可以看出该项目已可能被添加到之前或不会被添加到过滤器前面,换句话说,假阳性是可能的,但是假阴性是不可能的,作为接受误报的交换,您可以节省大量的存储空间:每件物品需要少量的位,无论过滤器中物品的大小或数量如何,新增项目,检查以前是否已将项目添加到过滤器。
过滤器的简单实现可以“填满”,即,随着添加的项目越多,错误率就越高
实现是可伸缩的:您指定错误率,并且如果您尝试添加会导致错误率大于指定错误率的项目,当您检查项目的存在时,它将随后检查所有内部的过滤器,这种权衡的确会导致对已多次缩放的过滤器进行更大量的存在检查操作,但实际上会产生一致的错误率,幸运的是您可以指定初始大小来满足您的项目基数要求,从而减少不必要的缩放。
一种可以概率确定项的基数的结构
每个项目只需要几位,并且项目的大小与结构的大小无关,项的基数是一个估计值,作为所需大小和错误率的示例,位计数不是独立的结构,而是使用数据结构的替代方法。可以按索引以预分配值的O(1)复杂度将字符串值作为位数组操作。这种技术有很多用途,但是我们可以直接使用它来创建类似时间序列的结构。
内容显示
电子商务或新闻网站等内容丰富的平台,一个共同的目标是通过向用户显示新的(和个性化的)内容来保持用户的参与,这将带来挑战,因为它将涉及存储用户与之交互的每个内容,然后找出与列表的区别,如果将用户读取的内容插入该站点的主数据库中,则将很快变成扩展问题,因为对于大多数数据库而言,写入是一项昂贵的操作是一个明显的例外,然后,您将需要执行另一项昂贵的操作来查找内容列表和已查看内容列表之间的差异,我们可以使用会话存储过滤器来做得更好。
用户每次查看内容时,我们都可以将其添加到该用户会话存储区中的过滤器中
其次,当我们要显示新内容时,我们可以获取内容片段的列表,然后检查过滤器中这些片段的存在。检查过滤器中的存在是O(log n)操作,其中n是必须缩放过滤器的次数(n可能很小,因此我们可以检查多个项目的存在而不必担心性能过多)。由于布隆过滤器不能返回假阴性,我们知道肯定地说,那是内容不是在布隆过滤器是该特定用户的“新鲜”。
模式的有趣之处在于它可以很容易地扩展
内容列表不会经常更改,并且可以轻松地从主数据库进行缓存。每个用户都有自己的筛选器,并且存储需求适中,这意味着需求与用户群的大小而不是内容的数量或交互的数量更多相关。,在像集群这样的分片环境中,数据和负载可以轻松地在多个分片之间共享,因为它是由每个用户的单个小键组成的。
活动模式监控和个性化
当今,吸引人和活跃的Web体验由用户有意识地和无意识地提供给网站的数据提供动力,我们可以利用我们的微服务来收集用户的行为数据,然后处理和利用这些数据为用户创建定制的体验,首先,通常认为这一过程难以完成。分析数据通常是在另一个服务,数据是匿名的,这种类型的数据的自我收集通常是不可行的,因为直接在基于磁盘的数据库中记录所有数据时,很难满足写入和存储要求。
将此类数据的决策推迟到复杂且昂贵的图形或基于ML的解决方案上
尽管这些解决方案通常会产生有趣的结果,但数据是推断性的,并被锁定在黑匣子中,很难与其他见解结合使用,例如您可能有市场研究证明了一些具体的相关性,但是如果您基于ML的模型没有为输出提供与市场研究一致的特定数据,那么您将无法充分利用您的数据,为了完成这种监视,我们需要利用许多结构,使用微服务,我们拥有的信息量有限,但是足以获得重要的见解。