Skip to main content
Version: 2.10.1

Changelog

v2.10.1 - Aug 22, 2023

New features

  • Removing properties from relationships with RemoveProperty() function in C++ API. #1156

Improvements and bug fixes

  • Improved performance on batch update of properties, e.g., MATCH (n) SET n += {prop1:1, prop2:2, ...};#1115
  • Added a delta cache to improve query performance. This helps in situations of repeated reads of vertices which have many delta changes caused by another transaction while the current transaction is operating with snapshot isolation level and so needs to process those deltas. This can be tuned using --delta-chain-cache-threshold. #1124
  • The same query module can now be executed concurrently by different clients. #1158

v2.10 - Aug 2, 2023

New features and improvements

  • The new multi-tenant support available in the Enterprise Edition of Memgraph enables you to manage multiple isolated databases within a single instance. The primary objective is to facilitate efficient resource isolation, maintain data integrity, and manage access for different clients. #952

  • The configuration flag storage-recover-on-startup has been deprecated and replaced with data_recovery_on_startupto support multi-tenancy. The storage-recover-on-startup can still be used until the next release planned for mid-September.

  • If you want to replace procedure names your application calls without changing the application code, you can define the mapping of the old and new procedure names in a JSON file, then set the path to the files as the value of the query-callable-mappings-path configuration flag. #1018

  • The C++ API for writing custom query modules now enables:

    • inserting mgp::Any datatype into Record. #1094
    • comparing two mgp::Value variables with the < operator. #1090
    • printing the type of mgp::Type enumeration using the << operator. For example, if you have a mgp::List list, cout<< list <<endl will output "list". #1080
    • printing mgp::Value variables (except mgp::Path, mgp::List and mgp::Map types) using the << operator. #1127
    • using the mgp::Value variables and all its subtypes (mgp::Map, mgp::Path, ...) inside hash structures such as std::unordered_map and std::unordered_set. #1093
    • deleting and updating map elements with mgp::Map.Update(key, &value), mgp::Map.Update(key, &&value) and mgp::Map.Erase(key) functions. #1103
    • removing properties from nodes with RemoveProperty() function and labels with RemoveLabel() function. #1128#1126

    Also, the mgp::Value wrapper for Memgraph's data types has been extended to return subtypes which are modifiable (non-const). #1099

  • The C API for writing custom query modules now enables:

    • deleting and updating map elements with mgp_map_update(map, key, value) and mgp_map_erase(map, key) functions. #1103
    • removing labels from nodes with RemoveLabel() function. #1126
  • Memgraph supports transaction timeouts defined by the Bolt protocol if the connection to the database is established via the JavaScript client. #1046

  • Queries exploring all shortest paths now use considerably less memory without significant performance deterioration. #981

  • Users with fine grained privileges will experience better performance when running queries due to user information cashing. Any changes to the user privileges will be ignored until the next login. #1109

Bug fixes

  • Connection with Bolt v5.2 now works as expected when returning a path as a result. #1108
  • Serializing vertex and edge properties to RocksDB now works as expected even when the serialization buffer is exactly 15B. #1111
  • Users created in the Community Edition remain valid after the instance is upgraded to an Enterprise Edition. #1067

v2.9 - Jul 21, 2023

caution

Memgraph 2.9 introduced a new configuration flag --replication-restore-state-on-startup which is false by default.

If you want instances to remember their role and configuration in a replication cluster upon restart, the --replication-restore-state-on-startup needs to be set to true when first initializing the instances and remain true throughout the instances' lifetime.

When reinstating a cluster it is advised to first initialize the MAIN instance, then the REPLICA instances.

New features and improvements

  • The new ON_DISK_TRANSACTIONAL storage mode allows you to store data on disk rather than in-memory. Check the implementation and implications in the reference guide. #850
  • Memgraph now works with all Bolt v5.2 drivers. #938
  • The LOAD CSV clause has several new improvements:
    • You can now import data from web-hosted CSV files by passing the URL as a file location. You can also import files compressed with gzip or bzip2 algorithms. #1027
    • To speed up the execution of the LOAD CSV clause, you can add MATCH and MERGE entities prior to reading the rows from a CSV file. But, the MATCH or MERGE clause has to return just one row or Memgraph will throw an exception. #916
    • If a certain sequence of characters in a CSV file needs to be imported as null, you can now specify them with the NULLIF option of the LOAD CSV clause. #914
  • You can now use mgp::Type::Any while developing a custom query procedure with the C++ API to specify that the argument of the procedure can be of any type. #982
  • When you need to differentiate transactions, you can now define and pass transaction metadata via the client and check it in Memgraph by running the SHOW TRANSACTIONS; query. #945
  • You can now create custom batch procedures in Python and C++ that process data in batches, thus consuming less memory.
    #964
  • The ANALYZE GRAPH; query now includes information about the degree of all nodes to enhance the MERGE optimizations on supernodes. #1026
  • The --replication-restore-state-on-startup configuration flag allows you to define whether instances in the replication cluster will regain their roles upon restart (true) or restart as disconnected "blank" MAIN instances (default setting false). This flag resolved the unwanted behavior of restarted REPLICA instances disconnecting from the cluster, but it also needs to be introduced to MAIN instances so they are not disconnected from the cluster upon restart. #791

