Open-source graph database, built for real-time streaming data, compatible with Neo4j.
Go to file
Matej Ferencevic 4d2eda398f Improve property store performance
Summary:
This diff improves the performance of `PropertyStore` with two main
techniques:

First:
`PropertyValue` has a very expensive constructor and destructor. The
`PropertyValue` was previously passed as a return value from many functions
wrapped in a `std::optional`. That caused the `PropertyValue`
constructor/destructor to be called for each intermediary value that was passed
between functions. This diff changes the functions to return a `bool` value
that imitates the `std::optional` "emptyness" flag and the `PropertyValue` is
modified using a pointer to it so that its constructor/destructor is called
only once.

Second:
The `PropertyStore` buffer was previously iterated through at least twice.
First to determine the exact position of the encoded property and then to
actually decode the property. This diff combines the two passes into a single
pass so that the property is immediately loaded if it is found.

Reviewers: buda

Reviewed By: buda

Subscribers: pullbot

Differential Revision: https://phabricator.memgraph.io/D2766
2020-05-05 10:55:00 +02:00
cmake Migrate LDAP integration to auth module 2019-09-11 17:15:08 +02:00
config Enable properties on edges by default in package 2019-12-09 16:38:36 +01:00
docs Clean docs folder 2020-03-05 18:32:14 +01:00
environment Migrate to Clang 8 2019-04-19 12:34:50 +02:00
include Expose query timeout checking to modules 2020-04-01 13:30:03 +02:00
libs Fix CentOS compilation 2020-04-06 16:01:35 +02:00
query_modules Install Python query modules 2020-04-02 19:45:12 +02:00
release Fix CMake RPM typo and specify all package config files 2020-04-06 19:12:30 +02:00
src Improve property store performance 2020-05-05 10:55:00 +02:00
tests Improve property store performance 2020-05-05 10:55:00 +02:00
tools Implement mg_import_csv 2020-03-03 14:33:43 +01:00
.arcconfig arcconfig: Default to master for diff and land 2017-11-07 18:41:51 +01:00
.arclint Remove cppcheck from arc linters 2020-02-17 17:40:39 +01:00
.clang-format Edges data structure now supports multiple edge filtering (implicit OR) 2017-09-26 13:46:18 +02:00
.clang-tidy Add .clang-tidy for tests and update the config 2019-10-31 16:07:09 +01:00
.gdbinit Add pretty printer to gdb for TypedValue 2017-08-16 11:32:25 +02:00
.gitignore Reimplement counter openCypher function 2019-05-16 11:09:02 +02:00
.ycm_extra_conf.py Add kafka library and integrate it into memgraph 2018-07-06 15:52:23 +02:00
apollo_archives.py Add community to Apollo build 2020-02-17 13:27:20 +01:00
apollo_archives.yaml Add community to Apollo build 2020-02-17 13:27:20 +01:00
apollo_build.yaml Don't link with libreadline in community release 2020-04-06 10:17:02 +02:00
CHANGELOG.md Add changelog for version 1.0 2020-04-03 14:09:02 +02:00
CMakeLists.txt Implement version names for each Memgraph version 2020-02-12 10:05:40 +01:00
Doxyfile Remove customers/experimental/poc 2020-01-29 16:59:45 +01:00
Doxylogo.png Doxygen setup 2016-12-20 15:49:52 +01:00
init Add cppcheck and clang-format arc linters 2020-02-13 13:38:49 +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