mirror of https://gitee.com/bigwinds/arangodb
Doc - SmartGraphs formatting (#6486)
This commit is contained in:
parent
c99e8e8973
commit
0697029134
|
@ -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**<br/>
|
||||
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**<br/>
|
||||
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**<br/>
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue