2010-06-27 88 views
5

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

+1

@Claudiu:这当然不是,但我希望人们尽力接受答案。这是一种礼貌的做法,也是社区工作方式的一部分。 – 2010-06-27 06:41:42

+0

我以前没有注意到这个问题,以后会多加注意。 – 2010-06-27 07:00:11

+0

@位问题:谢谢! – 2010-06-27 17:54:44

回答

8

“大规模”数据集可分为几类,我已经看到过,每个类别都有不同的挑战供您思考。

  1. 数据太大,无法放入内存。在这里,一些关键技术是:这是经常使用的有更好的表现
  2. 数据从一个文件块在同一时间工作,而不是试图读取整个文件到内存中一次(如果你”
    • 缓存数据通过文件不顺序工作,这可能是特别具有挑战性的!)
    • 在多台机器的内存之间分配数据。
  3. 由于文件系统或硬件架构限制,数据太大而无法放入单个文件。这很容易解决 - 分割文件 - 但在许多情况下,明智的分割将是一个实际问题。
  4. 数据太大而无法放在单个硬盘上。在这里,主要技术是购买更大的磁盘:-),或者将数据分布到多台机器上。
    • 当您需要对数据进行分析或转换时,跨多台机器分配数据会带来有趣的挑战。这是一个深刻的话题,有很多不同的方法和挑战。Map/Reduce框架(如CouchDB和Hadoop)最近已成为该领域研究和应用的流行工具。
  5. 数据对于单个数据库实例来说太大了。这可能是磁盘大小(空间不足)或性能(内存高速缓存不断膨胀,索引变得太大)的问题。保持数据分散在多个数据库实例(可能在多个数据中心中)的稳健性和性能是大型企业长期关注的一个领域。在这里,选择是:
    • 垂直分割(不同的表到不同DB)
    • 水平分割(在不同的数据块相同的表,但持不同的数据)往往

其他问题有关拥有大型数据集,而不是大小相关的问题本身,分别是:

  1. 逸一个即将进入的速度。想象一下系统需要扩展到每分钟数百万甚至数十亿次交易。
  2. 不断变化的数据。如何处理陈旧的数据或正在修改的数据?
1

没有单一的数据结构或算法来“处理”任何性质的大数据集,并且出于每一个可能的目的 - 相当多的这样的体系结构,数据结构和算法的集合,对于如此多不同类型的数据以及所需的“处理”(在单任务,SMP和分布式环境中 - 他们在很多情况下可能需要非常不同的方法)。

1

没有银子弹。需要更多上下文信息来理解哪些算法和数据结构对于给定的大规模目的是有用的。对于太大而不适合内存的数据,例如,许多数据库管理系统使用B +树。

0

当人们描述数据集Large时,它们通常意味着整个数据集不能存储在内存中。这对于要加载什么数据以及何时加载和卸载数据产生了挑战。

一种方法是从头到尾使用顺序数据文件和过程。当处理的性质是顺序的时候,这是有效的,但是当处理需要组合来自数据集的各个部分的数据时,这不起作用。

另一种方法是某种索引文件,根据需要检索必要的数据位。

这是一个专门化的内存映射文件,您可以让内存管理器处理数据的加载和缓存。

DBMS可以大大简化数据访问,但会增加一些系统开销。