负载均衡案例:如何只用2GB内存统计20亿个整数中出现次数最多的整数

基于python实现。

如果是常规的小型文件,我们可以迅速地想到要建立字典。
以数字为key,以数字的出现次数为value,建立<int,int>类型的键值对存入字典,然后使用 max 函数结合字典的 items 方法来找到一个字典中 value 最大的 key即可。

在计算机底层中,<int, int>类型的键值对所占的大小为8个字节,20亿个整数极端情况下如果产生了20亿个键值对那么仅仅是存储就需要16GB的内存,更别论python中数据类型还封装了更多属性和方法,以及后续操作、计算机的其他程序操作也同样需要资源了。

基于抽象和拆分的编程思想,我们可以进行将操作步骤进行如下划分:

1、创建合理数量的小文件。

2、将20亿个数据分配进入小文件中,需要注意:相同的整数要在同一个文件中,并且文件大小尽量均匀。

3、计算每个文件中出现次数最多的整数,最后对比得出结果。

在一步步进行具体操作之前,我们先模拟创建出有20亿个整数(约16GB)的文件,并且存入硬盘。

其次,我们需要确认创建多少个小文件。

20亿的数据极端情况下至少需要16GB的内存,如果平均拆成10个小文件,每个小文件约有2亿数据,键值对存储约需要1.6GB内存,正好满足不高于2GB的内存要求。为了保险可以多拆几个文件。如果凭借经验知道这20亿个数据中有较为不均匀的数据分布,也可根据经验进行数量拓展。因为我产生的数据比较了解,因此我就选择拆出10个小文件。

接着,我们需要将20亿个数据分入10个文件中,并且相同的整数要在同一个文件。

这里介绍一下哈希算法,哈希算法的具体定义可以上网查询。简单来说可以把哈希算法比作一个编号工具,我们给哈希算法一个数据,无论是什么类型的皆可,它经过一系列复杂的数学运算,就会给这个数据一个编号,这个编号是一般是一个长长的整数,通常情况下编号会和数据对应,如果是相同的数据那么得到的编号是完全一致的。如果我们给这个哈希算法喂了大量的数据,那么它就会吐出很多对应的编号,这些编号具有强随机分布的特征,也就是在哈希值的范围内分布很均匀。

我们把20亿个数据通通喂入哈希算法,再把这些编号对10取余进行散列,20亿个数据就被分入了10个文件中,以此可以完成把相同的数据分入同一个文件。说起来抽象其实写起来很简单,各位看看代码就明白了。

有些同学可能就问了,为什么要先哈希再取余呢?直接取余不行吗?用哈希算法是为了解决2方面的问题,一方面是我们实务中接触的数据有可能不是整数,另一方面是如果直接取余然后分配可能会导致文件之间大小不均衡,而哈希函数产生的编号分布是十分均匀的,取余之后,余数的分布也会很均匀,因此根据余数把整数分配进入文件的数据也会很均匀。

最后计算每个文件中出现次数最多的整数,再进行对比就可以得到结果了。根据上述的哈希算法的特征,每个文件的不同的整数不会超过2个亿,因此我们的内存是够用的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/293825.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023 波卡年度报告选读:Polkadot SDK 与开发者社区

原文&#xff1a;https://dashboards.data.paritytech.io/reports/2023/index.html#section6 编译&#xff1a;OneBlock 编者注&#xff1a;Parity 数据团队发布的 2023 年 Polkadot 年度数据报告&#xff0c;对推动生态系统的关键数据进行了深入分析。报告全文较长&#xff…

一键减低PNG像素,轻松优化图片质量!

在数字时代&#xff0c;我们每天都要处理大量的图片文件&#xff0c;从网站设计、广告素材到社交媒体图片等。PNG作为一种常用的无损压缩格式&#xff0c;在保证图片质量的同时&#xff0c;也占用了较大的存储空间。为了优化存储空间和提高加载速度&#xff0c;我们需要对PNG图…

数据结构学习笔记——查找算法中的树形查找(B树、B+树)

目录 前言一、B树&#xff08;一&#xff09;B树的概念&#xff08;二&#xff09;B树的性质&#xff08;三&#xff09;B树的高度&#xff08;四&#xff09;B树的查找&#xff08;五&#xff09;B树的插入&#xff08;六&#xff09;B树的删除 二、B树&#xff08;一&#xf…

科技助力教育:数字化如何改变家校社协同育人?

近年来,随着社会的快速发展,教育的责任已不再仅局限于学校。家庭、学校和社会协同育人理念,正成为促进教育高质量发展的关键要素。 2023年初,教育部等十三部门联合印发《关于健全学校家庭社会协同育人机制的意见》,提出到“十四五”时期末,形成更加完善的由“学校积极主导、家…

Excel如何将单元格设为文本

文章目录 一、打开excel文件二、选中单元格三、右键设置单元格格式四、设置界面选择文本后点确定五、其他问题 在caa开发过程中遇到从CATUnicodeString转成CString时&#xff0c;通过SetItemText写入将ID号写入单元格&#xff0c;无法保存ID号中的数字0&#xff0c;故将单元格格…

统信UOS_麒麟KYLINOS修改图标显示名称

