  Real-world graphs are often dynamic and evolve over time. To trace the
evolving properties of graphs, it is necessary to maintain every change of both
vertices and edges in graph databases with the support of temporal features.
Existing works either maintain all changes in a single graph or periodically
materialize snapshots to maintain the historical states of each vertex and edge
and process queries over proper snapshots. The former approach presents poor
query performance due to the ever-growing graph size as time goes by, while the
latter one suffers from prohibitively high storage overheads due to large
redundant copies of graph data across different snapshots. In this paper, we
propose a hybrid data storage engine, which is based on the MVCC mechanism, to
separately manage current and historical data, which keeps the current graph as
small as possible. In our design, changes in each vertex or edge are stored
once. To further reduce the storage overhead, we simply store the changes as
opposed to storing the complete snapshot. To boost the query performance, we
place a few anchors as snapshots to avoid deep historical version traversals.
Based on the storage engine, a temporal query engine is proposed to reconstruct
subgraphs as needed on the fly. Therefore, our alternative approach can provide
fast querying capabilities over subgraphs at a past time point or range with
small storage overheads. To provide native support of temporal features, we
integrate our approach into Memgraph, and call the extended database system
TGDB(Temporal Graph Database). Extensive experiments are conducted on four real
and synthetic datasets. The results show TGDB performs better in terms of both
storage and performance against state-of-the-art methods and has almost no
performance overheads by introducing the temporal features.
