多情景下的TopK问题

TopK 问题

少量数据,可以全部读入内存

LeetCode原题,两种方法:

  1. 优先队列(堆排序)
  2. QuickSelect

大量数据,无法全部读入内存

50 GB 数据,CPU 2 核,512 MB 内存

使用堆排序,内存中只需要常驻当前TopK,读取数据时只读取一个数据分组,比如 100 MB

50 GB 数据,CPU 2 核,2 GB 内存

  1. 充分利用内存,读取数据时读取多个分组,比如 10 个;
  2. 使用多线程在分组内部使用堆排序读取分组内的 TopK
  3. 在10个TopK内使用QuickSelect得到本轮 TopK
  4. 继续步骤 1

相比前一种方法,由于内存中数据变多,使用多线程查找TopK减少了总体运行时间。

超大量数据,多节点

100 TB 文件,200 节点

将100TB数据均分到 200 个结点上,节点内部使用多线程 + 组内堆排序 + QuickSelect 得到节点中数据的 TopK,然后将 200 个 TopK 全部放到一个节点,在单节点中查找最后的 TopK

原文地址:https://www.cnblogs.com/hezhiqiangTS/p/12658786.html

时间: 2024-08-06 12:27:16

多情景下的TopK问题的相关文章

不同情景下的json转换

一.json对象与json字符串互相转换 1.使用原生javascript语法 json对象=>json字符串 function json2str(o) { var arr = []; var fmt = function(s) { if (typeof s == 'object' && s != null) return json2str(s); return /^(string|number)$/.test(typeof s) ? "\"" + s

SQL注入——知表名不知列明情景下查询数据

场景 有某些情况,可以查找到表名,但查找不到列名. MySQL < 5 或 web过滤 information_scema 详解 select `1` from (select 1,2,3,4,5,6,7,8,9,10,11,12,13 union select * from 表名)a limit 1,1 子查询中select的数目为列数. 通过列数 1,2,3... 再union带出整张表数据.这一步的目的是改变/替换字段名(替换为1,2,3,4...). 再通过select `1`带出第一列

响应式下的雪碧图解决方案

一.概述 在传统的居中布局时,我们常用background-position这个属性来进行雪碧图的定位,在减少数据量的同时,保证准确定位.在移动端使用越来越重的现在,以往的传统定位,已经无法达到目的,那么是否有合适的解决方案呢?答案是有的,让我们先来了解background的两个属性: background-position:背景图片相对容器原点的起始位置.详解可以查看另一篇博客:background-position 详解. background-size: 规定背景图的尺寸: 语法:back

【phpcms-v9】如何实现在含有子栏目的栏目下添加内容?

对于题目的解释: 假设现在有一个一级栏目 为:栏目1 其下有二级栏目  :栏目1=>栏目11,栏目1=>栏目12,栏目1=>栏目13 同时栏目1下有文章列表 : 栏目1-----文章1,栏目1-----文章2,栏目1-----文章3,栏目1-----文章4 本篇博文大部分转自于 http://blog.csdn.net/yanhui_wei/article/details/8007569  首先感谢分享 本人抄写本篇博客的目的是为补充和以后的一些这样改动后的bug 一.phpcms-v9

新时代 DevOps 需求下,我们该如何保障服务的安全?

[编者按]时下,传统安全策略显然已无法支撑 DevOps 环境的敏捷需求.那么,对于一个决策者来说,你又该如何实现 DevOps 速度与安全的兼得?本篇译自 Dzone 的一篇运维文章,题为「Security Breaks DevOps – Here's How to Fix It」,由 OneAPM 工程师编译整理. 现在,通信.协作.抽象.自动化.流程等理念已成为快速 DevOps 操作的基础.同时,在虚拟基础设施和 IaaS(基础设施即服务)的冲击下,手动的配置和管理已然不再可行--它需要

【熊猫TV】《程序员》:聚光灯下的熊猫TV技术架构演进

2015年开始的百播大战,熊猫TV是其中比较特别的一员. 说熊猫TV是含着金钥匙出生的公子哥不为过.还未上线,就频频曝光,科技号,微博稿,站上风口浪尖.内测期间更是有不少淘宝店高价倒卖邀请码,光内测时用户注册数量就达几十万,火爆程度可见一斑.笔者作为写下熊猫TV第二行代码的Coder,见证了熊猫TV成立以来的风风雨雨.直播技术坑不少,本文简单揭秘熊猫TV这一年的技术架构演进,分析各个阶段面临的主要问题和应对方案,给大家做直播系统提供一定的参考. 熊猫架构 0.1- 来不及了,老司机快上车 这个阶

eclipse下搭建Android开发环境:Android6(API 23)+ADT23.07

eclipse下install Android ADT时,在线安装的方式太慢.如果想要Android6.0(API 23)开发环境,那么eclipse需要ADT23.07版本的支持,本地安装的情景下给大家附上离线安装包 链接:http://pan.baidu.com/s/1o6RAyAA 密码:4c7b (内附API 19  ,API 23  ,ADT23.03  ,ADT23.06  ,ADT23.07)

Android下WiFiDisplay功能探究

1 WiFiDisplay简介 1.1WiFiDisplay概述 WiFiDisplay(WFD)是WiFi联盟在已有技术的基础上,为了加速视/音频的传输分享而提出来的一个新概念.WiFi联盟对此成立了一个认证项目:Miracast-- 用来认证一个设备是否支持WiFiDisplay功能. 下图是WiFiDisplay功能的技术支撑体系,实际上最重要的部分就是WiFi Direct:也就是两个设备无需AP(AccessPoint)的情况下直接相连,这就奠定了两个带WiFi功能的设备能够随时传递高

在Swift中应用Grand Central Dispatch(下)

本文由loveltyoic(博客)翻译自raywenderlich,原文:Grand Central Dispatch Tutorial for Swift: Part 1/2 欢迎来到本GCD教程的第二同时也是最终部分! 在第一部分中,你学到了并发,线程以及GCD的工作原理.通过使用dispatch_barrrier和dispatch_sync,你做到了让PhotoManager单例在读写照片时是线程安全的.除此之外,你用到dispatch_after来提示用户,优化了用户体验.还有,使用di