Bug fixes

  • init-file and init-data-file configuration flags allow the execution of queries from a CYPHERL file, prior to or immediately after the Bolt server starts and are now possible to configure in the Community Edition as well. #850
  • The IN_MEMORY_ANALYTICAL storage mode now deallocates memory as expected and no longer consumes memory excessively. #1025
  • When no values are returned from a map, a null is returned instead of an exception occurring. #1039

v2.8 - May 18, 2023

New features and improvements

  • Data recovery is now up to 6x faster depending on the number of available cores, as snapshot loading is distributed among several threads. #868
  • During the recovery, indexes can also be created using multiple threads, thus speeding up the process. #882
  • In the Enterprise Edition, Memgraph now exposes system metrics via an HTTP endpoint, so you can get information about transactions, query latency and various other properties. #940
  • It’s now possible to use the map projection syntax to create maps. Map projections are convenient for building maps based on existing values and they are used by data access tools like GraphQL. #892
  • You can now check if the data directory is (un)locked with the DATA DIRECTORY LOCK STATUS; query. #933
  • You can now check the current storage mode and isolation levels by running the SHOW STORAGE INFO; query. #883
  • Check the suspected build type of the Memgraph executable by running the SHOW BUILD INFO; query. #894
  • Performance has been improved by optimizing the deallocation of resources in Memgraph's custom PoolResource memory allocator. #898

Bug fixes

  • Running Python procedures now consume less memory. #932
  • Memory allocation in LOAD CSV queries has been optimized to avoid performance degradation. #877
  • Query profiles of the LOAD CSV queries now show the correct values of memory usage. #885

v2.7 - Apr 5, 2023

New features and improvements

  • You can now choose between two different storage modes:
    • Transactional mode - the default database mode that favors strongly-consistent ACID transactions using WAL files and periodic snapshots, but requires more time and resources during data import and analysis.
    • Analytical mode - speeds up import and data analysis but offers no ACID guarantees besides manually created snapshots. Switch between modes within the session using the STORAGE MODE IN_MEMORY_{TRANSACTIONAL|ANALYTICAL}; query. #772
  • You can now call subqueries inside existing queries using the CALL clause. #794
  • When you want to filter data using properties that all have label:property indexes set, you can make Memgraph analyze the properties on all or several labels with the ANALYZE GRAPH; query. By calculating the distribution of property values, Memgraph will be able to select the optimal index for the query and it will execute faster. #812
  • If, for example, you are no longer interested in the results of the query you ran, or the procedure you built is running in an infinite loop, you can stop the transaction with the TERMINATE TRANSACTIONS tid; query; Find out the transaction ID with SHOW TRANSACTIONS; query. #790
  • With the new flagpassword-encryption-algorithm you can choose between bcrypt, sha256, and sha256-multiple encryption algorithms. SHA256 offers better performance compared to the more secure but less performant bcrypt. #839
  • Import using the LOAD CSV clause has been further improved by using a memory allocator which will reuse memory blocks allocated while processing the LOAD CSV query. #825

Bug fixes

v2.6 - Mar 07, 2023

Major features and improvements

  • Importing speed using the LOAD CSV clause has been improved due to two changes:
    • Performance improvement in accessing values from large arrays or maps with numerous properties. #744
    • Upon creating a large number of node or relationship properties, properties are stored in a property store all at once, instead of individually. #788
  • Newly implemented exists() function allows using patterns as part of the filtering clause. Check the Cypher Manual for usage. #818
  • With the new Python mock query module API, you can now develop and test Python query modules for Memgraph without having to run a Memgraph instance. The mock API is compatible with the Python API and thus developed modules can be added to Memgraph as-is. #757
  • Memgraph now supports Fedora 36 and Ubuntu 22.04 for ARM. #787 #810

Bug fixes

  • torch and igraph can no longer be removed from the svs.modules cache to avoid issues after reload. #720
  • Newly created nodes now comply with the set label based authorization rules. #755
  • Constructing LocalDateTime objects with invalid parameters doesn’t crash Memgraph anymore, but throws an informative exception. #819
  • Error message warning about incompatible epoch_id between a MAIN and REPLICA instance has been improved. #786

v2.5.2 - Jan 26, 2023

Bug Fixes

  • Variables can be used inside nested FOREACH clauses. #725
  • FOREACH clause can now use indexes if needed (e.g. in case of MERGE). #736
  • C++ API now allows setting and getting node and relationship properties. #732
  • OPTIONAL MATCH can now use label property indexes that are referencing the previously matched variables. #736
  • Iterating over all relationships in a graph now works as expected, as well as checking whether the graph contains a given relationship. #743
  • Implementation of the All Shortest Paths algorithm was fixed so the paths are no longer duplicated when the upper bound is used. #737

v2.5.1 - Jan 19, 2023

Bug Fixes

  • The LOAD CSV clause now uses less RAM to load a whole CSV file. Modification made to improve the LOAD CSV operation, also influenced high memory usage operations with objects such as lists and map. Modifying or accessing elements inside those objects now also uses less RAM. #712
  • The logic of the read_write_type_checker was corrected so queries now get the right rw_type, making the replication system work as expected. #709
  • Bolt protocol has been improved by adding the server-assigned query ID (qid) as part of the transactions' metadata. #721
  • Fixed a trigger bug that would cause an error if Memgraph is configured to run without properties on edges. As a result of the fiy, triggers are now working as expected when there are no properties on edges. #717

v2.5.0 - Dec 13, 2022

