如何1分钟内完成遍历100T数据?

简介: 如何1分钟内完成遍历100T数据?

如何快速遍历一个超大数据集 ?



文件是存储在磁盘上的,文件的读写访问速度受限于磁盘的物理限。如果才能在1 分钟内完成 100T 大文件的遍历呢?


磁盘存储结构


磁盘是一种可持久保存,持续读写数据的存储介质。磁盘分类:

  • 机械硬盘
  • 固态硬盘


机械硬盘结构


机械硬盘,包含,盘片,主轴,磁头臂,主轴带动盘片高速旋转。

  • 读取数据地上,磁头臂移动到盘片的磁道上,磁头读取磁道上的数据。


640.png



机械硬盘的数据是存储在磁性特质的盘片上的,因此叫做磁盘。


640.png



  • 读写数据是需要移动磁头,这样一个机械动作,可能需要花费几毫秒的时间。机械操作比较慢的,因此读写数据就比较慢。


固态硬盘


固态硬盘是通过主控芯片处理端口输入的指令和数据,通过控制闪存颗粒和数据读写,完全是电子操作,没有机械物理移动,访问速度会非常快。


文件系统


开发者,并不直接操作磁盘,而是通过操作系统,以文件交互的形式进行磁盘读写操作。文件系统将磁盘空间以块为单位进行划分,每个文件占据若干数据块。然后通过文件控制块(FCB) 记录每个文件占据了哪些数据块。


640.png

文件控制块,对应的是Linux 操作系统中的 inode,如果要访问文件,必须获得文件的 inode 信息,在 inode 中查询文件数据块索引表,根据索引记录的硬盘地址访问磁盘,读写数据。


inode 结构


inode 记录访问权限,修改时间,文件大小等信息。还有文件索引块的磁盘地址索引。inode 一共有15个索引。前12 个索引直接记录数据库地址。第13 个索引记录(一级索引指针)指向的并不直接是文件数据,而是记录文件块的索引表。每个索引可以记录 256个索引。第14 个事二级索引地址,第15个索引记录三级索引地址。


640.png

每个 inode 最多可存储 12+256 +256256+ 256256*256 个数据块。如果每个数据块的大小为 4K ,那么 单个文件最大不超过 70 G 。


inode 存在的问题


单个文件大小有限制,即使扩大数据块大小,文件大小也要受到单个磁盘容量的限制,如果要无法完成 100 T数据遍历。Linux 系统是无法做到的。


RAID


RAID ,也叫做独立磁盘冗余阵列。将多个磁盘块通过硬件 RAID 卡或者软件 RAID 进行管理共同对外提供服务。

RAID 的核心思路是利用文件系统将数据写入磁盘中不同数据块的特性,将多块硬盘上的空闲空间看做一个整体,进行数据写入,也就是说,一个文件的多个数据,一个文件的多个数据块可能写入多个硬盘。


RAID 分类


RAID 一个有5种:


  • RAID 0
  • RAID 1
  • RAID 10
  • RAID 5
  • RAID 6

640.png

RAID 0 将一个文件的数据分成 N 片,同时向 N 个硬盘写入。这样单个文件可以存在 N  个硬盘。文件容量可以扩大 N 倍。理论上读写速度也可以扩大 N 倍。


RAID 问题


RAID 0 最大问题是文件数据 分布在 N 块磁盘上,任何一块磁盘损坏,就会导致数据不完整。整个文件系统全部损坏,文件可用性降低。


RAID 1


RAID 是利用两块磁盘进行数据备份,文件同时向两块磁盘写入。这样任何一块磁盘损坏都不会出现文件数据丢失的情况。文件可用性得到提升。但是磁盘扩展性受限,并没有分成 N 片。


RAID 10


RAID 10 是结合了RAID 1 和 RAID 0 ,将多块磁盘进行两两分组,文件数据分成 N 片,每个分组写入一片,每个分组内的两块磁盘进行数据备份,这样的好处是,扩大了文件的容量,又提高了文件的可用性,但是存在的问题是,磁盘利用率只有 50% ,因为有一半硬盘用来做备份。


RAID 5


RAID 5 是针对 RAID 10 磁盘浪费的情况,将数据分成了 N -1 片,在利用 N-1 片进行位运算,计算出一片校验数据。然后将这N片数据写入 N 个硬盘,这样任何一个磁盘损坏,都可以通过校验片的数据和其他数据进行计算,得到这片丢失的数据。 磁盘利用率提高到了N-1/N。RAID 5 可以解决一块磁盘损坏后文件不可用的问题。 如果两块磁盘损坏呢?


RAID 6


RAID 6 是用两种位运算校验算法计算两片校验数据,这样两块磁盘损坏还是可以通过计算得到丢失的数据片。

RAID 5 孙然可以将数据分成  N-1 片,然后并发写入 N-1 块硬盘。这样可以得到很好的磁盘利用率,文件系统速度和容量都提高了 N-1 倍。但是通过一台服务器上扩展硬盘数量还是有限的,一般是8块。并不能实现 1分钟完成 100 T 文件的遍历要求。


分布式文件系统


查询inode 中索引记录得到的是数据块的磁盘地址。但是是想,如果将数据块的次哦按地址改成分布式服务器的地址呢?这样查询到的数据就不仅限于本机的硬盘地址,可以查询其他服务器的地址。这样整个文件系统的容量就是整个分布式文件系统的容量。并且通过不同服务器同时并行读取数据(相当于多线程),那文件访问速度也是非常的快。

分布式文件系统的实现思路和 RAID 是相似的,都将数据分成多片。同时向 N 台服务器写入数据。为避免和RAID 0 出现一片数据损坏问题导致文件系统损坏, 分布式文件系统采用了数据备份方式,将多个备份数据写入多个服务器。依次来保证文件可用性。 也可以采用类似RAID 通过计算数据校验的方式来得到丢失数据。


