Memgraph Versions Save

Open-source graph database, tuned for dynamic analytics environments. Easy to adopt, scale and own.

v2.16.0

1 month ago

Memgraph v2.16.0 - Apr 10, 2024

New features and improvements

  • Added a new command, DROP GRAPH, that deletes data in the database in an efficient manner. #1723
  • Fixed a bug that caused the incorrect coordinator to become the leader due to missing cluster state data. #1897
  • Added support for edge type indices to optimize query performance on graphs. #1542
  • Added automatic index creation for node labels and edge types. Two new configuration flags control this feature for labels and edge-types automatically encountered by the database. #1841
  • Added support for bolt+routing when connecting to a cluster of Memgraph instances. #1796
  • Expanded the min() and max() functions to support temporal types, improving date and time manipulation capabilities. #1790
  • Renamed HA flags --raft-server-id to --coordinator-id, --raft-server-port to --coordinator-port, --coordinator-server-port to --management-port to improve cluster setup. #1820 - Reduced the size of the Delta from 80B to 56B #1747
  • Extended the C/C++ API to support query execution. #1773
  • Updated queries used for registering replication instances and coordinator instances. #1809
  • ¸Introduced the lock on operations such as SETTING INSTANCE to MAIN, REGISTER INSTANCE, UNREGISTER INSTANCE, and FAILOVER for better control of the cluster state. #1819
  • When doing failover, the Coordinator chooses a new MAIN by comparing which memgraph database is up-to-date. #1729
  • Changing instance's replication role is now backed by Raft. #1728
  • If REPLICA diverges from MAIN, MAIN will automatically initiate a forced data reset on REPLICA. #1777
  • User can create, set, or remove labels using property values. #1762
  • Introduced the ability to fetch edges based on edge ID. #1808
  • Added support for pattern comprehensions when used in WITH and RETURN clauses. #1827 #1874 #1903
  • Introduced a force reset feature to revert the cluster to its pre-operation state in case of failure. #1836

Bug fixes

  • Added an early exit when doing OR filter expressions if the first expression evaluates to true. #1738
  • Configuration settings are now properly verified to ensure that periodic snapshots are only taken when appropriate. #1835
  • Improved replication stability in high-availability (HA) clusters to handle situations where the REPLICA node is several epochs or commits behind the MAIN node. #1743
  • Fixed a bug that could occur when shutting down the Raft server. Initializing Memgraph enterprise instance without specifying any flag used in high-availability is now allowed. #1823
  • Query allocations now use a single allocation subsystem rather than two. Memory no longer horded by bolt workers. #1801
  • The schema.node_type_properties() and schema.rel_type_properties() functions now work as equivalents to Neo4j's functions. #1718
  • Merging node or edge with null property now raises an error. #1810
  • When adding coordinators in cluster, action will fully succeed or fail before coordinators returns result from query. #1792
  • Fixed a bug responsible for the incorrect edge count when a graph was dropped using DROP GRAPH. Now, accurate edge counts are displayed in the SHOW STORAGE INFO output. #1921

v2.15.2

1 month ago

Memgraph v2.15.2 - Apr 7, 2024

Bug fixes

  • Fixed wrong text search module name. #1900

v2.15.1

1 month ago

Memgraph v2.15.1 - Mar 27, 2024

