  We revisit column-oriented storage and query processing techniques in the
context of contemporary graph database management systems (GDBMSs). Similar to
column-oriented RDBMSs, GDBMSs support read-heavy analytical workloads that
however have fundamentally different data access patterns than traditional
analytical workloads. We first derive a set of desiderata for optimizing
storage and query processors of GDBMS based on their access patterns. We then
present the design of columnar storage, compression, and query processing
techniques based on these desiderata. In addition to showing direct integration
of existing techniques from columnar RDBMSs, we also propose novel ones that
are optimized for GDBMSs. These include a novel list-based query processor,
which avoids expensive data copies of traditional block-based processors under
many-to-many joins, a new data structure we call single-indexed edge property
pages and an accompanying edge ID scheme, and a new application of Jacobson's
bit vector index for compressing NULL values and empty lists. We integrated our
techniques into the GraphflowDB in-memory GDBMS. Through extensive experiments,
we demonstrate the scalability and query performance benefits of our
techniques.
