Analytical database systems are typically designed to use a column-first data layout to access only the desired fields. On the other hand, storing data row-first works great for accessing, inserting, or updating entire rows. Transforming rows to columns at runtime is expensive, hence, many analytical systems ingest data in row-first form and transform it in the background to columns to facilitate future analytical queries. How will this design change if we can always efficiently access only the desired set of columns? To address this question, we present a radically new approach to data transformation from rows to columns. We build upon recent advancements in embedded platforms with re-programmable logic to design native in-memory access on rows and columns. Our approach, termed Relational Memory, relies on an FPGA- based accelerator that sits between the CPU and main memory and transparently transforms base data to any group of columns with minimal overhead at runtime. This design allows accessing any group of columns as if it already exists in memory. We implement and deploy Relational Memory in real hardware, and we show that we can access the desired columns up to 1.63x faster than accessing them from their row-wise counterpart, while matching the performance of a pure columnar access for low projectivity, and outperforming it by up to 1.87x as projectivity (and tuple re-construction cost) increases. Moreover, our approach can be easily extended to support offloading of a number of operations to hardware, e.g., selection, group by, aggregation, and joins, having the potential to vastly simplify the software logic and accelerate the query execution.
翻译:分析数据库系统通常设计为使用列一的数据布局来只访问想要的字段。 另一方面, 将数据行一的储存为数据行一的功能, 用于访问、 插入或更新整个行。 将行转换成运行时的列是昂贵的, 因此, 许多分析系统以行一的形式记录数据, 并将数据转换成背景以方便今后的分析查询。 如果我们总是能够有效地访问想要的列组, 那么这种设计会如何改变? 为了解决这个问题, 我们提出了将数据从行转换为列的全新方法 。 另一方面, 我们利用嵌入平台中最近的进展, 用可重新编译的逻辑设计全行和列。 我们的方法, 被称为“ 关系内存”, 依靠基于一个基于直列的加速数据采集器, 在 CPU 和主内存中, 透明地将基本数据转换成任何一组在运行时拥有最低管理费的列 。 为了解决这个问题, 我们用真实硬件执行和部署“ 关系内存” 。 我们用电子逻辑来建立和部署最近的进展, 。 我们用预想的轨道 快速的运行到直径直径直径的直径,,, 直径比直径运行的直径的直径, 直径, 直到直到直到直径的直到直径的直径, 。