云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

亚马逊云_服务器ping_稳定性好

小七 141 0

安全的云存储_阿里云_物联网技术平台

Freshworks及其产品都是基于多租户的方法,因此,了解任何服务的顶级"k"帐户(或任何"项目")对于各种目的都是必要的,无论是用于一般跟踪,甚至是分片。对于实时产品来说,这一点更为重要,因为它们需要一种在流式基础上计算顶级客户的方法,因为吞吐量很高,计算需要快速完成,同时需要占用最少的CPU周期。作为一个为所有其他工程团队构建实时服务的中心团队,大数据分析过程,我们需要一个模型来了解哪些客户是最重要的。因此,我们构建了"流式topkinstrumentation",它可以帮助我们在基于拉的机制上使用服务收集Top'K'帐户的统计信息。对于定义的问题,Redis排序集似乎是一种理想的数据结构。我们可以添加帐户,并增加每个用户的消息得分值。那么前k个账户就是对Redis的一个查询。然而,这意味着在像RTS这样的系统中,Redis也有其他用途。而且,这样一个排序集将有每个帐户的值。按照Freshdesk的运作规模,仅仅为了找到前100个账户而存储10万个账户是没有意义的。我们还需要保持这种工具的低成本,这样就不会增加额外的延迟或需要太多的工作。因此,我们将top'k'问题从Redis的中心问题分解为每个机器节点的本地分布式问题。现在,每个节点都可以计算给定维度(消息、用户等)的前100个帐户,并以周期性的间隔推送到Redis排序集中的前100个项目。取数保持不变。这样我们就可以节省对Redis的网络调用和数据存储。下一步,我们需要一种有效的方法来计算和测量前k项。一个快速的解决办法是把所有的帐户和分数都放在一张地图上,这样就可以快速地使用工具了。但要得到最上面的"k",需要对整个集合进行排序。因此,我们构建了自己的数据结构。数据结构我们构建的数据结构将使我们能够快速更新分数并获取最前面的"k"项。顶部的"k"数据结构内部包含三个简单的数据结构-"map"、"min heap"和"max heap"。这张地图能让我们很快找到那件物品。该项可能属于最小堆(前100个-如果大量使用)或最大堆。堆中的每个节点都存储一个指向一个项的指针,软件企业的认定,物联网教室,该项的结构如下所示:类型项结构{名称字符串积分积分班级}映射存储项地址到其名称的映射,而堆存储项的地址。最小堆将包含所需的前"k"个帐户,因此最小堆的大小始终等于"k"。取前"k"项的值总是O(1)。对结构的插入和更新将是k log(k)或n log(n),哪个云服务器好,这取决于它们是在min heap(重命中)还是在max heap中。最小堆中的项未按排序顺序排列,因此不必按排序顺序排列。基准我们用一个简单的基于地图的模型对top-k数据结构进行了基准测试,发现虽然这两个模型中的插入时间是可比较的,但检索速度要快得多。过程每当发生新操作时,系统将检查映射中是否存在该项。如果它不存在,我们添加它。之后,我们根据根节点将其移动到最小堆或最大堆。所有这些都是在每台服务器上独立进行的,这使得处理速度更快。当一个项成为max堆的根时,它的分数将被更新。我们将它与min heap的根的分数进行比较。如果它大大超过最大堆,我们交换最小堆的根项和最大堆的根项。定期从最小堆收集数据(因为最上面的项目总是在最小堆中),并推送到Redis。将丢弃最大堆数据,并启动具有干净数据结构的新循环。从所有服务器推送的最小堆数据在Redis中以一个排序集的形式累积在一个特定的键中。由于数据本质上是统计的,我们只捕获给定时期的顶部k。另外,当负载很重时,仪器将丢弃数据。请看流程图以获得详细说明。当你读这篇文章的时候你在想一个用例吗?如果是,是什么?另外,5118大数据,你有没有其他的方法来达到同样的结果,或者有任何进一步改进这个过程的建议?相关岗位我们如何在Freshworks创建数据湖-第二部分智能重复数据消除指南