原文链接&#xff1a;统信UOS/麒麟KYLINOS修改图标显示名称 hello&#xff0c;大家好啊&#xff01;今天我要给大家介绍的是在统信UOS及麒麟KYLINOS操作系统上如何修改软件的名称。这种自定义可以帮助您更快地识别和访问常用的应用程序&#xff0c;也可以使您的桌面环境更加个性…

【MATLAB】CEEMD_LSTM神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 CEEMD-LSTM神经网络时序预测算法是一种结合了完全扩展经验模态分解&#xff08;CEEMD&#xff09;和长短期记忆神经网络&#xff08;LSTM&#xff09;的时间序列预测方法。 CEEMD是一种改…

基于MyCat2.0实现MySQL分库分表方案

目录 一、MyCat概述 二、MyCat作用 2.1 数据分片 2.1.1 垂直拆分 2.1.1.1 垂直分库 2.1.1.2 垂直分表 2.1.1.3 总结 2.1.2 水平拆分 2.1.2.1 水平分库 2.1.2.2 水平分表 2.1.2.3 总结 2.2 读写分离 2.3 多数据源整合 三、MyCat 与ShardingJDBC的区别 3.1 MyCat …

易基因:ChIP-seq等揭示Runx2通过转录调控Itgav表达激活肝星状细胞以促进肝纤维化|科研进展

这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 肌成纤维细胞&#xff08;myofibroblasts&#xff09;主要由肝脏中活化的肝星状细胞(hepatic stellate cells HSC)组成&#xff0c;在肝纤维化进展中发挥着核心作用。由于肌成纤维细胞主要负责细胞外基质蛋…

代码随想录刷题第三十六天| 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间

代码随想录刷题第三十六天 无重叠区间 (LC 435) 题目思路&#xff1a; 代码实现&#xff1a; class Solution:def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:intervals.sort(keylambda x: (x[0],x[1]))count 0right intervals[0][1]for i in ra…

拼题A 跨年挑战赛 2024 赛后提交入口 + 题目 + 题解

赛后也想提交&#xff1f;点击进入 拼题A教育超市 周三&#xff0c;搞学长&#xff1a;“小柳进前十了&#xff01;想要奖品过来拿&#xff01;” 等了好几天的比赛结果终于出来了&#xff0c;四年来的跨年挑战赛第一次做满分&#xff0c;第一次进前十&#xff01;&#xff0…

MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发

前言 公司要求没办法&#xff0c;前端也要了解一下后端知识&#xff0c;这里记录一下自己的学习 学习教程&#xff1a;黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 文档&#xff1a; https://mybatis.net.cn/index.html Mapper代理开发 目的 解决…

【nginx】linux(centos版本)安装nginx

目录 一、下载安装包1.1 官网下载1.2 linux命令下载 二、安装2.1 安装依赖包2.2 安装nginx 三、启动四、访问五、关停六、重载配置 一、下载安装包 1.1 官网下载 1.官网地址 https://nginx.org/en/download.html2.版本说明 1.Mainline version-主线版本 2.Stable version-稳…

剪映业务的大前端实践:创新以用户需求为导向

近日&#xff0c;由51CTO主办的WOT全球技术创新大会2023深圳站成功举办&#xff0c;众多企业CTO、技术团队负责人在会场分享了优秀的技术实践。其中&#xff0c;剪映前端开发工程师赵培霏分享了主题为《剪映业务的大前端实践》的演讲。 近日&#xff0c;由51CTO主办的WOT全球技…

如何给6000微信好友打好标签? 快速操作技巧!

微信好友一多&#xff0c;管理起来就变得麻烦。要管理好好友&#xff0c;就必须要给好友打好标签。今天分享一个快速给微信好友打标签的方法。 一、微信电脑端给好友打标签的操作方法&#xff1a; 桌面端打标签速度是很快的&#xff0c;不仅仅是好操作&#xff0c;而且搜索功能…

Spark调优解析-GC调优3(七)

1 GC调优 Spark立足内存计算&#xff0c;常常需要在内存中存放大量数据&#xff0c;因此也更依赖JVM的垃圾回收机制。与此同时&#xff0c;它也兼容批处理和流式处理&#xff0c;对于程序吞吐量和延迟都有较高要求&#xff0c;因此GC参数的调优在Spark应用实践中显得尤为重要。…

2023 IoTDB Summit:清华大学软件学院长聘副教授龙明盛《IoTDB 新组件:内生机器学习》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

Starknet 开发实战训练营邀你挑战,1000 美元大奖等你赢取!

Starknet 免费公开课来啦&#xff01;&#x1f680; ZK L2 明星项目 Starknet 不久前透露其 STRK 空投计划引发了诸多关注&#xff0c;而全链游戏同样是今年 Web3 行业的热门领域之一&#xff0c;Starknet 便是全链游戏领域中的重要生态&#xff0c;开发者借助其链上游戏引擎 D…

【驱动序列】C#获取电脑硬件基本组合以及基础信息

大家好&#xff0c;我是全栈小5&#xff0c;欢迎阅读《小5讲堂之知识点实践序列》文章。 这是2024年第7篇文章&#xff0c;此篇文章是C#知识点实践序列文章&#xff0c;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 要开发一款驱动小助手&…

Linux内存管理:(六)页交换算法

文章说明&#xff1a; Linux内核版本&#xff1a;5.0 架构&#xff1a;ARM64 参考资料及图片来源&#xff1a;《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址&#xff1a; zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 引言 在Linux操作系统中&#x…