New features and improvements

  • Introduced a new flag, storage-delta-on-identical-property-update, which allows for the optional creation of a delta object when a property is updated with the same value. #1791

  • Added durable text indices and [basic text search](/configuration/text-search capabilities. #1603 #1739

  • Removed support for Debian 10, Fedora 36, Ubutnu 18.04. Added support for Debian 12, Debian 12 ARM, Fedora 38, Fedora 39 and Rocky 9.3 Linux distributions #1814

Bug fixes

  • Resolved an issue where snapshot and GC operations would block the initiation of new transactions. #1759

  • Reading/writing snapshots on coordinators now works as expected. #1788

v2.15.0

2 months ago

Memgraph v2.15.0 - Feb 28, 2024

New features and improvements

  • Enhanced security by integrating a password hashing algorithm into authentication durability mechanisms, alongside existing password hashes. Passwords hashed with SHA-256 will be rehashed with salt upon validation for improved security. #1644

  • Introduced a function to calculate the size of properties (in bytes) within Memgraph storage. #1557

  • The process of demoting old MAIN to REPLICA should eventually succeed fully without any issues. 1711

  • The coordinator now aligns REPLICA to consistently listen to the correct MAIN. 1711

  • Updated the way that Better auth user/role handling. #1699

  • Improved memory handling of Deltas. The value for Deltas is changed from 104B to 80B. #1688

  • Added support for query parameters in LOAD CSV. This enhancement allows users to dynamically specify file paths in the LOAD CSV clause. Executing queries like LOAD CSV FROM $file AS row CREATE (:Node { column: row[0] }); is now possible, where $file is a variable representing a valid path to a CSV file. #1653

  • Added support for query parameters in RETURN LIMIT. Users can now specify the limit in a RETURN statement through a parameter, such as MATCH (n) RETURN n LIMIT $limit;. This addition makes it easier to dynamically adjust the number of results returned by a query. #1654

  • [Enterprise Ed.] Introduced an experimental feature flag for system replication (--experimental=system-replication). This new flag enables both authentication and multi-tenancy replication. #1702

  • Introduced enhancements for multi-tenancy support. The new SHOW DATABASE; command reveals the currently used database, returning NULL if none is active. SHOW DATABASES; has been updated to display only the existing set of multitenant databases. #1550

  • When using replication, flag --replication-restore-state-on-startup needs to be set to true. #1707

  • Introduced enhancements for multi-tenancy support. The new SHOW DATABASE; command reveals the currently used database, returning NULL if none is active. SHOW DATABASES; has been updated to display only the existing set of multitenant (MT) databases. #1550

  • REPLICAs are now configured to listen exclusively to a single MAIN instance. In high availability (HA) setups, the coordinator now manages the assignment of REPLICA instances. For configurations using replication without HA, the MAIN instance directly communicates its ID to each REPLICA. #1674

  • Added coordinator instance for managing HA cluster. #1608

  • Added support for restart of replication instances. MAIN can restart as MAIN and as REPLICA depending on the cluster state in the moment of restart. REPLICA always stays REPLICA. #1672

  • Added automatic failover from a single coordinator. #1646

  • Added flags --raft-server-id and --raft-server-port for creating coordinators. #1687

  • When using an authentication module, the module needs to return. That role is the only way to define privileges for the connection. Improved the authentication module with better user and role handling mechanisms. Key enhancements include:

  • Elimination of automatic user creation by the auth module - Introduction of checks to determine the presence of users or the use of an auth module before proceeding

    • Support for roles with database access
    • The authenticate() function now returns a user or role - When an auth module is in use, no data is locally saved
    • AuthChecker now generates QueryUser (user or role), which is responsible for actual authorization checks
    • Deprecated the following configuration flags: --auth-module-create-missing-user, --auth-module-create-missing-role, --auth-module-manage-roles #1699

Bug fixes

  • Fixed an issue with the memory tracker not accurately counting memory usage after exceeding the memory limit. - #1651

  • Resolved an issue that led to a crash when an unbound variable was used inside a subquery. - #1710

  • Fixed deadlocks in jemalloc caused by the memory tracker. - #1715

  • Fixed an issue in the Breadth-First Search (BFS) expansion process where the path was not correctly restored to its previous state after expansion, unless it was modified. The path is now appropriately shrunk and the state is restored to its prior condition only when changes have occurred. - #1745

v2.14.1

2 months ago

Memgraph v2.14.1 - Feb 16, 2024

Bug fixes

  • Fixed an issue with accumulated path evaluation affecting built-in algorithms:
    • Depth-first search (DFS)
    • Breadth-first search (BFS)
    • Weighted shortest path (WSP)
    • All shortest paths (ASP). #1642

v2.14.0

3 months ago

Memgraph v2.14.0 - Jan 22, 2024

New features and improvements

Bug fixes

  • The --storage-mode configuration flag now works as expected. #1609
  • Memgraph returns an error instead of crashing when trying to execute the SHOW STORAGE INFO; query without the required permission. #1566
  • Memgraph returns an error instead of crashing when aborting a transaction due to lack of memory. #1589
  • REPLICA timestamp is now correctly propagated. #1615
  • Index hinting now works as expected. #1606
  • Using the path identifier from the CREATE clause in other parts of the query will no longer crash the database. For example, the following query will execute successfully:
CREATE p0=()-[:T0]->() 
MERGE ({k:(size(p0))}) 
RETURN 1;

#1629

v2.13.0

5 months ago

Memgraph v2.13.0 - Dec 8, 2023

New features and improvements

  • Now you can check information about node labels and edge types by running the schema-related queries SHOW NODE_LABELS INFO; and SHOW EDGE_TYPES INFO;. #1466
  • Existence and unique constraints can now also be recovered in parallel, just like indexes. To enable this behaviour, set the storage-parallel-schema-recovery configuration flag to true. As the new configuration flag includes the constraints, the storage-parallel-index-recovery has been deprecated. #1545
  • Now you can assert indexes and constraints using the schema.assert() procedure. #1485
  • Improved the logic when checking the exist() statements within the WHERE clause in order to improve performance. #1539
  • The filter information message of EXPLAIN and PROFILE queries displays the exact filtering in the filter expression. #1481
  • When the weight lambda of Weighted Shortest Path and All Shortest Paths algoritms uses node properties, it will include all nodes of the path, even the start and end nodes. Also it's possible to mix node and relationships properties, by coalescing the relationship property in the weight lambda. #1434
  • There have been changes to mgp.hpp method in the C++ API. #1536

Bug fixes

  • If results of aggregation functions are returned grouped or if there is no input to aggregate over, rather than returing 0 or empty together with NULL, the functions won't return anything. #1531
  • If the initialisation CYPHERL file passed using the --init-file configuration flag tries to create a user that already exists, the exception will be caught and Memgraph will start successfully. #1465
  • All deleted relationships are now correctly replicated to REPLICA instances. Also, replication failures no longer prevent MAIN to write into WAL files. #1540
  • The cartesian evaluation of three MATCH clauses no longer uses sequential scanning, thus improving the performance of such queries. #1555
  • A bug was fixed that would MATCH and RETURN wrong grouped aggregations. #1518
  • Memgraph no longer throws a "Failed deallocation" error when working with the migrate query module. #1492
  • The C, C++ and Python APIs have been extended with functions to check what storage mode is being used and whether graph elements (or lists/maps thereof) have been deleted. They allow the proper handling of deleted return values or query procedures and functions ran in the in-memory analytical storage mode are now properly handled.#1395
  • A bug was fixed where Memgraph would send a success message to clients before certain database operations were executed successfully. #1556

v2.12.1

5 months ago

Memgraph v2.12.1 - Nov 17, 2023

New features and improvements

  • Cached query plans are no longer saved during the time interval defined by the --query-plan-cache-ttl, rather they are cached by count. You can set the maximum number of cached query plans using the --query-plan-cache-max-size configuration flag. By deafult, the maximum number of cached query plans is 1000. This change has been made to reduce the memory usage of queries with MERGE queries and variables. #1348
  • Procedures are no longer limited to 100 MB. They can use unlimited resources. If you want to limit memory usage of procedures add PROCEDURE MEMORY LIMIT 100 KB after calling a procedure and before yielding results. #1506
  • The SHOW STORAGE INFO; query now returns the non-swapped physical RAM memory a task has used (as reported by the operating system) as memory_res, not memory_usage. memory allocated has been replaced with memory_tracked, and it still defines the amount of RAM allocated in the system and tracked by Memgraph. The query also returns the number of memory-mapped areas that the kernel allows a process to have as vm_max_map_count. #1408 #1426
  • Now you can delete all nodes and relationships on a path by using the following DETACH DELETE syntax: MATCH p = (:X)-->()-->()-->() DETACH DELETE p;. #1383
  • After recovery, the logs show which indexes and constraints have been recovered. #1480
  • Information about using custom memory resources for handling memory when running has been removed from the logs as it's unecessary. #1452
  • All the memory allocated inside a procedure is tracked in order to notify when limits are reached. #1443
  • date and localTime can now be extracted from LocalDateTime data type. #1381

Bug fixes

  • Query modules schema and convert that had been moved from MAGE library to Memgraph now load properly and work as expected #1490
  • Instead of crashing the database, using the exists() function with any clause other than WHERE throws an exception. #1392 #1382
  • The MEMORY QUERY LIMIT queries now respect the memory limit as expected. #1468
  • Queries using indexed join no longer crash. #1478
  • Indexes can now be loaded in parallel as expected. #1479
  • The collect function, when called on an empty list, now yields no results instead of returning NULL. #1482
  • Using the WHERE and IN subclauses with lists now works as expected. #1494
  • The hash join executes as expected when using WHERE subclause. #1496
  • When encountering corrupted snapshot and WAL files during recovery, Memgraph now deletes them. #1385
  • The snapshot thread is now stopped when switching from IN_MEMORY_TRANSACTIONAL to IN_MEMORY_ANALYTICAL storage mode. Before, the snapshot thread was left running in the ANALYTICAL mode although it was unnecessary. #1385
  • When setting properties to all nodes at once using the SET subclause via client library, the number of set properties is returned as expected. #1460
  • Passing a variable that contains a list to the BFS algorithm now returns a results instead of an exception. #1380
  • Upon deleting data, garbage collector deallocates memory as expected. #1471
  • If you call a procedure that works on multiple threads and they pass the memory allocation limit, an exception will be thrown. Until now RAM suffered in silence. #1401

v2.12.0

6 months ago

v2.12 - Nov 1, 2023

New features and improvements

  • Snapshot and WAL files version have been updated. Snapshot and WAL files created with Memgraph v2.12 and higher won't be usable in previous versions of Memgraph (v2.11.1 and lower). #1281
  • Memgraph can now start the instance in any storage mode, defined by the --storage-mode configuration flag.
  • The SHOW STORAGE INFO; query now returns memory allocations in B, KiB, MiB, GiB or TiB, rather than just B to make the information easily readable.#1366
  • Client libraries you can use to connect to Memgraph are now able to retry the queries in order to complete the transactions successfully. #1361
  • Information about the graph after running the ANALYZE GRAPH; is now persistent between instance reruns. #1281
  • Now, you can employ index hints to fine-tune the planner behavior. #1345
  • In certain situations, Memgraph returns a hint to create indexes to speed up read queries. #1343
  • The SHOW INDEX INFO; now also returns the information about the number of assigned indexes. #1229
  • Now, you can register REPLICA instances using DNS names. #1323
  • You can now use keys() and values() functions to get a list of keys and values of a map.#1246
  • You can now use schema procedures to get information about nodes and relationships or convert.str2object() function to convert strings to objects using Python's json.dumps function. #1384
  • In your custom query modules, you can now remove the last element of a path in C++ API using path.Pop(), C API using mgp_path_pop and Python API using path.pop(). #1249
  • KeyExists function that checks the existance of a key in a map has been added to the C++ API.#1336
  • You can now change the relationship type using mgp::Graph::ChangeType in C++ API and mgp::graph_edge_change_type in C API. #1364
  • Reading of nodes stored on disk is now 2x faster. #1266
  • Searching for relationships stored on disk is now faster due to the ability to expand from a single node, rather than searching through all relationships.#1335
  • Due to several smaller improvements, Memgraph uses less memory and the garbage collection is more efficient. #1387
  • The query inspection report using EXPLAIN and PROFILE clauses now provides information about the operands of the Filter operator. #1265
  • Queries that have multiple MATCH clauses and the results are joined in aWHERE clause now execute more efficiently, due to the to the new HashJoin operator. #1226
  • The new Cartesian product operator optimizes queries that match nodes without relationship. #1193
  • Filtering and producing expressions in WITH and FILTER clauses have been optimized by adding cache. #1432
  • The verification of unique and existence constraints has been optimized. Constraints are now verified only when updating node labels or properties, as updates on relationships do not influence constraints. #1341

Bug fixes

  • The DISTINCT clause no longer influences other aggregates, that is, shows distinct values as exepcted. #1235
  • Any attempt to change the isolation level in in-memory analytical and on-disk storage mode will throw an exception. #1367
  • A bug that would cause the memory limit not to be honored has been fixed. #1250
  • The SHOW CONFIG; query now shows the correct values for the configuration settings, even if they were changed during runtime. #1278
  • Procedure names of the key:value pairs mapped in a JSON file no longer need to be identical to be correctly mapped. #1252
  • There are no longer data discrepancies between a REPLICA instance which is syncin with a new MAIN instance that became MAIN by being upgraded from the REPLICA role. #1370
  • A bug has been fixed which would shut down Memgraph when fetching data from SQL database. #1299
  • When setting a memory limit using --memory-limit config flag, Memgraph now stops the transactions exceeding the limit as expected. #1250 #1340
  • Memgraph now throws an exception when its out of memory, insted of not reporting an issue. #1379

v2.11.0

8 months ago

v2.11 - Sep 13, 2023

New features and improvements

  • The following configurational settings can now be changed during runtime: server name, query execution timeout, log level and the option to log to stderr. Use the following queries to set the configuration:
    SET DATABASE SETTING 'server.name' TO 'new-name';
    SET DATABASE SETTING 'query.timeout' TO '100';
    SET DATABASE SETTING 'log.level' TO 'TRACE';
    SET DATABASE SETTING 'log.to_stderr' TO 'true`;
    
    #1183
  • The default value of --bolt-server-name-for-init is now Neo4j/v5.11.0 compatible graph database server - Memgraph. #1183
  • When working at a snapshot isolation level, if a certain graph object is changed multiple times as a part of one of many parallel transactions, the delta chain tracking its changes becomes very long. Every other parallel transaction dependent on that object needs to access and process that delta chain to get its correct state, which can be very expensive regarding CPU usage. Now, Memgraph is caching delta chains of 128 or more changes that need to be frequently accessed, which eliminates the need of processing the chain and improves performance. If you would benefit from changing at what length the delta chain should be cashed, adjust the value of the --delta-chain-cache-threshold configuration flag. #1124
  • During recovery from a snapshot, the recovery of each graph object or property is no longer logged in the TRACE setting. The log now only indicates the recovery progress. #1054
  • Updating indices and constraints has been streamlined, significantly improving execution time for everybody making heavy use of them. #1159 #1142
  • Queries that build maps with multiple same-variable property lookups have been optimized. #1168
  • The batch update of properties improves performance when setting a large number of properties, as in this example:
    FOREACH (i in range(0, 1000000) | CREATE (n:Label {id:i}));                              
    
    CREATE INDEX ON :Label(id);                                                              
    
    FOREACH (i IN range(0, 1000000, 3) | MERGE (n:Label {id:i}) SET n += {prop2:"a1", prop3:"b2", prop4:"c3", prop5:"d4", prop6:"e5", prop7:"f6", prop8:"g7", prop9:"h8", prop10:"i9", prop11:"j10 q"});
    
    #1115
  • Setting properties is also improved by caching mappings of property name to internal property id. #1147
  • Performance has been improved for concurrent operations contending on the same node. #1187
  • When a query is executing in many iterations over the graph entities, the performance has been improved by 100% due to faster scanning of nodes, for example:
    UNWIND RANGE (1, 500) AS i CREATE ();
    MATCH (),(),() RETURN COUNT(*);
    
    #1127
  • The query engine is more performant as at all times it is scanning and expanding nodes instead of scanning both source and destination nodes and then expanding to the relationship between them. #1085
  • The expansion of node is no longer only done from left to right. Depending on the previous executions and how many relationships needed to be check on MERGE, the engine knows the fewest vector necessary to expand. #1110
  • Users can now call ToString() method on mgp::Value and Memgraph's data types when writing query modules using C++ API. #1140
  • Trigger functions can now access deleted vertices from deleted edge when processed. #1209
  • When developing query modules using C++ API, you can now get the In and Out degrees of a node in O(1) time complexity. #1217
  • The C++ API now enables you to change relationship start (from) and end (to) nodes with mgp::Graph.SetFrom and mgp::Graph.SetTo methods.
  • SHOW INDEX INFO now displays index information in alphabetic order for easier orientation. #1178
  • The performance of DETACH DELETE query has been improved. #1078
  • The PROFILE query now generates a table with operators in the same order as in the plan constructed with the EXPLAIN query. #1024
  • The import of relationships in on-disk storage mode can be improved by switching to READ ONLY VERTEX MODE;. #1157.

Bug fixes

  • When projecting a map from a variable that happens to be null, the projection will have a null value instead of displaying an error. #1119
  • When using the C++ API you can now construct std::set of values (find unique values) by iterating over mgp::List as expected, and successfully perform any other operations dependent on the STL container requirements. #1210
  • The mgp::DispatcherGuard also works as expected now. #1225