Major Features and Improvements

  • DISTINCT operator can now be used with aggregation functions. Until now, if you wanted to use an aggregation function with distinct values, you had to write a query similar to this one WITH DISTINCT n.prop as distinct_prop RETURN COUNT(distinct_prop). Now you can use the DISTINCT operator like in the following query, RETURN COUNT(DISTINCT n.prop). #654
  • You can now create a user before the Bolt server starts using the environment variables MEMGRAPH_USER for the username, MEMGRAPH_PASSWORD for the password and MEMGRAPH_PASSFILE file that contains username and password for creating the user in the following format: username:password. #696
  • With the new configuration flag init_file you can execute queries from the CYPHERL file which need to be executed before the Bolt server starts and with the configuration flag init_data_file you can execute queries from the CYPHERL file immediately after the Bolt server starts. #696

Bug Fixes

  • Constructors and assignment operators in the C++ query modules API now work as expected, and the API type check in the ValueNumeric method now correctly recognizes numeric types. #688
  • Error message support (SetErrorMessage) has been added to query methods that use the MAGE C++ API. #688
  • The EmptyResult sink operator was added to the Memgraph's planner. This means that results produced by a query MATCH (n) SET n.test_prop = 2 will get exhausted which was a problem in some Bolt clients implementations, e.g in Golang's client. #667
  • Fixed Python submodules reloading when calling CALL mg.load() and CALL mg.load_all(). Before, only the Python module would be reloaded, but now all dependencies get reloaded as well. This includes Python's utility submodules and Python packages, which means that the environment with Python packages can be changed without turning off the database. #653

v2.4.2 - Nov 7, 2022

Bug Fixes

  • Fixed a bug when calling AllShortestPath with id function. #636
  • Fixed bug when getting iterating over in-edges of a Node. #582

v2.4.1 - Oct 7, 2022

Bug Fixes

  • Fixed bug when getting EdgeType from Edge object or Label from Vertex object in query modules. #582
  • Fix a bug when changing role permissions for label based authorization, by passing user's instead of role's fine_grained_access_handler. #579

v2.4.0 - Sep 15, 2022

Major Features and Improvements

  • Add replica state to SHOW REPLICAS query. #379
  • Add current_timestamp and number_of_timestamp_behind_master to SHOW REPLICAS query. #412
  • Query REGISTER REPLICA replica_name SYNC no longer supports TIMEOUT parameter. To mimic the previous behavior of REGISTER REPLICA replica_name SYNC WITH TIMEOUT 1, one should use REGISTER REPLICA replica_name ASYNC instead. #423
  • Make behavior more openCypher compliant regarding checking against NULL values is CASE expressions. #432
  • Previously registered replicas are automatically registered on restart of Memgraph. #415
  • Add new command SHOW CONFIG that returns the configuration of the currently running Memgraph instance. #459
  • Extend the shortest paths functionality with All Shortest Path query. #409
  • Extend the query modules C and Python API to enable logging on different levels. #417
  • Added C++ query modules API. Instead of using the C API call, C++ API calls significantly simplify the implementation of fast query modules. #546
  • [Enterprise] Added support for label-based authorization. In addition to clause-based authorization rules, each user can now be granted NOTHING, READ, UPDATE, or CREATE_DELETE permission on a given label or edge type. #484
  • New Cypher function project() creates a projected graph consisting of nodes and edges from aggregated paths. Any query module or algorithm can be now run on a subgraph, by passing the variable of the projected graph as the first argument of the query module procedure. #535

Bug Fixes

  • Added a check to ensure two replicas cannot be registered to an identical end-point. #406
  • toString function is now able to accept Date, LocalTime, LocalDateTime and Duration data types. #429
  • Aggregation functions now return the openCypher-compliant results on null input and display the correct behavior when grouped with other operators. #448
  • Corrected inconsistencies and incorrect behavior with regards to sync replicas. For more detail about the behavior, please check Under the hood view on replication. #435
  • Fixed handling ROUTE Bolt message. Memgraph didn't handle the fields of ROUTE message properly. Therefore the session might be stuck in a state where even the RESET message did not help. With this fix, sending a RESET message will properly reset the session. #475

v2.3.1 - Jun 23, 2022

Improvement

  • Updated results return by CHECK STREAM query to group all queries/raw messages on single line per batch. #394
  • Add frequent replica ping. main instance checks state of the replicas with given frequency controller by --replication-replica-check-delay-sec. The check allows latest information about the state of each replica from main point of view. #380
  • Added BATCH_LIMIT and TIMEOUT options to START STREAM query that returns the raw message received by the transformation. #392

Bug Fixes

  • Fix header on SHOW REPLICATION ROLE query and wrong timeout info on SHOW REPLICAS query. #376
  • Fix WebSocket connection with clients that do not use binary protocol header. #403
  • Fix SSL connection shutdown hanging. #395
  • Fix module symbol loading with python modules. #335
  • Fix header on SHOW REPLICATION ROLE query and wrong timeout info on SHOW REPLICAS query. #376
  • Adapted compilation flag so that the memory allocator uses JEMALLOC while counting allocated memory. #401

v2.3.0 - Apr 27, 2022

Major Features and Improvements

Bug Fixes

  • Fixed incorrect loading of C query modules. #387

v2.2.1 - Mar 17, 2022

Bug Fixes

  • Added CentOS 7 release by fixing the compatibility issue with the older version of SSL used on CentOS 7. #361

v2.2.0 - Feb 18, 2022

