florijan 1e0ac8ab8f Write-ahead log
Summary:
My dear fellow Memgraphians. It's friday afternoon, and I am as ready to pop as WAL is to get reviewed...

What's done:
- Vertices and Edges have global IDs, stored in `VersionList`. Main storage is now a concurrent map ID->vlist_ptr.
- WriteAheadLog class added. It's based around buffering WAL::Op objects (elementraly DB changes) and periodically serializing and flusing them to disk.
- Snapshot recovery refactored, WAL recovery added. Snapshot format changed again to include necessary info.
- Durability testing completely reworked.

What's not done (and should be when we decide how):
- Old WAL file purging.
- Config refactor (naming and organization). Will do when we discuss what we want.
- Changelog and new feature documentation (both depending on the point above).
- Better error handling and recovery feedback. Currently it's all returning bools, which is not fine-grained enough (neither for errors nor partial successes, also EOF is reported as a failure at the moment).
- Moving the implementation of WAL stuff to .cpp where possible.
- Not sure if there are transactions being created outside of `GraphDbAccessor` and it's `BuildIndex`. Need to look into.
- True write-ahead logic (flag controlled): not committing a DB transaction if the WAL has not flushed it's data. We can discuss the gain/effort ratio for this feature.

Reviewers: buda, mislav.bradac, teon.banek, dgleich

Reviewed By: dgleich

Subscribers: mtomic, pullbot

Differential Revision: https://phabricator.memgraph.io/D958
2017-11-13 09:51:39 +01:00
2017-11-13 09:51:39 +01:00
2017-11-09 10:43:08 +01:00
2017-10-25 15:36:18 +02:00
2017-10-31 11:06:11 +01:00
2017-10-16 13:45:18 +02:00
2017-11-13 09:51:39 +01:00
2017-11-13 09:51:39 +01:00
2017-11-13 09:51:39 +01:00
2017-11-07 22:10:27 +01:00
2017-10-17 14:34:31 +02:00
2017-11-13 09:51:39 +01:00
2017-11-06 10:54:15 +01:00
2016-12-20 15:49:52 +01:00
2017-08-28 10:19:14 +02:00
2017-07-29 17:46:24 +02:00

memgraph

Memgraph is an ACID compliant high performance transactional distributed in-memory graph database featuring runtime native query compiling, lock free data structures, multi-version concurrency control and asynchronous IO.

dependencies

Memgraph can be compiled using any modern c++ compiler. It mostly relies on the standard template library, however, some things do require external libraries.

Some code contains linux-specific libraries and the build is only supported on a 64 bit linux kernel.

  • linux
  • clang 3.8 (good c++11 support, especially lock free atomics)
  • antlr (compiler frontend)
  • cppitertools
  • fmt format
  • google benchmark
  • google test
  • glog
  • gflags
Description
Open-source graph database, built for real-time streaming data, compatible with Neo4j.
Readme 62 MiB
Languages
C++ 70.6%
Python 14.1%
Gherkin 6.7%
Shell 2.9%
Common Lisp 1.5%
Other 4.2%