diff --git a/Documentation/Books/Manual/Graphs/SmartGraphs/README.md b/Documentation/Books/Manual/Graphs/SmartGraphs/README.md index a97ddb3d0d..1bfbaf53a5 100644 --- a/Documentation/Books/Manual/Graphs/SmartGraphs/README.md +++ b/Documentation/Books/Manual/Graphs/SmartGraphs/README.md @@ -6,17 +6,20 @@ This feature is only available in the [**Enterprise Edition**](https://www.arangodb.com/why-arangodb/arangodb-enterprise/) {% endhint %} -This chapter describes the [smart-graph](../README.md) module. -It enables you to manage graphs at scale, it will give a vast performance benefit for all graphs sharded in an ArangoDB Cluster. -On a single server this feature is pointless, hence it is only available in a cluster mode. -In terms of querying there is no difference between smart and General Graphs. -The former are a transparent replacement for the latter. -So for querying the graph please refer to [AQL Graph Operations](../../../AQL/Graphs/index.html) -and [Graph Functions](../GeneralGraphs/Functions.md) sections. -The optimizer is clever enough to identify if we are on a SmartGraph or not. +This chapter describes the `smart-graph` module, which enables you to manage +graphs at scale. It will give a vast performance benefit for all graphs sharded +in an ArangoDB Cluster. On a single server this feature is pointless, hence it +is only available in cluster mode. -The difference is only in the management section: creating and modifying the underlying collections of the graph. -For a detailed API reference please refer to [SmartGraph Management](../SmartGraphs/Management.md). +In terms of querying there is no difference between SmartGraphs and +General Graphs. The former is a transparent replacement for the latter. +For graph querying please refer to [AQL Graph Operations](../../../AQL/Graphs/index.html) +and [General Graph Functions](../GeneralGraphs/Functions.md) sections. +The optimizer is clever enough to identify whether it is a SmartGraph or not. + +The difference is only in the management section: creating and modifying the +underlying collections of the graph. For a detailed API reference please refer +to [SmartGraph Management](Management.md). Do the hands-on [ArangoDB SmartGraphs Tutorial](https://www.arangodb.com/using-smartgraphs-arangodb/) @@ -25,50 +28,63 @@ to learn more. What makes a graph smart? ------------------------- -Most graphs have one feature that divides the entire graph into several smaller subgraphs. -These subgraphs have a large amount of edges that only connect vertices in the same subgraph -and only have few edges connecting vertices from other subgraphs. +Most graphs have one feature that divides the entire graph into several smaller +subgraphs. These subgraphs have a large amount of edges that only connect +vertices in the same subgraph and only have few edges connecting vertices from +other subgraphs. + Examples for these graphs are: -* Social Networks - +- **Social Networks**
Typically the feature here is the region/country users live in. - Every user typically has more contacts in the same region/country then she has in other regions/countries + Every user typically has more contacts in the same region/country then she + has in other regions/countries -* Transport Systems +- **Transport Systems**
+ For those also the feature is the region/country. You have many local + transportation but only few across countries. - For those also the feature is the region/country. You have many local transportation but only few across countries. - -* E-Commerce - - In this case probably the category of products is a good feature. Often products of the same category are bought together. +- **E-Commerce**
+ In this case probably the category of products is a good feature. + Often products of the same category are bought together. If this feature is known, SmartGraphs can make use if it. -When creating a SmartGraph you have to define a smartAttribute, which is the name of an attribute stored in every vertex. -The graph will than be automatically sharded in such a way that all vertices with the same value are stored on the same physical machine, -all edges connecting vertices with identical smartAttribute values are stored on this machine as well. -During query time the query optimizer and the query executor both know for every document exactly where it is stored and can thereby minimize network overhead. -Everything that can be computed locally will be computed locally. + +When creating a SmartGraph you have to define a smartAttribute, which is the +name of an attribute stored in every vertex. The graph will than be +automatically sharded in such a way that all vertices with the same value are +stored on the same physical machine, all edges connecting vertices with +identical smartAttribute values are stored on this machine as well. +During query time the query optimizer and the query executor both know for +every document exactly where it is stored and can thereby minimize network +overhead. Everything that can be computed locally will be computed locally. Benefits of SmartGraphs ----------------------- -Because of the above described guaranteed sharding, the performance of queries that only cover one subgraph have a performance almost equal to an only local computation. -Queries that cover more than one subgraph require some network overhead. The more subgraphs are touched the more network cost will apply. -However the overall performance is never worse than the same query on a General Graph. +Because of the above described guaranteed sharding, the performance of queries +that only cover one subgraph have a performance almost equal to an only local +computation. Queries that cover more than one subgraph require some network +overhead. The more subgraphs are touched the more network cost will apply. +However the overall performance is never worse than the same query using a +General Graph. Getting started --------------- -First of all SmartGraphs *cannot use existing collections*, when switching to SmartGraph from an existing data set you have to import the data into a fresh SmartGraph. -This switch can be easily achieved with [arangodump](../../Programs/Arangodump/README.md) -and [arangorestore](../../Programs/Arangorestore/README.md). -The only thing you have to change in this pipeline is that you create the new collections with the SmartGraph before starting `arangorestore`. +First of all SmartGraphs *cannot use existing collections*, when switching to +SmartGraph from an existing data set you have to import the data into a fresh +SmartGraph. This switch can be easily achieved with +[arangodump](../../Programs/Arangodump/README.md) and +[arangorestore](../../Programs/Arangorestore/README.md). +The only thing you have to change in this pipeline is that you create the new +collections with the SmartGraph before starting `arangorestore`. -* Create a graph - - In comparison to General Graph we have to add more options when creating the graph. The two options `smartGraphAttribute` and `numberOfShards` are required and cannot be modified later. +- Create a graph + In comparison to General Graph we have to add more options when creating the + graph. The two options `smartGraphAttribute` and `numberOfShards` are + required and cannot be modified later. @startDocuBlockInline smartGraphCreateGraphHowTo1 arangosh> var graph_module = require("@arangodb/smart-graph"); @@ -77,11 +93,10 @@ The only thing you have to change in this pipeline is that you create the new co [ SmartGraph myGraph EdgeDefinitions: [ ] VertexCollections: [ ] ] @endDocuBlock smartGraphCreateGraphHowTo1 +- Add some vertex collections -* Add some vertex collections - - This is again identical to General Graph. The module will setup correct sharding for all these collections. *Note*: The collections have to be new. - + This is again identical to General Graph. The module will setup correct + sharding for all these collections. *Note*: The collections have to be new. @startDocuBlockInline smartGraphCreateGraphHowTo2 arangosh> graph._addVertexCollection("shop"); @@ -91,13 +106,11 @@ The only thing you have to change in this pipeline is that you create the new co [ SmartGraph myGraph EdgeDefinitions: [ ] VertexCollections: [ "shop", "customer", "pet" ] ] @endDocuBlock smartGraphCreateGraphHowTo2 - -* Define relations on the Graph - +- Define relations on the Graph @startDocuBlockInline smartGraphCreateGraphHowTo3 arangosh> var rel = graph_module._relation("isCustomer", ["shop"], ["customer"]); arangosh> graph._extendEdgeDefinitions(rel); arangosh> graph; - [ SmartGraph myGraph EdgeDefinitions: [ "isCustomer: [shop] -> [customer]" ] VertexCollections: [ "pet" ] ] + [ SmartGraph myGraph EdgeDefinitions: [ "isCustomer: [shop] -> [customer]" ] VertexCollections: [ "pet" ] ] @endDocuBlock smartGraphCreateGraphHowTo3 diff --git a/Documentation/Books/Manual/Views/ArangoSearch/DetailedOverview.md b/Documentation/Books/Manual/Views/ArangoSearch/DetailedOverview.md index 321d7ddb56..07d13cd0ea 100644 --- a/Documentation/Books/Manual/Views/ArangoSearch/DetailedOverview.md +++ b/Documentation/Books/Manual/Views/ArangoSearch/DetailedOverview.md @@ -165,7 +165,7 @@ is used by these writers (in terms of "writers pool") one can use upon several possible configurable formulas as defined by their types. The currently supported types are: - - **bytes_accum**: Consolidation is performed based on current memory cunsumption + - **bytes_accum**: Consolidation is performed based on current memory consumption of segments and `threshold` property value. - **tier**: Consolidate based on segment byte size and live document count as dictated by the customization attributes. diff --git a/Documentation/DocuBlocks/Rest/Views/patch_api_view_properties_iresearch.md b/Documentation/DocuBlocks/Rest/Views/patch_api_view_properties_iresearch.md index be31483d00..cb879fd1e2 100644 --- a/Documentation/DocuBlocks/Rest/Views/patch_api_view_properties_iresearch.md +++ b/Documentation/DocuBlocks/Rest/Views/patch_api_view_properties_iresearch.md @@ -20,8 +20,8 @@ of commit+consolidate), a lower value will cause a lot of disk space to be wasted. For the case where the consolidation policies rarely merge segments (i.e. few inserts/deletes), a higher value will impact performance without any added -benefits. -Background: +benefits.
+_Background:_ With every "commit" or "consolidate" operation a new state of the view internal data-structures is created on disk. Old states/snapshots are released once there are no longer any users @@ -38,8 +38,8 @@ commit, will cause the index not to account for them and memory usage would continue to grow. For the case where there are a few inserts/updates, a higher value will impact performance and waste disk space for each commit call without any added -benefits. -Background: +benefits.
+_Background:_ For data retrieval ArangoSearch views follow the concept of "eventually-consistent", i.e. eventually all the data in ArangoDB will be matched by corresponding query expressions. @@ -60,8 +60,8 @@ For the case where there are a lot of data modification operations, a higher value could potentially have the data store consume more space and file handles. For the case where there are a few data modification operations, a lower value will impact performance due to no segment candidates available for -consolidation. -Background: +consolidation.
+_Background:_ For data modification ArangoSearch views follow the concept of a "versioned data store". Thus old versions of data may be removed once there are no longer any users of the old data. The frequency of the cleanup and @@ -71,8 +71,8 @@ Background: @RESTSTRUCT{consolidationPolicy,post_api_view_props,object,optional,post_api_view_props_consolidation} The consolidation policy to apply for selecting which segments should be merged -(default: {}) -Background: +(default: {})
+_Background:_ With each ArangoDB transaction that inserts documents one or more ArangoSearch internal segments gets created. Similarly for removed documents the segments that contain such documents @@ -85,16 +85,16 @@ Background: released once old segments are no longer used. -@RESTSTRUCT{type,post_api_view_props_consolidations,string,optional,string} +@RESTSTRUCT{type,post_api_view_props_consolidation,string,optional,string} The segment candidates for the "consolidation" operation are selected based upon several possible configurable formulas as defined by their types. The currently supported types are (default: "bytes_accum"): -- *bytes_accum*: consolidate if and only if ({threshold} range `[0.0, 1.0]`): - {threshold} > (segment_bytes + sum_of_merge_candidate_segment_bytes) / all_segment_bytes +- *bytes_accum*: consolidate if and only if (`{threshold}` range `[0.0, 1.0]`): + `{threshold} > (segment_bytes + sum_of_merge_candidate_segment_bytes) / all_segment_bytes` i.e. the sum of all candidate segment byte size is less than the total - segment byte size multiplied by the {threshold} + segment byte size multiplied by the `{threshold}` - *tier*: consolidate based on segment byte size and live document count - as dicated by the customization attributes. + as dictated by the customization attributes. @RESTSTRUCT{links,post_api_view_props,object,optional,post_api_view_links} diff --git a/Documentation/DocuBlocks/Rest/Views/post_api_view_iresearch.md b/Documentation/DocuBlocks/Rest/Views/post_api_view_iresearch.md index c4ecaf2973..bf67c29b8a 100644 --- a/Documentation/DocuBlocks/Rest/Views/post_api_view_iresearch.md +++ b/Documentation/DocuBlocks/Rest/Views/post_api_view_iresearch.md @@ -21,8 +21,8 @@ of commit+consolidate), a lower value will cause a lot of disk space to be wasted. For the case where the consolidation policies rarely merge segments (i.e. few inserts/deletes), a higher value will impact performance without any added -benefits. -Background: +benefits.
+_Background:_ With every "commit" or "consolidate" operation a new state of the view internal data-structures is created on disk. Old states/snapshots are released once there are no longer any users @@ -39,8 +39,8 @@ commit, will cause the index not to account for them and memory usage would continue to grow. For the case where there are a few inserts/updates, a higher value will impact performance and waste disk space for each commit call without any added -benefits. -Background: +benefits.
+_Background:_ For data retrieval ArangoSearch views follow the concept of "eventually-consistent", i.e. eventually all the data in ArangoDB will be matched by corresponding query expressions. @@ -61,8 +61,8 @@ For the case where there are a lot of data modification operations, a higher value could potentially have the data store consume more space and file handles. For the case where there are a few data modification operations, a lower value will impact performance due to no segment candidates available for -consolidation. -Background: +consolidation.
+_Background:_ For data modification ArangoSearch views follow the concept of a "versioned data store". Thus old versions of data may be removed once there are no longer any users of the old data. The frequency of the cleanup and @@ -72,8 +72,8 @@ Background: @RESTSTRUCT{consolidationPolicy,post_api_view_props,object,optional,post_api_view_props_consolidation} The consolidation policy to apply for selecting which segments should be merged -(default: {}) -Background: +(default: {})
+_Background:_ With each ArangoDB transaction that inserts documents one or more ArangoSearch internal segments gets created. Similarly for removed documents the segments that contain such documents @@ -86,16 +86,16 @@ Background: released once old segments are no longer used. -@RESTSTRUCT{type,post_api_view_props_consolidations,string,optional,string} +@RESTSTRUCT{type,post_api_view_props_consolidation,string,optional,string} The segment candidates for the "consolidation" operation are selected based upon several possible configurable formulas as defined by their types. The currently supported types are (default: "bytes_accum"): -- *bytes_accum*: consolidate if and only if ({threshold} range `[0.0, 1.0]`): - {threshold} > (segment_bytes + sum_of_merge_candidate_segment_bytes) / all_segment_bytes +- *bytes_accum*: consolidate if and only if (`{threshold}` range `[0.0, 1.0]`): + `{threshold} > (segment_bytes + sum_of_merge_candidate_segment_bytes) / all_segment_bytes` i.e. the sum of all candidate segment byte size is less than the total - segment byte size multiplied by the {threshold} + segment byte size multiplied by the `{threshold}` - *tier*: consolidate based on segment byte size and live document count - as dicated by the customization attributes. + as dictated by the customization attributes. @RESTSTRUCT{links,post_api_view_props,object,optional,post_api_view_links} diff --git a/Documentation/DocuBlocks/Rest/Views/put_api_view_properties_iresearch.md b/Documentation/DocuBlocks/Rest/Views/put_api_view_properties_iresearch.md index 70c872db13..5a485104c1 100644 --- a/Documentation/DocuBlocks/Rest/Views/put_api_view_properties_iresearch.md +++ b/Documentation/DocuBlocks/Rest/Views/put_api_view_properties_iresearch.md @@ -20,8 +20,8 @@ of commit+consolidate), a lower value will cause a lot of disk space to be wasted. For the case where the consolidation policies rarely merge segments (i.e. few inserts/deletes), a higher value will impact performance without any added -benefits. -Background: +benefits.
+_Background:_ With every "commit" or "consolidate" operation a new state of the view internal data-structures is created on disk. Old states/snapshots are released once there are no longer any users @@ -38,8 +38,8 @@ commit, will cause the index not to account for them and memory usage would continue to grow. For the case where there are a few inserts/updates, a higher value will impact performance and waste disk space for each commit call without any added -benefits. -Background: +benefits.
+_Background:_ For data retrieval ArangoSearch views follow the concept of "eventually-consistent", i.e. eventually all the data in ArangoDB will be matched by corresponding query expressions. @@ -60,8 +60,8 @@ For the case where there are a lot of data modification operations, a higher value could potentially have the data store consume more space and file handles. For the case where there are a few data modification operations, a lower value will impact performance due to no segment candidates available for -consolidation. -Background: +consolidation.
+_Background:_ For data modification ArangoSearch views follow the concept of a "versioned data store". Thus old versions of data may be removed once there are no longer any users of the old data. The frequency of the cleanup and @@ -71,8 +71,8 @@ Background: @RESTSTRUCT{consolidationPolicy,post_api_view_props,object,optional,post_api_view_props_consolidation} The consolidation policy to apply for selecting which segments should be merged -(default: {}) -Background: +(default: {})
+_Background:_ With each ArangoDB transaction that inserts documents one or more ArangoSearch internal segments gets created. Similarly for removed documents the segments that contain such documents @@ -85,16 +85,16 @@ Background: released once old segments are no longer used. -@RESTSTRUCT{type,post_api_view_props_consolidations,string,optional,string} +@RESTSTRUCT{type,post_api_view_props_consolidation,string,optional,string} The segment candidates for the "consolidation" operation are selected based upon several possible configurable formulas as defined by their types. The currently supported types are (default: "bytes_accum"): -- *bytes_accum*: consolidate if and only if ({threshold} range `[0.0, 1.0]`): - {threshold} > (segment_bytes + sum_of_merge_candidate_segment_bytes) / all_segment_bytes +- *bytes_accum*: consolidate if and only if (`{threshold}` range `[0.0, 1.0]`): + `{threshold} > (segment_bytes + sum_of_merge_candidate_segment_bytes) / all_segment_bytes` i.e. the sum of all candidate segment byte size is less than the total - segment byte size multiplied by the {threshold} + segment byte size multiplied by the `{threshold}` - *tier*: consolidate based on segment byte size and live document count - as dicated by the customization attributes. + as dictated by the customization attributes. @RESTSTRUCT{links,post_api_view_props,object,optional,post_api_view_links} diff --git a/js/apps/system/_admin/aardvark/APP/frontend/js/templates/navigationView.ejs b/js/apps/system/_admin/aardvark/APP/frontend/js/templates/navigationView.ejs index c494d302be..b4c945b610 100644 --- a/js/apps/system/_admin/aardvark/APP/frontend/js/templates/navigationView.ejs +++ b/js/apps/system/_admin/aardvark/APP/frontend/js/templates/navigationView.ejs @@ -11,7 +11,7 @@
  • Collections
  • Views
  • Queries
  • -
  • Graphs
  • +
  • Graphs
  • Services