Major Features and Improvements

  • Added support for compilation on ARM architectures (aarch64) and Docker support for running Memgraph on Apple M1 machines. #340
  • Added monitoring server that forwards certain information from Memgraph to the clients connected to it (e.g. logs) using WebSocket. #337
  • Added CONFIGS and CREDENTIALS options to Kafka streams. #328
  • Added built-in procedures used for handling Python module files. mg.create_module_file, mg.update_module_file, mg.delete_module_file, mg.get_module_file, and mg.get_module_files allow you to do modifications on your Python module files, get their content, and list all the files present in your query module directories directly from Memgraph. #330
  • Built-in procedures mg.procedures and mg.transformations return additional information about the procedures and transformations scripts. path returns an absolute path to the module file containing the procedure, while is_editable returns true if the file can be edited using Memgraph or false otherwise. #310
  • Added SHOW VERSION query that returns the version of the Memgraph server which is being queried. #265

Bug Fixes

  • The reference count is increased when Py_None is returned from the _mgp module. This fixes a nondeterministic fatal Python error. #320
  • Use correct error when printing warning in rebalance callback of Kafka consumer. #321
  • Fix transaction handling in streams in case of serialization error. Previously, a serialization error caused an exception to be thrown since nested transactions are not supported. After this fix, the transactions are handled correctly in the transaction retry logic. #339
  • Temporal types LocalTime and LocalDateTime instantiations return subsecond precision. Additionally, query modules mg_local_date_time_now() and mg_local_time_now() also return subsecond precision. #333

v2.1.1 - Dec 07, 2021

danger

Breaking Changes

  • Loading streams created by versions of Memgraph older than 2.1 is not possible. We suggest you extract the necessary information using the older version of Memgraph and recreate the streams in a newer version (Memgraph 2.1 and newer).

Major Features and Improvements

  • Added procedures for retrieving configuration information specific for each stream type. mg.pulsar_stream_info will return information about a specific Pulsar stream and mg.kafka_stream_info will return information about a specific Kafka stream. #301
  • SHOW STREAMS now returns default values for batch interval and batch size if they weren't specified. #306

Bug Fixes

  • Query execution stats, returned after a Cypher query was executed, are now updated with the changes made in write procedures. #304
  • Loading streams created by older versions won't cause Memgraph to crash. #302

v2.1.0 - Nov 22, 2021

danger

Breaking Changes

  • Loading streams created by older versions cause Memgraph to crash. The only possible workaround involves deleting the existing streams. The streams can be deleted by the DROP STREAM query in the old versions of Memgraph. After upgrading to this version, the streams directory has to be deleted manually from Memgraph's data directory (on Debian-based systems, it is /var/lib/memgraph by default).
  • The query for creating a Kafka stream now requires the KAFKA keyword. The previous form CREATE STREAM ... was changed to CREATE KAFKA STREAM ....

Major Features and Improvements

  • Now supporting Bolt protocol version 4.3. #226
  • Streams support for retrying conflicting transactions. When a message is processed from a certain stream source, a query is executed as a part of the transaction. If that transaction fails because of other conflicting transactions, the transaction is retried a set number of times. The number of retries and interval between each retry can be controlled with configs --stream-transaction-conflict-retries and --stream-transaction-retry-interval. #294
  • Added procedure to configure the starting offset (to consume messages from) of a topic (and its partitions). #282
  • Added BOOTSTRAP_SERVERS option to CREATE KAFKA STREAM which you can check here. #282
  • Added Bolt notifications in the query summary to inform the user about results or to give useful tips. When a query executes successfully, sometimes is necessary to give users tips or extra information about the execution. #285
  • Added execution statistics in the query summary to inform user on how many objects were affected. E.g., when you run a query with a CREATE clause, you'll know how many nodes/edges were created by it. #285
  • Added support for connecting to Pulsar as a new stream source. For more details, check out our reference pages. #293

Bug Fixes

  • Allow duration values to be used as weights in the Weighted Shortest Path query. #278
  • Fix linkage error when mgp_local_time_get_minute is used. #273
  • Fix crash when temporal types are used with ORDER BY clause. #299

v2.0.1 - Oct 12, 2021

Major Features and Improvements

  • Updated a startup message with a link to the getting started page. #259
  • Updated certain error and warning messages in the logs with links to the documentation explaining the problem in more detail. #243
  • Updated mgconsole to v1.1.0. #260

Bug Fixes

  • Graph updates made in the write procedures are now correctly registered in the triggers. #262
  • Fixed DETACH DELETE interaction with the triggers. Previously, vertices deleted by the DETACH DELETE would not be registered by triggers if only ON () DELETE trigger existed. #266

v2.0.0 - Oct 5, 2021

danger

Breaking Changes

  • Changed the timestamp() function to return microseconds instead of milliseconds.
  • Most of the query modules C API functions are changed to return a mgp_error as a more fine-grained way of error reporting. The only exceptions are the functions that free allocated memory (mgp_free and mgp_global_free) and destroy objects (mgp_value_destroy, mgp_list_destroy, etc.) which remain the same.
  • The first user created using the CREATE USER query will have all the privileges granted to him. Previously, you could've locked yourself out of Memgraph by creating a user and immediately disconnecting.

Major Features and Improvements

  • Added support for temporal types, a feature that allows the user to manipulate and store time related data in the graph. For more information take a look at the reference guide
  • Added support for parameters with CREATE clause in the following form: CREATE (n $param).
  • Introduced settings to Memgraph that can be modified during runtime. You can check out more details here.
  • Added writeable procedure support, so procedures can modify the graph by creating and deleting vertices and edges, modifying the labels of vertices or setting the properties of vertices and edges.

