Open-source graph database, built for real-time streaming data, compatible with Neo4j.
Go to file
florijan 76fe8bfadf Variable expansion consolidaton
Summary:
- Removed BreadthFirstAtom, using EdgeAtom only with a Type enum.
- Both variable expansions (breadth and depth first) now have mandatory inner node and edge Identifiers.
- Both variable expansions use inline property filtering and support inline lambdas.
- BFS and variable expansion now have the same planning process.
- Planner modified in the following ways:
	- Variable expansions support inline property filtering (two filters added to all_filters, one for inline, one for post-expand).
	- Asserting against existing_edge since we don't support that anymore.
	- Edge and node symbols bound after variable expansion to disallow post-expand filters to get inlined.
	- Some things simplified due to different handling.
- BreadthFirstExpand logical operator merged into ExpandVariable. Two Cursor classes remain and are dynamically chosen from.

As part of planned planner refactor we should ensure that a filter is applied only once. The current implementation is very suboptimal for property filtering in variable expansions.

@buda: we will start refactoring this these days. This current planner logic is too dense and complex. It is becoming technical debt. Most of the time I spent working on this has been spent figuring the planning out, and I still needed Teon's help at times. Implementing the correct and optimal version of query execution (avoiding multiple potentially expensive filterings) was out of reach also due to tech debt.

Reviewers: buda, teon.banek

Reviewed By: teon.banek

Subscribers: pullbot, buda

Differential Revision: https://phabricator.memgraph.io/D852
2017-10-05 13:12:39 +02:00
cmake Add option whether to link with libreadline or not 2017-10-04 15:23:11 +02:00
config Remove ast-cache flag 2017-09-27 09:04:31 +02:00
docs Variable expansion consolidaton 2017-10-05 13:12:39 +02:00
experimental Add convenience functions and a macro to libs/CMakeLists.txt 2017-10-03 14:28:16 +02:00
libs Misc glog and gflags fixes. 2017-10-04 17:29:53 +02:00
poc Copy-on-write added to POC 2017-10-03 16:40:40 +02:00
release Remove LOG_NO_STDOUT flag 2017-08-24 10:45:35 +02:00
src Variable expansion consolidaton 2017-10-05 13:12:39 +02:00
tests Variable expansion consolidaton 2017-10-05 13:12:39 +02:00
tools Add option whether to link with libreadline or not 2017-10-04 15:23:11 +02:00
.arcconfig Set arc.land.onto.default to dev 2017-03-03 13:33:45 +01:00
.clang-format Edges data structure now supports multiple edge filtering (implicit OR) 2017-09-26 13:46:18 +02:00
.gdbinit Add pretty printer to gdb for TypedValue 2017-08-16 11:32:25 +02:00
.gitignore Removed Double Locking, Simplified Ownership or LocalEventStream, .... 2017-08-04 17:58:22 +02:00
.ycm_extra_conf.py Start work on parallel benchmark 2017-09-12 16:58:21 +02:00
CHANGELOG.md BFS syntax changes 2017-09-27 16:25:19 +02:00
CMakeLists.txt Add option whether to link with libreadline or not 2017-10-04 15:23:11 +02:00
coverage Silence ctest when running for coverage 2017-06-13 11:54:43 +02:00
Doxyfile Enable AUTOBRIEF for doxygen 2017-06-02 08:59:49 +02:00
Doxylogo.png Doxygen setup 2016-12-20 15:49:52 +01:00
format Migrate command line args to gflgs in tests 2017-07-06 13:54:12 +02:00
init Remove unnecessary requirements 2017-08-28 10:19:14 +02:00
install_neo NeoRunner + Harness bugfix 2017-07-29 17:46:24 +02:00
llvm-gcov memgraph coverage (lcov setup in progress...) 2017-03-07 18:27:03 +01:00
README.md Migrate command line args to gflgs in tests 2017-07-06 13:54:12 +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