HDFS


HDFS 主要 两个重要部分:NameNode ,DataNode.

640.png

DataNode 负责文件的存储和读写, HDFS 将文件分割成若干数据块(Block)。每个DataNode 存储一些数据块。应用程序并行对数据块进行访问,从而得到 HDFS可以在服务器集群规模上实现并行的数据访问,极大提高访问速度。一般有几百台或者上千台服务器,这样整个集群的数据存储可达到 PB 级别。

NameNode 负责整个分布式文件系统元数据(MetaData)管理, 也就文件路径名,访问权限,数据块 ID 和 存储位置信息。和 Linux 中 inode 文件控制块类似。HDFS 为保证数据高可用,一般将数据库进行备份,默认3份。并将多份相同的数据存储在不同的服务器上,及时某个服务器 DataNode 宕机,客户端也能通过查找其他服务器备份数据进行访问。


如果实现 1分钟遍历 100T 数据?


基于 HDFS ,可以实现 百T 数据存储,同时配合 MapReduce ,通过配置几千台服务器并行计算,同时遍历 100 T 数据。1 分钟是可以实现的。


相关文章
|
存储 Oracle Java
分代 ZGC 详解
本文主要介绍JDK21中的分代ZGC详解,包括染色指针、内存屏障等核心概念及ZGC JVM参数介绍 ZGC(Z Garbage Collector)是Java平台上的一种垃圾收集器,它是由Oracle开发的,旨在解决大堆的低延迟垃圾收集问题。ZGC是一种并发的分代垃圾收集器,它主要针对具有大内存需求和低停顿时间要求的应用程序。
分代 ZGC 详解
|
网络协议 网络安全
Powershell免杀(无文件落地免杀)
无文件落地 顾名思义,无需将恶意文件传到目标服务器/机器上,直接利用powershell的特性加载到内存执行。为了在红队行动中更隐蔽的实施攻击以及横向移动,同时还可以解决目标不出网只能通过dns上线时的棘手问题,利用powershell可以避免一行行echo。 通过两种方式进行无文件落地的免杀,一种是出网的情况,另一种为不出网情况。 声明: 文章内容仅供网络安全爱好者学习使用,请勿用文章中提到的技术或工具做违法的事情,否则后果自负。
1489 0
|
4月前
|
JSON API UED
快递查询 API 对接指南(Python示例)
在电商与物流快速发展背景下,实时快递查询成为系统开发常见需求。本文介绍如何通过快递查询API快速集成物流信息,提升自动化水平与用户体验,并提供Python调用示例及问题解决方案。
431 0
|
存储 机器学习/深度学习 缓存
MemLong: 基于记忆增强检索的长文本LLM生成方法
本文介绍了一种名为MemLong的创新长文本处理方法,该方法通过整合外部检索器显著增强了大型语言模型处理长上下文的能力。MemLong采用轻量级设计,利用不可训练的外部记忆库存储历史上下文和知识,并通过检索相关的块级键值对增强模型输入。其技术优势包括分布一致性、高效训练策略及扩展的上下文窗口,能够在单个GPU上处理长达80k个token的文本,同时保持计算效率和内存控制。实验结果显示,MemLong在多个长文本基准数据集上表现出色,显著提升了语言建模能力和上下文学习效果。
1067 1
|
9月前
|
机器学习/深度学习 算法 PyTorch
DeepSeek 背后的技术:GRPO,基于群组采样的高效大语言模型强化学习训练方法详解
强化学习(RL)是提升大型语言模型(LLM)推理能力的重要手段,尤其在复杂推理任务中表现突出。DeepSeek团队通过群组相对策略优化(GRPO)方法,在DeepSeek-Math和DeepSeek-R1模型中取得了突破性成果,显著增强了数学推理和问题解决能力。GRPO无需价值网络,采用群组采样和相对优势估计,有效解决了传统RL应用于语言模型时的挑战,提升了训练效率和稳定性。实际应用中,DeepSeek-Math和DeepSeek-R1分别在数学推理和复杂推理任务中展现了卓越性能。未来研究将聚焦于改进优势估计、自适应超参数调整及理论分析,进一步拓展语言模型的能力边界。
1497 8
DeepSeek 背后的技术:GRPO,基于群组采样的高效大语言模型强化学习训练方法详解
|
SQL 关系型数据库 数据库
Schema(模式
【10月更文挑战第11天】
1136 8
|
Java API
Java反射(通过反射获取构造函数、方法、属性)
1.通过反射获取构造函数,2.通过反射获取方法,3.通过反射调用成员属性
759 0
|
监控 Java 测试技术
JVM工作原理与实战(二十八):内存溢出和内存泄漏
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了内存溢出与内存泄漏、内存泄漏的常见场景、解决内存溢出的步骤等内容。
357 0
JVM工作原理与实战(二十八):内存溢出和内存泄漏
|
安全 Unix Linux
探秘Linux特殊设备文件:(/dev/null,/dev/zero,/dev/random,/dev/urandom等)
探秘Linux特殊设备文件:(/dev/null,/dev/zero,/dev/random,/dev/urandom等)
1376 1
|
监控 算法 安全
JVM工作原理与实战(二十三):堆的垃圾回收-引用计数法和可达性分析法
JVM作为Java程序的运行环境,其负责解释和执行字节码,管理内存,确保安全,支持多线程和提供性能监控工具,以及确保程序的跨平台运行。本文主要介绍了判断堆上的对象是否可以回收的方法(引用计数法、可达性分析法)、查看垃圾回收日志等内容。
286 0

热门文章

最新文章