Bug Fixes

  • Fixed planning of queries with MERGE clause. If a previously defined symbol is used as property value inside the MERGE clause, the planner will correctly use the label-property index if present.
  • Unused memory is correctly returned to OS when FREE MEMORY query is used. Before, Memgraph would free up the memory internally and not return it to the OS. Because of that Memgraph could allocate more memory from the OS than it's allowed.
  • Fixed recovery from durability files. Because of a wrong check, Memgraph could crash and leave the durability files in an invalid state making recovery not possible.
  • Fixed usage of execute keyword in queries. Because of the special way we handle the EXECUTE keyword from the CREATE TRIGGER query using that same keyword in other contexts caused Memgraph to crash.

v1.6.1 - Jul 24, 2021

Major Features and Improvements

  • Added proper privilege checks for queries executed by triggers and stream transformations.

Bug Fixes

  • Fixed error handling in streams to make restarting streams possible after failing. The issue is caused by not rolling back the transaction in which the query failed, so when the stream was restarted and tried to process the next batch of messages it was still in a transaction, but it tried to start a new one. Now the transaction is rolled back in case of any errors during query execution, so a new transaction can be started during the processing of the next batch of messages.

v1.6.0 - Jul 7, 2021

danger

Breaking Changes

  • Changed the LOCK_PATH permission to DURABILITY.

Major Features and Improvements

  • Added support for consuming Kafka streams. You can connect Memgraph to a Kafka cluster and run queries based on the messages received. The transformation from Kafka to Cypher queries is done using Transformation Modules, a concept similar to Query Modules. Using our Python and C API, you can easily define functions that analyze Kafka messages and generate different queries based on them. The stream connection can be configured, tested, stopped, started, checked, and dropped.
  • Introduced global allocators for Query Modules using C API, so the data can be preserved between multiple runs of the same procedure.
  • Introduced new isolation levels, READ COMMITTED and READ_UNCOMMITTED. The isolation level can be set with a config. Also, you can set the isolation level for a certain session or the next transaction. The names of the isolation levels should be self-explanatory, unlike the SNAPSHOT ISOLATION which is still the default isolation level.
  • The query timeouts are now triggered using a different method. Before, we used the TSC to measure the execution time. Unfortunately, this proved unreliable for certain CPUs (AMD Ryzen 7 and M1), which caused queries to timeout almost instantly. We switched to POSIX timer which should work on every hardware, while not affecting the performance.
  • Added a config, allow-load-csv, with which you can disable LOAD CSV clause. LOAD CSV can read and display data from any file on the system which could be insecure for some systems. Because of that, we added a config that allows you to disable that clause in every case.
  • Added CREATE SNAPSHOT query. Snapshots are created every few minutes, using this query you can trigger snapshot creation instantly.
  • Increased the default query timeout to 10 minutes. The previous default amount of 3 minutes proved too small, especially for queries that use LOAD CSV with a large dataset.

Bug Fixes

  • Fixed parsing of certain types in Query Modules using Python API.
  • Fixed a concurrency bug for Query Modules using Python API. Running the same procedure from multiple clients caused the Memgraph instance to crash.
  • Fixed restoring triggers that call procedures. Because the triggers were restored before the procedures, the query trigger executes couldn't find the called procedure, which caused the restore to fail. Switching up the order was enough to fix the problem.

v1.5.0 - May 28, 2021

Major Features and Improvements

  • Added database triggers. You can now create, delete, and print out triggers that execute Cypher statements. You can create custom actions whenever a node or an edge is created, updated, or deleted. All the triggers are persisted on the disk, so no information is lost between runs.
  • Replaced mg_client with the mgconsole command-line interface, which ships directly with Memgraph. You can now install mgconsole directly on Windows and macOS.

Bug Fixes

  • Fixed parsing of types for Python procedures for types nested in mgp. List. For example, parsing of mgp.List[mgp.Map] works now.
  • Fixed memory tracking issues. Some of the allocation and deallocation wasn't tracked during the query execution.
  • Fixed reading CSV files that are using CRLF as the newline symbol.
  • Fixed permission issues for LOAD CSV, FREE MEMORY, LOCK DATA DIRECTORY, and replication queries.

v1.4.0 - Apr 2, 2021

danger

Breaking Changes

  • Changed MEMORY LIMIT num (KB|MB) clause in the procedure calls to PROCEDURE MEMORY LIMIT num (KB|MB). The functionality is still the same.

Major Features and Improvements

  • Added replication to community version.
  • Added support for multiple query modules directories at the same time. You can now define multiple, comma-separated paths to directories from which the modules will be loaded using the --query-modules-directory flag.
  • Added support for programatically reading in data from CSV files through the LOAD CSV clause. We support CSV files with and without a header, the supported dialect being Excel.
  • Added a new flag --memory-limit which enables the user to set the maximum total amount of memory memgraph can allocate during its runtime.
  • Added FREE MEMORY query which tries to free unusued memory chunks in different parts of storage.
  • Added the memory limit and amount of currently allocated bytes in the result of SHOW STORAGE INFO query.
  • Added QUERY MEMORY LIMIT num (KB|MB) to Cypher queries which allows you to limit memory allocation for the entire query. It can be added only at the end of the entire Cypher query.
  • Added logs for the different parts of the recovery process. INFO, DEBUG and TRACE level all contain additional information that is printed out while the recovery is in progress.

