处理大规模数据集

时间:2010-06-27 05:22:33

标签: c++ algorithm data-structures dataset

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

4 个答案:

答案 0 :(得分:8)

“大规模”数据集分为我见过的几个类别,每个类别都有不同的挑战供您考虑。

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

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

答案 1 :(得分:1)

没有任何单一的数据结构或算法可以“处理”任何性质的大型数据集,无论出于何种可能的目的 - 还有大量此类体系结构,数据结构和算法的集合,数据类型和所需的“处理”(在单任务,SMP和分布式环境中 - 在许多情况下它们可能需要非常不同的方法)。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

当人们描述 Large 数据集时,它们通常意味着整个数据集无法存储在内存中。这会给要加载的数据以及何时加载和卸载数据带来挑战。

一种方法是使用顺序数据文件并从头到尾处理。当处理的性质是连续的时,这是有效的,但是当处理需要组合来自数据集的各个部分的数据时,这种方法不能很好地工作。

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

这方面的一个特殊之处是使用内存映射文件,让内存管理器处理数据的加载和缓存。

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