diff --git a/_config.yml b/_config.yml index efccb88..5d24ba5 100644 --- a/_config.yml +++ b/_config.yml @@ -1,6 +1,7 @@ -remote_theme: just-the-docs/just-the-docs +remote_theme: just-the-docs/just-the-docs@v0.10.0 title: FalkorDB Docs description: The FalkorDB documentation +url: "https://docs.falkordb.com" logo: "/images/falkor-logo.png" logo_link: "https://www.falkordb.com" favicon_ico: "/images/favicon.ico" @@ -11,9 +12,9 @@ color_scheme: dark aux_links: "Docs Repository": - - "//github.com/falkordb/docs" + - "https://github.com/falkordb/docs" "FalkorDB Repository": - - "//github.com/falkordb/falkordb" + - "https://github.com/falkordb/falkordb" # Makes Aux links open in a new tab. Default is false @@ -25,10 +26,18 @@ nav_enabled: true plugins: - jekyll-sitemap - jekyll-redirect-from + - jekyll-seo-tag + +exclude: + - README.md + - Gemfile + - Gemfile.lock + - node_modules + - vendor # Footer last edited timestamp -last_edit_timestamp: true -last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/stdlib-2.7.0/libdoc/time/rdoc/Time.html +last_edit_timestamp: true +last_edit_time_format: "%b %e %Y at %I:%M %p" # uses ruby's time format: https://ruby-doc.org/core/Time.html # Footer "Edit this page on GitHub" link text gh_edit_link: true diff --git a/cloud/features.md b/cloud/features.md index 72f8617..d5f4801 100644 --- a/cloud/features.md +++ b/cloud/features.md @@ -55,9 +55,27 @@ FalkorDB persists data through regular snapshots and transaction logs. These mec ## Graph Browser You can connect to the falkordb browser (integrated into your web browser) from the cloud console. The browser allows visualizing query results, allows you to traverse the graph and more. Multi Graph support is enabled by default in the browser which simplifies navigation and data management. -### Solution Architecture +## Solution Architecture Solution architecture support helps you design how FalkorDB integrates with your broader application infrastructure. This guidance covers connection patterns, data modeling approaches, and best practices for specific use cases. Teams building complex systems benefit from architectural advice to avoid common pitfalls and optimize their graph database implementation. Poor architectural decisions early in development create technical debt that becomes expensive to fix later. Architecture consultations provide recommendations on graph schema design, query optimization strategies, and integration patterns that match your application requirements. + +## Graph Access Control +_Documentation pending_ + +## Cluster Deployment +_Documentation pending_ + +## High Availability +_Documentation pending_ + +## Multi-zone Deployment +_Documentation pending_ + +## Automated Backups +_Documentation pending_ + +## Advanced Monitoring +_Documentation pending_ diff --git a/cloud/free-tier.md b/cloud/free-tier.md index 888e902..c371759 100644 --- a/cloud/free-tier.md +++ b/cloud/free-tier.md @@ -33,7 +33,7 @@ The free tier provides everything you need to explore FalkorDB and build initial | **Cloud Providers** | AWS, GCP | AWS, GCP | AWS, GCP | AWS, GCP, Azure | | **Call-to-Action** | [Sign up](https://app.falkordb.cloud/signup) | [Sign up](https://app.falkordb.cloud/signup) | [Sign up](https://app.falkordb.cloud/signup) | [Contact Us](mailto:info@falkordb.com) | -#### Terms +## Terms > ⚠️ Free instances that aren't utilized for 1 day will be stopped, and deleted after 7 days. Need an extension? Speak to [sales](https://www.falkordb.com/get-a-demo/) diff --git a/commands/index.md b/commands/index.md index e43a16c..b09250c 100644 --- a/commands/index.md +++ b/commands/index.md @@ -9,7 +9,7 @@ has_children: true ## FalkorDB Features -FalkorDB exposes graph database functionality within Redis using the [openCypher](https://opencypher.org/) query language. Its basic commands accept openCypher queries, while additional commands are exposed for configuration or metadata retrieval. +FalkorDB is a graph database that exposes its functionality using the [openCypher](https://opencypher.org/) query language. Its basic commands accept openCypher queries, while additional commands are exposed for configuration or metadata retrieval. ## FalkorDB API diff --git a/cypher/call.md b/cypher/call.md index 2632c3d..1584784 100644 --- a/cypher/call.md +++ b/cypher/call.md @@ -4,6 +4,9 @@ nav_order: 16 description: > The CALL {} (subquery) clause allows local execution of subqueries, which opens the door for many comfortable and efficient actions on a graph. parent: "Cypher Language" +redirect_from: + - /cypher/call.html + - /cypher/call --- # CALL \{\} diff --git a/cypher/foreach.md b/cypher/foreach.md index 66b2b0f..9df3077 100644 --- a/cypher/foreach.md +++ b/cypher/foreach.md @@ -4,6 +4,9 @@ nav_order: 15 description: > The FOREACH clause feeds the components of a list to a sub-query comprised of updating clauses only parent: "Cypher Language" +redirect_from: + - /cypher/foreach.html + - /cypher/foreach --- # FOREACH diff --git a/cypher/limit.md b/cypher/limit.md index 4e81311..826a54b 100644 --- a/cypher/limit.md +++ b/cypher/limit.md @@ -4,6 +4,9 @@ nav_order: 7 description: > Can use the limit clause to limit the number of records returned by a query parent: "Cypher Language" +redirect_from: + - /cypher/limit.html + - /cypher/limit --- # LIMIT diff --git a/cypher/match.md b/cypher/match.md index 6976a83..17a1a48 100644 --- a/cypher/match.md +++ b/cypher/match.md @@ -4,6 +4,9 @@ nav_order: 1 description: > Match describes the relationship between queried entities, using ascii art to represent pattern(s) to match against. parent: "Cypher Language" +redirect_from: + - /cypher/match.html + - /cypher/match --- # MATCH diff --git a/cypher/merge.md b/cypher/merge.md index 55446e3..e4850dd 100644 --- a/cypher/merge.md +++ b/cypher/merge.md @@ -4,6 +4,9 @@ nav_order: 11 description: > The MERGE clause ensures that a path exists in the graph (either the path already exists, or it needs to be created). parent: "Cypher Language" +redirect_from: + - /cypher/merge.html + - /cypher/merge --- # MERGE diff --git a/cypher/procedures.md b/cypher/procedures.md index 2977118..335efc7 100644 --- a/cypher/procedures.md +++ b/cypher/procedures.md @@ -4,6 +4,9 @@ nav_order: 19 description: > Calling procedures using CALL and YIELD. parent: "Cypher Language" +redirect_from: + - /cypher/procedures.html + - /cypher/procedures --- # Procedures diff --git a/cypher/remove.md b/cypher/remove.md index 86bb5ae..325cf30 100644 --- a/cypher/remove.md +++ b/cypher/remove.md @@ -5,6 +5,9 @@ description: > REMOVE is used to remove attributes from node and relationships, in addition to removing labels from nodes. parent: "Cypher Language" +redirect_from: + - /cypher/remove.html + - /cypher/remove --- # REMOVE diff --git a/cypher/set.md b/cypher/set.md index 6b7256a..21f5067 100644 --- a/cypher/set.md +++ b/cypher/set.md @@ -4,6 +4,9 @@ nav_order: 10 description: > SET is used to create or update properties on nodes and relationships. parent: "Cypher Language" +redirect_from: + - /cypher/set.html + - /cypher/set --- # SET diff --git a/cypher/skip.md b/cypher/skip.md index aba51ea..73f34bf 100644 --- a/cypher/skip.md +++ b/cypher/skip.md @@ -4,6 +4,9 @@ nav_order: 6 description: > The optional skip clause allows a specified number of records to be omitted from the result set. parent: "Cypher Language" +redirect_from: + - /cypher/skip.html + - /cypher/skip --- # SKIP diff --git a/cypher/unwind.md b/cypher/unwind.md index c474e29..670ac43 100644 --- a/cypher/unwind.md +++ b/cypher/unwind.md @@ -4,6 +4,9 @@ nav_order: 14 description: > The UNWIND clause breaks down a given list into a sequence of records; each contains a single element in the list. parent: "Cypher Language" +redirect_from: + - /cypher/unwind.html + - /cypher/unwind --- # UNWIND diff --git a/cypher/where.md b/cypher/where.md index d0860ef..c549f5b 100644 --- a/cypher/where.md +++ b/cypher/where.md @@ -4,6 +4,9 @@ nav_order: 3 description: > Optional clause used to filter results based on predicates. parent: "Cypher Language" +redirect_from: + - /cypher/where.html + - /cypher/where --- # WHERE diff --git a/cypher/with.md b/cypher/with.md index 2bacb05..7ad6b30 100644 --- a/cypher/with.md +++ b/cypher/with.md @@ -4,6 +4,9 @@ nav_order: 12 description: > The WITH clause allows parts of queries to be independently executed and have their results handled uniquely. parent: "Cypher Language" +redirect_from: + - /cypher/with.html + - /cypher/with --- # WITH diff --git a/design/client-spec.md b/design/client-spec.md index c8cfdaa..fb01ca5 100644 --- a/design/client-spec.md +++ b/design/client-spec.md @@ -36,9 +36,9 @@ Instructions on how to efficiently convert these IDs in the [Procedure Calls](#p Additionally, two enums are exposed: -[ColumnType](https://github.com/FalkorDB/FalkorDB/blob/ff108d7e21061025166a35d29be1a1cb5bac6d55/src/resultset/formatters/resultset_formatter.h#L14-L19), which as of v2.1.0 will always be `COLUMN_SCALAR`. This enum is retained for backwards compatibility, and may be ignored by the client unless versions older than v2.1.0 must be supported. +[ColumnType](https://github.com/FalkorDB/FalkorDB/blob/master/src/resultset/formatters/resultset_formatter.h) enum, which as of v2.1.0 will always be `COLUMN_SCALAR`. This enum is retained for backwards compatibility, and may be ignored by the client unless versions older than v2.1.0 must be supported. -[ValueType](https://github.com/FalkorDB/FalkorDB/blob/ff108d7e21061025166a35d29be1a1cb5bac6d55/src/resultset/formatters/resultset_formatter.h#L21-L28) indicates the data type (such as Node, integer, or string) of each returned value. Each value is emitted as a 2-array, with this enum in the first position and the actual value in the second. Each property on a graph entity also has a scalar as its value, so this construction is nested in each value of the properties array when a column contains a node or relationship. +[ValueType](https://github.com/FalkorDB/FalkorDB/blob/master/src/resultset/formatters/resultset_formatter.h) enum indicates the data type (such as Node, integer, or string) of each returned value. Each value is emitted as a 2-array, with this enum in the first position and the actual value in the second. Each property on a graph entity also has a scalar as its value, so this construction is nested in each value of the properties array when a column contains a node or relationship. ## Decoding the result set @@ -155,7 +155,7 @@ Each is emitted as a 2-array: 2) column name (string) ``` -The first element is the [ColumnType enum](https://github.com/FalkorDB/FalkorDB/blob/master/src/resultset/formatters/resultset_formatter.h#L14-L19), which as of RedisGraph v2.1.0 will always be `COLUMN_SCALAR`. This element is retained for backwards compatibility, and may be ignored by the client unless RedisGraph versions older than v2.1.0 must be supported. +The first element is the [ColumnType enum](https://github.com/FalkorDB/FalkorDB/blob/master/src/resultset/formatters/resultset_formatter.h), which as of FalkorDB v2.1.0 will always be `COLUMN_SCALAR`. This element is retained for backwards compatibility, and may be ignored by the client unless FalkorDB versions older than v2.1.0 must be supported. ### Reading result rows @@ -184,12 +184,12 @@ Our query produced one row of results with 3 columns (as described by the header Each element is emitted as a 2-array - [`ValueType`, value]. -It is the client's responsibility to store the [ValueType enum](https://github.com/FalkorDB/FalkorDB/blob/master/src/resultset/formatters/resultset_formatter.h#L21-L28). FalkorDB guarantees that this enum may be extended in the future, but the existing values will not be altered. +It is the client's responsibility to store the [ValueType enum](https://github.com/FalkorDB/FalkorDB/blob/master/src/resultset/formatters/resultset_formatter.h). FalkorDB guarantees that this enum may be extended in the future, but the existing values will not be altered. The `ValueType` for the first entry is `VALUE_NODE`. The node representation contains 3 top-level elements: 1. The node's internal ID. -2. An array of all label IDs associated with the node (currently, each node can have either 0 or 1 labels, though this restriction may be lifted in the future). +2. An array of all label IDs associated with the node (nodes can have zero or more labels). 3. An array of all properties the node contains. Properties are represented as 3-arrays - [property key ID, `ValueType`, value]. ```sh @@ -232,11 +232,11 @@ The final top-level member of the GRAPH.QUERY reply is the execution statistics. The statistics always include query execution time, while any combination of the other elements may be included depending on how the graph was modified. 1. "Labels added: (integer)" -2. "Labels removed: (integer)" (since RedisGraph 2.10) +2. "Labels removed: (integer)" 3. "Nodes created: (integer)" 4. "Nodes deleted: (integer)" 5. "Properties set: (integer)" -6. "Properties removed: (integer)" (since RedisGraph 2.10) +6. "Properties removed: (integer)" 7. "Relationships created: (integer)" 8. "Relationships deleted: (integer)" 9. "Indices created: (integer)" @@ -290,10 +290,6 @@ CALL db.propertyKeys() YIELD propertyKey RETURN propertyKey SKIP [cached_array_l Though the property calls are quite efficient regardless of whether this optimization is used. -As an example, the Python client checks its local array of labels to resolve every label ID [as seen here](https://github.com/RedisGraph/redisgraph-py/blob/d65ec325b1909489845427b7100dcba6c4050b66/redisgraph/graph.py#L20-L32). - -In the case of an IndexError, it issues a procedure call to fully refresh its label cache [as seen here](https://github.com/RedisGraph/redisgraph-py/blob/d65ec325b1909489845427b7100dcba6c4050b66/redisgraph/graph.py#L153-L154). - ## Reference clients -All the logic described in this document has been implemented in most of the clients listed in [Client Libraries](clients). Among these, `node-redis`, `redis-py` and `jedis` are currently the most sophisticated. +All the logic described in this document has been implemented in most of the clients listed in [Client Libraries](/getting-started/clients). Among these, the official FalkorDB clients for Python, Node.js, and Java are currently the most sophisticated. diff --git a/design/third-party.md b/design/third-party.md index 8e37139..83467ff 100644 --- a/design/third-party.md +++ b/design/third-party.md @@ -48,15 +48,10 @@ Below is a list of these libraries along with their respective licenses. ### 10. [CRoaring](https://github.com/RoaringBitmap/CRoaring?tab=License-1-ov-file#readme) - **License**: [Apache License 2.0](https://github.com/RoaringBitmap/CRoaring?tab=License-1-ov-file#readme) -### 11. RedisGraph -- **License**: [RSALv2](https://redis.io/legal/rsalv2-agreement/) or [SSPLv1](https://redis.io/legal/server-side-public-license-sspl/) - -### 12. Redis -- **License**: [RSALv2](https://redis.io/legal/rsalv2-agreement/) or [SSPLv1](https://redis.io/legal/server-side-public-license-sspl/) - -### 13. RediSearch -- **License**: [RSALv2](https://redis.io/legal/rsalv2-agreement/) or [SSPLv1](https://redis.io/legal/server-side-public-license-sspl/) - --- Each of these libraries is crucial for FalkorDB's performance, scalability, and functionality. For further details, consult the respective license files linked above. + +## Historical Attribution + +FalkorDB is built upon technology originally developed as RedisGraph (licensed under RSALv2/SSPLv1) and Redis (licensed under RSALv2/SSPLv1), and RediSearch (licensed under RSALv2/SSPLv1). FalkorDB continues to evolve these technologies under an open-source model. diff --git a/getting-started/clients.md b/getting-started/clients.md index b91dc65..6ddd5f0 100644 --- a/getting-started/clients.md +++ b/getting-started/clients.md @@ -32,6 +32,8 @@ FalkorDB provides official Object-Graph Mapping (OGM) libraries that allow you t ## Additional Clients +**Note:** Some clients below were originally developed for RedisGraph. While many may work with FalkorDB due to protocol compatibility, they are not officially tested or supported. For best results, use the official FalkorDB clients listed above. + | Project | Language | License | Author | Package | | --------------------------------------------------------- | ---------- | ---------- | ------------------------------------------- | ---------------------------------------- | | [nredisstack][nredisstack-url] | .NET | MIT | [Redis][redis-url] | [nuget][nredisstack-package] | diff --git a/operations/k8s-support.md b/operations/k8s-support.md index 62aaf7b..72d3979 100644 --- a/operations/k8s-support.md +++ b/operations/k8s-support.md @@ -47,8 +47,8 @@ replica: - "--loadmodule /var/lib/falkordb/bin/falkordb.so" ``` -This file specify the FalkorDB image(you can choose different tags) -and configure the master and slave to load the FalkorDB module. +This file specifies the FalkorDB image (you can choose different tags) +and configures the master and replicas to load the FalkorDB module. For additional configurations [see the official Helm chart documentation](https://github.com/bitnami/charts/blob/main/bitnami/redis/values.yaml) ## Step 2: Install FalkorDB Helm Charts diff --git a/operations/migration/kuzu-to-falkordb.md b/operations/migration/kuzu-to-falkordb.md index 99c445b..1f751d3 100644 --- a/operations/migration/kuzu-to-falkordb.md +++ b/operations/migration/kuzu-to-falkordb.md @@ -29,7 +29,7 @@ The process ensures complete data migration including nodes, relationships, prop ## Prerequisites -- Python 3.6+ +- Python 3.9+ - `kuzu` Python package - FalkorDB instance (local, Docker, or Cloud) - [FalkorDB Rust Loader](https://github.com/FalkorDB/FalkorDB-Loader-RS) diff --git a/operations/migration/neo4j-to-falkordb.md b/operations/migration/neo4j-to-falkordb.md index 50bb885..fe891f6 100644 --- a/operations/migration/neo4j-to-falkordb.md +++ b/operations/migration/neo4j-to-falkordb.md @@ -23,7 +23,7 @@ The migration process consists of the following steps: - Neo4j instance (local or remote) - FalkorDB instance (local, Docker, or Cloud) -- Python 3.6+ +- Python 3.9+ - Migration tools from the [Neo4j-to-FalkorDB repository](https://github.com/FalkorDB/Neo4j-to-FalkorDB) ## Step 1: Setting Up Neo4j diff --git a/operations/opentelemetry.md b/operations/opentelemetry.md index d6bad81..757b34f 100644 --- a/operations/opentelemetry.md +++ b/operations/opentelemetry.md @@ -2,23 +2,25 @@ title: "OpenTelemetry Integration" nav_order: 5 parent: Operations -description: "Comprehensive guide for setting up OpenTelemetry observability and tracing with FalkorDB Python applications" +description: "Guide for setting up OpenTelemetry tracing with FalkorDB Python applications" redirect_from: - /opentelemetry.html - /opentelemetry --- -# OpenTelemetry with FalkorDB-py Guide +# OpenTelemetry Tracing with FalkorDB-py Guide -This guide explains how to set up and use OpenTelemetry (OTel) to monitor and trace your FalkorDB Python applications. +This guide explains how to set up and use OpenTelemetry (OTel) tracing to monitor your FalkorDB Python applications. ## Overview -OpenTelemetry is an observability framework that allows you to collect, process, and export telemetry data (metrics, logs, and traces) from your applications. When integrated with FalkorDB-py, it provides valuable insights into database operations, query performance, and application behavior. +OpenTelemetry is an observability framework that allows you to collect, process, and export telemetry data from your applications. When integrated with FalkorDB-py, it provides valuable insights into database operations and query performance through distributed tracing. + +**Note:** This guide focuses on tracing capabilities. OpenTelemetry supports additional observability features like metrics and logs that can be configured separately. ## Prerequisites -- Python 3.8 or higher +- Python 3.9 or higher - FalkorDB server running (locally or remotely) - Basic understanding of Python and FalkorDB diff --git a/udfs/index.md b/udfs/index.md index d093d55..7f90885 100644 --- a/udfs/index.md +++ b/udfs/index.md @@ -236,7 +236,7 @@ function stringify_path(p) { ### Graph UDFs have access to a global `graph` object which represents the current graph executing the UDF. The object exposes a single function `traverse` which is similar to the node's `getNeighbors` function (see docs above) -but can perform multi-source traversal. +but can perform multi-source traversal, which can be faster than performing multiple individual calls to getNeighbors. ```javascript function multi_source_bfs(sources, config) { @@ -251,8 +251,6 @@ function multi_source_bfs(sources, config) { ### Falkor The `falkor` global object represents the FalkorDB database and is used mostly to register UDFs. The object exposes two functions: -Using the multi source traversal can be faster than performing multiple individual calls to getNeighbors. - - `log` - logs a message to the database stdout. - `register` - exposes a function to the database. @@ -272,7 +270,7 @@ falkor.log(msg) |-----------|------|----------|-------------| | `message` | string | Yes | message to log | -##### falkor.register +#### falkor.register ##### Description Register a function to the database @@ -392,7 +390,7 @@ load_graph(g) compute_jaccard_sim(g) ``` -The scripts load our two UDF libraries `collection` and `similarity` construct a graph and computes Jaccard similarity between `Alice` and every other node in the graph via the query: +The scripts load our two UDF libraries, `collection` and `similarity`, construct a graph, and compute Jaccard similarity between `Alice` and every other node in the graph via the query: ```bash MATCH (alice:Person {name: 'Alice'}), (n)