Bug Fixes

  • Fixed garbage collector by correctly marking the oldest current timestamp after the database was recovered using the durability files.
  • Fixed reloading of the modules with changed result names.
  • Fixed profile query to show the correct name of the ScanAll operator variant.

v1.3.0 - Jan 26, 2021

danger

Breaking Changes

  • Added extra information in durability files to support replication, making it incompatible with the durability files generated by older versions of Memgraph. Even though the replication is an Enterprise feature, the files are compatible with the Community version.

Major Features and Improvements

  • Added support for data replication across a cluster of Memgraph instances. Supported instance types are MAIN and REPLICA. Supported replication modes are SYNC (all SYNC REPLICAS have to receive data before the MAIN can commit the transaction), ASYNC (MAIN doesn't care if data is replicated), SYNC WITH TIMEOUT (MAIN will wait for REPLICAS within the given timeout period, after timout, replication isn't aborted but the replication demotes the REPLICA to the ASYNC mode).
  • Added support for query type deduction. Possible query types are r (read), w (write), rw (read-write). The query type is returned as a part of the summary.
  • Improved logging capabilities by introducing granular logging levels. Added new flag, --log-level, which specifies the minimum log level that will be printed. E.g., it's possible to print incoming queries or Bolt server states.
  • Added ability to lock the storage data directory by executing the LOCK DATA DIRECTORY query which delays the deletion of the files contained in the data directory. The data directory can be unlocked again by executing the UNLOCK DATA DIRECTORY query.

Bug Fixes and Other Changes

  • Added cleanup of query executions if not in an explicit transaction.
  • Fix RPC dangling reference.

v1.2.0 - Oct 20, 2020

danger

Breaking Changes

  • SSL is disabled by default (--bolt-cert-file and --bolt-key-file are empty). This change might only affect the client connection configuration.

Major Features and Improvements

  • Added support for Bolt v4.0 and v4.1.
  • Added mgp_networkx.py as an alternative implementation of NetworkX graph objects, which is useful to use Memgraph data from NetworkX algorithms optimally.
  • Added nxalg.py query module as a proxy to NetworkX algorithms.
  • Added plan optimization to use a label-property index where the property is not null. As a result, the query engine, instead of scanning all elements and applying the filter, performs a label-property index lookup when possible.

Bug Fixes and Other Changes

  • Fixed Cypher ID function Null handling. When the ID function receives Null, it will also return Null.
  • Fixed bug that caused random crashes in SSL communication on platforms that use older versions of OpenSSL (< 1.1) by adding proper multi-threading handling.
  • Fix DISCARD message handling. The query is now executed before discarding the results.

v1.1.0 - Jul 1, 2020

Major Features and Improvements

  • Properties in nodes and edges are now stored encoded and compressed. This change significantly reduces memory usage. Depending on the specific dataset, total memory usage can be reduced up to 50%.

  • Added support for rescanning query modules. Previously, the query modules directory was scanned only upon startup. Now it is scanned each time the user requests to load a query module. The functions used to load the query modules were renamed to mg.load() and mg.load_all() (from mg.reload() and mg.reload_all()).

  • Improved execution performance of queries that have an IN list filter by using label+property indices. Example: MATCH (n: Label) WHERE n.property IN [] ...

  • Added support for ANY and NONE openCypher functions. Previously, only ALL and SINGLE functions were implemented.

Bug Fixes and Other Changes

  • Fixed invalid paths returned by variable expansion when the starting node and destination node used the same symbol. Example: MATCH path = (n: Person {name: "John"})-[: KNOWS*]->(n) RETURN path

  • Improved semantics of ALL and SINGLE functions to be consistent with openCypher when handling lists with Null s.

  • SHOW CONSTRAINT INFO now returns property names as a list for unique constraints.

  • Escaped label/property/edgetype names in DUMP DATABASE to support names with spaces in them.

  • Fixed handling of DUMP DATABASE queries in multi-command transactions ( BEGIN, ..., COMMIT).

  • Fixed handling of various query types in explicit transactions. For example, constraints were allowed to be created in multi-command transactions (BEGIN , ..., COMMIT) but that isn't a transactional operation and as such can't be allowed in multi-command transactions.

  • Fixed integer overflow bugs in COUNT, LIMIT and SKIP.

  • Fixed integer overflow bugs in weighted shortest path expansions.

  • Fixed various other integer overflow bugs in query execution.

  • Added Marvel Comic Universe tutorial.

  • Added FootballTransfers tutorial.

v1.0.0 - Apr 3, 2020

Major Features and Improvements

  • [Enterprise Ed.] Exposed authentication username/rolename regex as a flag ( --auth-user-or-role-name-regex).
  • [Enterprise Ed.] Improved auth module error handling and added support for relative paths.
  • Added support for Python query modules. This release of Memgraph supports query modules written using the already existing C API and the new Python API.
  • Added support for unique constraints. The unique constraint is created with a label and one or more properties.
  • Implemented support for importing CSV files (mg_import_csv). The importer is compatible with the Neo4j batch CSV importer.
  • Snapshot and write-ahead log format changed (backward compatible with v0.50).
  • Vertices looked up by their openCypher ID (MATCH (n) WHERE ID(n) = ...) will now find the node in O(logn) instead of O(n).
  • Improved planning of BFS expansion, a faster, specific approach is now favored instead of a ScanAll+Filter operation.
  • Added syntax for limiting memory of CALL.
  • Exposed server name that should be used for Bolt handshake as flag ( --bolt-server-name-for-init).
  • Added several more functions to the query module C API.
  • Implemented a storage locking mechanism that prevents the user from concurrently starting two Memgraph instances with the same data directory.

