  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 and avoids materializing adjacency lists in intermediate
tuples, 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.
