Relational memory: native in-memory accesses on rows and columns
Roozkhosh, Shahin; Hoornaert, Denis; Mun, Ju Hyoung; Papon, Tarikul Islam; Sanaullah, Ahmed; Drepper, Ulrich; Mancuso, Renato; Athanassoulis, Manos
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.63× 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.87× as projectivity (and tuple reconstruction
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.
↧