Bug Fixes and Other Changes

  • [Enterprise Ed.] Fixed a bug that crashed the database when granting privileges to a user.
  • [Enterprise Ed.] Improved Louvain algorithm for community detection.
  • Type of variable expansion is now printed in EXPLAIN (e.g. ExpandVariable, STShortestPath, BFSExpand, WeightedShortestPath).
  • Correctly display CALL in EXPLAIN output.
  • Correctly delimit arguments when printing the signature of a query module.
  • Fixed a planning issue when CALL preceded filtering.
  • Fixed spelling mistakes in the storage durability module.
  • Fixed storage GC indices/constraints subtle race condition.
  • Reduced memory allocations in storage API and indices.
  • Memgraph version is now outputted to stdout when Memgraph is started.
  • Improved RPM packaging.
  • Reduced number of errors reported in production log when loading query modules.
  • Removed early access wording from the Community Offering license.

v0.50.0 - Dec 11, 2019

danger

Breaking Changes

  • [Enterprise Ed.] Remove support for Kafka streams.
  • Snapshot and write-ahead log format changed (not backward compatible).
  • Removed support for unique constraints.
  • Label indices aren't created automatically, create them explicitly instead.
  • Renamed several database flags. Please see the configuration file for a list of current flags.

Major Features and Improvements

  • [Enterprise Ed.] Add support for auth module.
  • [Enterprise Ed.] LDAP support migrated to auth module.
  • Implemented new graph storage engine.
  • Add support for disabling properties on edges.
  • Add support for existence constraints.
  • Add support for custom openCypher procedures using a C API.
  • Support loading query modules implementing read-only procedures.
  • Add CALL <procedure> YIELD <result> syntax for invoking loaded procedures.
  • Add CREATE INDEX ON :Label for creating label indices.
  • Add DROP INDEX ON :Label for dropping label indices.
  • Add DUMP DATABASE clause to openCypher.
  • Add functions for treating character strings as byte strings.

Bug Fixes and Other Changes

  • Fix several memory management bugs.
  • Reduce memory usage in query execution.
  • Fix bug that crashes the database when EXPLAIN is used.

v0.15.0 - Jul 17, 2019

danger

Breaking Changes

  • Snapshot and write-ahead log format changed (not backward compatible).
  • indexInfo() function replaced with SHOW INDEX INFO syntax.
  • Removed support for unique index. Use unique constraints instead.
  • CREATE UNIQUE INDEX ON :label (property) replaced with CREATE CONSTRAINT ON (n:label) ASSERT n.property IS UNIQUE.
  • Changed semantics for COUNTER openCypher function.

Major Features and Improvements

  • [Enterprise Ed.] Add new privilege, STATS for accessing storage info.
  • [Enterprise Ed.] LDAP authentication and authorization support.
  • [Enterprise Ed.] Add audit logging feature.
  • Add multiple properties unique constraint which replace unique indices.
  • Add SHOW STORAGE INFO feature.
  • Add PROFILE clause to openCypher.
  • Add CREATE CONSTRAINT clause to openCypher.
  • Add DROP CONSTRAINT clause to openCypher.
  • Add SHOW CONSTRAINT INFO feature.
  • Add uniformSample function to openCypher.
  • Add regex matching to openCypher.

Bug Fixes and Other Changes

  • Fix bug in query comment parsing.
  • Fix bug in query symbol table.
  • Fix OpenSSL memory leaks.
  • Make authentication case insensitive.
  • Remove COALESCE function.
  • Add movie tutorial.
  • Add backpacking tutorial.

v0.14.1 - Jan 22, 2019

Bug Fixes and Other Changes

  • Fix bug in explicit transaction handling.
  • Fix bug in edge filtering by edge type and destination.

v0.14.0 - Oct 30, 2018

danger

Breaking Changes

  • Write-ahead log format changed (not backward compatible).

Major Features and Improvements

  • [Enterprise Ed.] Reduce memory usage in distributed usage.
  • Add DROP INDEX feature.
  • Improve SSL error messages.

Bug Fixes and Other Changes

  • [Enterprise Ed.] Fix issues with reading and writing in a distributed query.
  • Correctly handle an edge case with unique constraint checks.
  • Fix a minor issue with mg_import_csv.
  • Fix an issue with EXPLAIN.

v0.13.0 - Oct 18, 2018

danger

Breaking Changes

  • Write-ahead log format changed (not backward compatible).
  • Snapshot format changed (not backward compatible).

Major Features and Improvements

  • [Enterprise Ed.] Authentication and authorization support.
  • [Enterprise Ed.] Kafka integration.
  • [Enterprise Ed.] Support dynamic worker addition in distributed.
  • Reduce memory usage and improve overall performance.
  • Add CREATE UNIQUE INDEX clause to openCypher.
  • Add EXPLAIN clause to openCypher.
  • Add inDegree and outDegree functions to openCypher.
  • Improve BFS performance when both endpoints are known.
  • Add new node-label, relationship-type and quote options to mg_import_csv tool.
  • Reduce memory usage of mg_import_csv.

