极客视点
极客时间编辑部
极客时间编辑部
113241 人已学习
免费领取
课程目录
已完结/共 3766 讲
2020年09月 (90讲)
时长 05:33
2020年08月 (93讲)
2020年07月 (93讲)
时长 05:51
2020年06月 (90讲)
2020年05月 (93讲)
2020年04月 (90讲)
2020年03月 (92讲)
时长 04:14
2020年02月 (87讲)
2020年01月 (91讲)
时长 00:00
2019年12月 (93讲)
2019年11月 (89讲)
2019年10月 (92讲)
2019年09月 (90讲)
时长 00:00
2019年08月 (91讲)
2019年07月 (92讲)
时长 03:45
2019年06月 (90讲)
2019年05月 (99讲)
2019年04月 (114讲)
2019年03月 (122讲)
2019年02月 (102讲)
2019年01月 (104讲)
2018年12月 (98讲)
2018年11月 (105讲)
时长 01:23
2018年10月 (123讲)
时长 02:06
2018年09月 (119讲)
2018年08月 (123讲)
2018年07月 (124讲)
2018年06月 (119讲)
时长 02:11
2018年05月 (124讲)
时长 03:16
2018年04月 (120讲)
2018年03月 (124讲)
2018年02月 (112讲)
2018年01月 (124讲)
时长 02:30
时长 02:34
2017年12月 (124讲)
时长 03:09
2017年11月 (120讲)
2017年10月 (86讲)
时长 03:18
时长 03:31
时长 04:25
极客视点
15
15
1.0x
00:00/03:41
登录|注册

当小内存遇上大量数据时该怎么办?

讲述:初明明大小:3.36M时长:03:41
假如你写了一个处理数据的软件,它可以在小样本文件上运行地很好,但一旦加载大量真实数据后,这个软件就会崩溃,你该怎么办?
近日,InfoQ 编译了 Python 顾问伊塔玛·特纳(Itamar Turner-Trauring)的文章,他认为可以通过压缩、分块、索引这三种方式减少电脑内存使用。以下是原文内容。

为什么需要 RAM?

在解决问题之前,我们需要先弄清楚问题是如何产生的:为什么需要计算机内存 RAM?
众所周知,RAM(计算机内存)能让你读写数据,硬盘也可以读写数据,而且还比 RAM 更便宜。既然有硬盘了,为什么还需要 RAM 呢?可以不可以直接从硬盘读写数据呢?理论上讲,答案是可以的。但是,即便是最现代化且速度很快的 SSD 硬盘也比 RAM 慢太多:
从 SSD 上读取数据大约需要 1.6 万纳秒
从 RAM 上读取数据大约需要 100 纳秒
也就是说,如果你想要实现快速计算,数据就只能放在 RAM 中,否则你的代码运行时就会慢上 150 倍。

减少内存使用的三个技巧

当你没有足够的 RAM 时,最简单省时的解决方案就是花钱,要么购买一台计算机,要么租一台云端的虚拟机。但这个方案价格昂贵,甚至有些时候会入不敷出,这时你就需要考虑如何通过修改软件来减少内存使用了。具体有以下三个技巧。

1. 压缩

包括无损压缩和有损压缩两种方式。其中,无损压缩存储的数据包含的信息,和原始数据包含的信息完全相同。有损压缩存储的数据丢失了一些原始数据里的细节信息,但是这种信息丢失理想情况下不会对计算结果造成什么影响。
这里的压缩指的不是使用 ZIP 或者 gzip 工具来压缩文件,而是内存中的数据压缩表示形式。例如,你的数据有两个值:Available 和 Unavailable,你可以将其存为一个布尔值,用 True 或者 False 表示,这样你就可以只用 1 个字节来表示了。你甚至可以继续压缩至 1 位来表示布尔值,这样就继续压缩到了 1 个字节时的 1/8 大小。

2. 分块

当你需要处理所有数据,而又无需把它们同时载入内存时,可以采用分块方案,把数据按块载入内存,每次只加载所有数据里的某一块。
比如,当你想搜索一本书里的最长单词时,你可以一页一页地载入这本书,这样你使用的内存就大大减少了,因为你一次只需要把这本书的一页载入内存,而最后得到的结果仍然是正确的。

3. 索引

你可以使用索引在不同时刻加载数据的不同子集,虽然分块也能解决这个问题,但与索引相比,分块会加载很多不相关的数据,速度较慢,而索引可以快速告诉你到哪里能找出你关心的那部分数据。
假设你想阅读书本中关于土豚的章节,如果你运用分块技术,你得载入整本书,一页一页的载入,从每页中搜寻土豚。用索引的话,你可以在这本书的索引部分找到土豚的索引项,它会告诉你在哪页可以读到相关内容。和分块相比,索引的搜索速度要快很多。
最简单也最常用的实现索引的方法,就是在目录里给文件恰当地命名,比如你可以用年份和月份命名,当你想查看某个月的数据时,只需打开对应的文件即可。
以上就是伊塔玛·特纳关于修改软件来减少内存使用的三个技巧,希望对你有所帮助。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
该免费文章来自《极客视点》,如需阅读全部文章,
请先领取课程
免费领取
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
大纲
固定大纲
为什么需要 RAM?
减少内存使用的三个技巧
1. 压缩
2. 分块
3. 索引
显示
设置
留言
收藏
52
沉浸
阅读
分享
手机端
快捷键
回顶部