处理大规模数据集

bit*_*ion 5 c++ algorithm dataset data-structures

从在线讨论组和博客中,我看到很多面试问题与处理大型数据集有关.我想知道有没有系统的方法来分析这类问题?或者更具体地说,是否有可用于处理此问题的数据结构或算法?任何建议都非常感谢.

Owe*_* S. 8

"大规模"数据集分为我见过的几个类别,每个类别都为您提供了不同的挑战.

  1. 数据太大而无法存储在内存中.在这里,一些关键技术是:
    • 缓存经常用于提高性能的数据
    • 一次处理来自文件的数据,而不是一次尝试将整个文件读入内存(如果你没有按顺序通过文件,这可能特别具有挑战性!)
    • 在多台机器的内存中分配数据.
  2. 由于文件系统或硬件架构限制,数据太大而无法放入单个文件中.这很容易解决 - 拆分文件 - 但在许多情况下,有一个实际的问题是合理的拆分.
  3. 数据太大,无法放在单个硬盘上.在这里,主要是技术是购买更大的磁盘:-),或者在多台机器上分配数据.
    • 当您需要对数据进行分析或转换时,在多台计算机上分发数据会带来有趣的挑战.这是一个深层次的主题,有很多不同的方法和挑战.像CouchDB和Hadoop这样的Map/reduce框架最近成为该领域研究和应用的流行工具.
  4. 对于单个数据库实例来说太大的数据.这可能是磁盘大小(空间不足)或性能问题(内存缓存不断爆炸,索引变得太大).维护跨多个数据库实例的数据的稳健性和性能,可能存在于多个数据中心,这是大型企业长期关注的一个领域.在这里,选择是:
    • 垂直拆分(不同的表到不同的DB)
    • 水平分割(不同DB上的相同表,但保存不同的数据)

通常与大规模数据集相关的其他问题,但与尺寸相关的问题本身并不相关:

  1. 快速进入的数据.想想需要每分钟扩展到数百万甚至数十亿交易的系统.
  2. 数据不断变化.您如何处理在处理过程中被修改的陈旧数据或数据?