Bug Fixes and Other Changes

  • [Enterprise Ed.] Fix an edge case in distributed index creation.
  • [Enterprise Ed.] Fix issues with Cartesian in distributed queries.
  • Correctly handle large messages in Bolt protocol.
  • Fix issues when handling explicitly started transactions in queries.
  • Allow openCypher keywords to be used as variable names.
  • Revise and make user visible error messages consistent.
  • Improve aborting time consuming execution.

v0.12.0 - Jul 4, 2018

danger

Breaking Changes

  • Snapshot format changed (not backward compatible).

Major Features and Improvements

  • Improved Id Cypher function.
  • Added string functions to openCypher (lTrim, left, rTrim, replace, reverse, right, split, substring, toLower, toUpper, trim ).
  • Added timestamp function to openCypher.
  • Added support for dynamic property access with [] operator.

v0.11.0 - Jun 20, 2018

Major Features and Improvements

  • [Enterprise Ed.] Improve Cartesian support in distributed queries.
  • [Enterprise Ed.] Improve distributed execution of BFS.
  • [Enterprise Ed.] Dynamic graph partitioner added.
  • Static nodes/edges id generators exposed through the Id Cypher function.
  • Properties on disk added.
  • Telemetry added.
  • SSL support added.
  • toString function added.

Bug Fixes and Other Changes

  • Document issues with Docker on OS X.
  • Add BFS and Dijkstra's algorithm examples to documentation.

v0.10.0 - Apr 24, 2018

danger

Breaking Changes

  • Snapshot format changed (not backward compatible).

Major Features and Improvements

  • [Enterprise Ed.] Distributed storage and execution.
  • reduce and single functions added to openCypher.
  • wShortest edge expansion added to openCypher.
  • Support packaging RPM on CentOS 7.

Bug Fixes and Other Changes

  • Report an error if updating a deleted element.
  • Log an error if reading info on available memory fails.
  • Fix a bug when MATCH would stop matching if a result was empty, but later results still contain data to be matched. The simplest case of this was the query: UNWIND [1, 2, 3] AS x MATCH (n: Label {prop: x}) RETURN n. If there was no node (: Label {prop: 1}), then the MATCH wouldn't even try to find for x being 2 or 3.
  • Report an error if trying to compare a property value with something that cannot be stored in a property.
  • Fix crashes in some obscure cases.
  • Commit log automatically garbage collected.
  • Add minor performance improvements.

v0.9.0 - Dec 18, 2017

danger

Breaking Changes

  • Snapshot format changed (not backward compatible).
  • Snapshot configuration flags changed, general durability flags added.

Major Features and Improvements

  • Write-ahead log added.
  • nodes and relationships functions added.
  • UNION and UNION ALL is implemented.
  • Concurrent index creation is now enabled.

Bug Fixes and Other Changes

v0.8.0

Major Features and Improvements

  • CASE construct (without aggregations).
  • Named path support added.
  • Maps can now be stored as node/edge properties.
  • Map indexing supported.
  • rand function added.
  • assert function added.
  • counter and counterSet functions added.
  • indexInfo function added.
  • collect aggregation now supports Map collection.
  • Changed the BFS syntax.

Bug Fixes and Other Changes

  • Use \u to specify 4 digit codepoint and \U for 8 digit
  • Keywords appearing in header (named expressions) keep original case.
  • Our Bolt protocol implementation is now completely compatible with the protocol version 1 specification. (https://boltprotocol.org/v1/)
  • Added a log warning when running out of memory and the memory_warning_threshold flag
  • Edges are no longer additionally filtered after expansion.

v0.7.0

Major Features and Improvements

  • Variable length path MATCH.
  • Explicitly started transactions (multi-query transactions).
  • Map literal.
  • Query parameters (except for parameters in place of property maps).
  • all function in openCypher.
  • degree function in openCypher.
  • User specified transaction execution timeout.

Bug Fixes and Other Changes

  • Concurrent BUILD INDEX deadlock now returns an error to the client.
  • A MATCH preceeded by OPTIONAL MATCH expansion inconsistencies.
  • High concurrency Antlr parsing bug.
  • Indexing improvements.
  • Query stripping and caching speedups.

v0.6.0

Major Features and Improvements

  • AST caching.
  • Label + property index support.
  • Different logging setup & format.

v0.5.0

Major Features and Improvements

  • Use label indexes to speed up querying.
  • Generate multiple query plans and use the cost estimator to select the best.
  • Snapshots & Recovery.
  • Abandon old yaml configuration and migrate to gflags.
  • Query stripping & AST caching support.

Bug Fixes and Other Changes

  • Fixed race condition in MVCC. Hints exp+aborted race condition prevented.
  • Fixed conceptual bug in MVCC GC. Evaluate old records w.r.t. the oldest. transaction's id AND snapshot.
  • User friendly error messages thrown from the query engine.

Build 837

Bug Fixes and Other Changes

  • List indexing supported with preceeding IN (for example in query RETURN 1 IN [[1, 2]][0]).

Build 825

Major Features and Improvements

  • RETURN , count(), OPTIONAL MATCH, UNWIND, DISTINCT (except DISTINCT in aggregate functions), list indexing and slicing, escaped labels, IN LIST operator, range function.

Bug Fixes and Other Changes

  • TCP_NODELAY -> import should be faster.
  • Clear hint bits.

Build 783

Major Features and Improvements

  • SKIP, LIMIT, ORDER BY.
  • Math functions.
  • Initial support for MERGE clause.

Bug Fixes and Other Changes

  • Unhandled Lock Timeout Exception.