Dremel 或其实现(例如 Drill)如何处理内存中的大型柱状数据布局?

How does Dremel or its implementation (say Drill) handle large columnar data layout in memory?

我正在浏览 Google Dremel 的 white paper。我开始知道它将复杂数据转换为 列数据布局

此数据存储在什么位置?

由于 Drill 没有中央元数据存储库,我认为它一定是 内存中

因此,当我有数十亿行时,Drill 如何处理这些数据?

要从数十亿行中获得完整、一致的查询结果,您将使用连接到多个 Drillbit 的分布式文件系统,通过将文件复制到每个节点来模拟分布式文件系统,或者使用 NFS 卷,例如亚马逊弹性文件系统。 Drill 使用多种技术对大数据执行高性能查询,包括:

  • 依靠集群节点来处理故障(不花时间处理与故障相关的任务)。
  • 使用分层和列式的内存数据模型(不访问磁盘以获取不涉及分析查询的列,处理列式数据而不进行行具体化)。
  • 使用列式存储优化和执行(保持低内存占用)。
  • 使用矢量化来处理来自不同记录的值数组,而不是一次处理来自一条记录的单个值。

有关详细信息,请参阅 http://drill.apache.org/docs/performance/