Added: incubator/s2graph/site/docs/api/mutate/mutate_edge.html URL: http://svn.apache.org/viewvc/incubator/s2graph/site/docs/api/mutate/mutate_edge.html?rev=1856470&view=auto ============================================================================== --- incubator/s2graph/site/docs/api/mutate/mutate_edge.html (added) +++ incubator/s2graph/site/docs/api/mutate/mutate_edge.html Thu Mar 28 11:04:32 2019 @@ -0,0 +1,562 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Manage Edges — S2Graph 0.0.2 documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="../../_static/language_data.js"></script> + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/s2graph_style.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Manage Vertices (Optional)" href="mutate_vertex.html" /> + <link rel="prev" title="Mutate APIs" href="index.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> S2Graph + + + + </a> + + + + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">S2Graph Documentation</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../getting_started/your_first_graph.html">Your First S2Graph</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../index.html">HTTP API Glossary</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../management/index.html">Management APIs</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Mutate APIs</a><ul class="current"> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Manage Edges</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#edge-fields">Edge Fields</a></li> +<li class="toctree-l4"><a class="reference internal" href="#basic-edge-operations">Basic Edge Operations</a></li> +<li class="toctree-l4"><a class="reference internal" href="#strong-consistency">Strong Consistency</a></li> +<li class="toctree-l4"><a class="reference internal" href="#weak-consistency">Weak Consistency</a></li> +</ul> +</li> +<li class="toctree-l3"><a class="reference internal" href="mutate_vertex.html">Manage Vertices (Optional)</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../query/index.html">Query APIs</a></li> +</ul> +</li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">S2Graph</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">HTTP API Glossary</a> »</li> + + <li><a href="index.html">Mutate APIs</a> »</li> + + <li>Manage Edges</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/api/mutate/mutate_edge.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="manage-edges"> +<h1>Manage Edges<a class="headerlink" href="#manage-edges" title="Permalink to this headline">¶</a></h1> +<p>An <code class="docutils literal notranslate"><span class="pre">Edge</span></code> represents a relation between two vertices, with properties according to the schema defined in its label.</p> +<div class="section" id="edge-fields"> +<h2>Edge Fields<a class="headerlink" href="#edge-fields" title="Permalink to this headline">¶</a></h2> +<p>The following fields need to be specified when inserting an edge, and are returned when queried on edges.</p> +<table border="1" class="colwidths-given docutils" id="id5"> +<caption><span class="caption-text">Option</span><a class="headerlink" href="#id5" title="Permalink to this table">¶</a></caption> +<colgroup> +<col width="11%" /> +<col width="22%" /> +<col width="22%" /> +<col width="22%" /> +<col width="22%" /> +</colgroup> +<thead valign="bottom"> +<tr class="row-odd"><th class="head">Field Name</th> +<th class="head">Definition</th> +<th class="head">Data Type</th> +<th class="head">Example</th> +<th class="head">Note</th> +</tr> +</thead> +<tbody valign="top"> +<tr class="row-even"><td><strong>timestamp</strong></td> +<td>Issue time of request</td> +<td>Long</td> +<td>1430116731156</td> +<td>Required. Unix Epoch time in milliseconds. S2Graph TTL and timestamp unit is <strong>milliseconds</strong></td> +</tr> +<tr class="row-odd"><td>operation</td> +<td>One of insert, delete, update, or increment</td> +<td>String</td> +<td>âiâ, âinsertâ</td> +<td>Required only for bulk operations. Aliases are also available: i (insert), d (delete), u (update), in (increment). Default is insert</td> +</tr> +<tr class="row-even"><td>from</td> +<td>Id of source vertex</td> +<td>Long/String</td> +<td>1</td> +<td>Required. Use long if possible. <strong>Maximum string byte-size is 249</strong></td> +</tr> +<tr class="row-odd"><td>to</td> +<td>Id of target vertex</td> +<td>Long/String</td> +<td>101</td> +<td>Required. Use long if possible. <strong>Maximum string byte-size is 249</strong></td> +</tr> +<tr class="row-even"><td>label</td> +<td>Label name</td> +<td>String</td> +<td>graph_test</td> +<td>Required</td> +</tr> +<tr class="row-odd"><td>direction</td> +<td>Direction of the edge. Should be one of <strong>out/ in/ undirected</strong></td> +<td>String</td> +<td>out</td> +<td>Required. Alias are also available: o (out), i (in), u (undirected)</td> +</tr> +<tr class="row-even"><td>props</td> +<td>Additional properties of the edge</td> +<td>JSON (dictionary)</td> +<td>{âtimestampâ: 1417616431, âaffinity_scoreâ:10, âis_hiddenâ: false, âis_validâ: true}</td> +<td>Required. <strong>If in indexed properties isnât given, default values will be added</strong></td> +</tr> +</tbody> +</table> +</div> +<div class="section" id="basic-edge-operations"> +<h2>Basic Edge Operations<a class="headerlink" href="#basic-edge-operations" title="Permalink to this headline">¶</a></h2> +<p>In S2Graph, an Edge supports five different operations.</p> +<ul class="simple"> +<li><code class="docutils literal notranslate"><span class="pre">insert</span></code>: Create new edge.</li> +<li><code class="docutils literal notranslate"><span class="pre">delete</span></code>: Delete existing edge.</li> +<li><code class="docutils literal notranslate"><span class="pre">update</span></code>: Update existing edge`s state.</li> +<li><code class="docutils literal notranslate"><span class="pre">increment</span></code>: Increment existing edge`s state.</li> +<li><code class="docutils literal notranslate"><span class="pre">deleteAll</span></code>: Delete all adjacent edges from certain source vertex. (Available for strong consistency only)</li> +</ul> +<p>Edge operations work differently depending on the target label`s consistency level.</p> +<p>For a better understanding, please take a look at the following test cases.</p> +<p>Create 2 different labels, one of each consistencyLevels.</p> +<ul class="simple"> +<li>s2graph_label_test (strong)</li> +<li>s2graph_label_test_weak (weak)</li> +</ul> +<p>Then insert a same set of edges to each labels and query them as follows.</p> +<p><strong>strong consistency</strong></p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhosnt</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">graphs</span><span class="o">/</span><span class="n">edges</span><span class="o">/</span><span class="n">insert</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test"</span><span class="p">,</span> <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">:</span> <span class="mi">0</span><span class="p">}},</span> + <span class="p">{</span><span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test"</span><span class="p">,</span> <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">:</span> <span class="o">-</span><span class="mi">10</span><span class="p">}},</span> + <span class="p">{</span><span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test"</span><span class="p">,</span> <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">:</span> <span class="o">-</span><span class="mi">30</span><span class="p">}}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +<p>Note that only one edge exist between (101, 10, s2graph_label_test, out).</p> +<div class="code json highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> + <span class="s2">"size"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"degrees"</span><span class="p">:</span> <span class="p">[</span> + <span class="p">{</span> + <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> + <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test"</span><span class="p">,</span> + <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> + <span class="s2">"_degree"</span><span class="p">:</span> <span class="mi">1</span> + <span class="p">}</span> + <span class="p">],</span> + <span class="s2">"results"</span><span class="p">:</span> <span class="p">[</span> + <span class="p">{</span> + <span class="s2">"cacheRemain"</span><span class="p">:</span> <span class="o">-</span><span class="mi">20</span><span class="p">,</span> + <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> + <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> + <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test"</span><span class="p">,</span> + <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"score"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"time"</span><span class="p">:</span> <span class="o">-</span><span class="mi">30</span><span class="p">,</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"is_hidden"</span><span class="p">:</span> <span class="n">false</span><span class="p">,</span> + <span class="s2">"is_blocked"</span><span class="p">:</span> <span class="n">false</span> + <span class="p">}</span> + <span class="p">}</span> + <span class="p">],</span> + <span class="s2">"impressionId"</span><span class="p">:</span> <span class="o">-</span><span class="mi">1650835965</span> +<span class="p">}</span> +</pre></div> +</div> +<p><strong>weak consistency</strong></p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">graphs</span><span class="o">/</span><span class="n">edges</span><span class="o">/</span><span class="n">insert</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">:</span> <span class="mi">0</span><span class="p">}},</span> + <span class="p">{</span><span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">:</span> <span class="o">-</span><span class="mi">10</span><span class="p">}},</span> + <span class="p">{</span><span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">:</span> <span class="o">-</span><span class="mi">30</span><span class="p">}}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +<p>This time there are <code class="docutils literal notranslate"><span class="pre">three</span> <span class="pre">edges</span></code> between (101, 10, s2graph_label_test_weak, out).</p> +<div class="code json highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> + <span class="s2">"size"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"degrees"</span><span class="p">:</span> <span class="p">[</span> + <span class="p">{</span> + <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> + <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> + <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> + <span class="s2">"_degree"</span><span class="p">:</span> <span class="mi">3</span> + <span class="p">}</span> + <span class="p">],</span> + <span class="s2">"results"</span><span class="p">:</span> <span class="p">[</span> + <span class="p">{</span> + <span class="s2">"cacheRemain"</span><span class="p">:</span> <span class="o">-</span><span class="mi">148</span><span class="p">,</span> + <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> + <span class="s2">"to"</span><span class="p">:</span> <span class="s2">"10"</span><span class="p">,</span> + <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> + <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"score"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"time"</span><span class="p">:</span> <span class="o">-</span><span class="mi">30</span><span class="p">,</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"is_hidden"</span><span class="p">:</span> <span class="n">false</span><span class="p">,</span> + <span class="s2">"is_blocked"</span><span class="p">:</span> <span class="n">false</span> + <span class="p">}</span> + <span class="p">},</span> + <span class="p">{</span> + <span class="s2">"cacheRemain"</span><span class="p">:</span> <span class="o">-</span><span class="mi">148</span><span class="p">,</span> + <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> + <span class="s2">"to"</span><span class="p">:</span> <span class="s2">"10"</span><span class="p">,</span> + <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> + <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> + <span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> + <span class="s2">"score"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> + <span class="s2">"time"</span><span class="p">:</span> <span class="o">-</span><span class="mi">10</span><span class="p">,</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"is_hidden"</span><span class="p">:</span> <span class="n">false</span><span class="p">,</span> + <span class="s2">"is_blocked"</span><span class="p">:</span> <span class="n">false</span> + <span class="p">}</span> + <span class="p">},</span> + <span class="p">{</span> + <span class="s2">"cacheRemain"</span><span class="p">:</span> <span class="o">-</span><span class="mi">148</span><span class="p">,</span> + <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> + <span class="s2">"to"</span><span class="p">:</span> <span class="s2">"10"</span><span class="p">,</span> + <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> + <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"score"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"time"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"is_hidden"</span><span class="p">:</span> <span class="n">false</span><span class="p">,</span> + <span class="s2">"is_blocked"</span><span class="p">:</span> <span class="n">false</span> + <span class="p">}</span> + <span class="p">}</span> + <span class="p">],</span> + <span class="s2">"impressionId"</span><span class="p">:</span> <span class="mi">1972178414</span> + <span class="p">}</span> +</pre></div> +</div> +</div> +<div class="section" id="strong-consistency"> +<h2>Strong Consistency<a class="headerlink" href="#strong-consistency" title="Permalink to this headline">¶</a></h2> +<div class="section" id="insert-post-mutate-edge-insert"> +<h3>Insert - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/edge/insert</span></code><a class="headerlink" href="#insert-post-mutate-edge-insert" title="Permalink to this headline">¶</a></h3> +<p>A unique edge is identified by a combination of (from, to, label, direction). For insert operations, S2Graph first checks if an edge with same (from, to, label, direction) information exists. If there is an existing edge, then insert will work as <code class="docutils literal notranslate"><span class="pre">update</span></code>. See above example.</p> +</div> +<div class="section" id="delete-post-mutate-edge-delete"> +<h3>Delete - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/edge/delete</span></code><a class="headerlink" href="#delete-post-mutate-edge-delete" title="Permalink to this headline">¶</a></h3> +<p>For edge deletion, again, S2Graph looks for a unique edge with (from, to, label, direction). However, this time it checks the timestamp of the delete request and the existing edge. The timestamp on the delete request <code class="docutils literal notranslate"><span class="pre">must</span> <span class="pre">be</span> <span class="pre">larger</span> <span class="pre">than</span> <span class="pre">that</span> <span class="pre">on</span> <span class="pre">the</span> <span class="pre">existing</span> <span class="pre">edge</span></code> or else the request will be ignored. If everything is well, the edge will be deleted. Also note that no props information is necessary for a delete request on a strongly consistent label since there will be only one edge with edge`s unique id(from, to, label, direction).</p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">mutate</span><span class="o">/</span><span class="n">edge</span><span class="o">/</span><span class="n">delete</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test"</span><span class="p">}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +</div> +<div class="section" id="update-post-mutate-edge-update"> +<h3>Update - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/edge/update</span></code><a class="headerlink" href="#update-post-mutate-edge-update" title="Permalink to this headline">¶</a></h3> +<p>What an update operation does to a strongly consistent label is identical to an insert.</p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">mutate</span><span class="o">/</span><span class="n">edge</span><span class="o">/</span><span class="n">update</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test"</span><span class="p">,</span> <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span> <span class="s2">"weight"</span><span class="p">:</span> <span class="o">-</span><span class="mi">10</span><span class="p">}}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +</div> +<div class="section" id="increment-post-mutate-edge-increment"> +<h3>Increment - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/edge/increment</span></code><a class="headerlink" href="#increment-post-mutate-edge-increment" title="Permalink to this headline">¶</a></h3> +<p>Works like update, other than it returns the incremented value and not the old value.</p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">mutate</span><span class="o">/</span><span class="n">edge</span><span class="o">/</span><span class="n">increment</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> <span class="s2">"to"</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span> <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test"</span><span class="p">,</span> <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"time"</span><span class="p">:</span> <span class="mi">100</span><span class="p">,</span> <span class="s2">"weight"</span><span class="p">:</span> <span class="o">-</span><span class="mi">10</span><span class="p">}}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +</div> +<div class="section" id="delete-all-post-mutate-edge-deleteall"> +<h3>Delete All - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/edge/deleteAll</span></code><a class="headerlink" href="#delete-all-post-mutate-edge-deleteall" title="Permalink to this headline">¶</a></h3> +<p>Delete all adjacent edges to the source vertex. <code class="docutils literal notranslate"><span class="pre">Please</span> <span class="pre">note</span> <span class="pre">that</span> <span class="pre">edges</span> <span class="pre">with</span> <span class="pre">both</span> <span class="pre">in</span> <span class="pre">and</span> <span class="pre">out</span> <span class="pre">directions</span> <span class="pre">will</span> <span class="pre">be</span> <span class="pre">deleted</span></code></p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">mutate</span><span class="o">/</span><span class="n">edge</span><span class="o">/</span><span class="n">deleteAll</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"ids"</span> <span class="p">:</span> <span class="p">[</span><span class="mi">101</span><span class="p">],</span> <span class="s2">"label"</span><span class="p">:</span><span class="s2">"s2graph_label_test"</span><span class="p">,</span> <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> <span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616441000</span><span class="p">}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +</div> +</div> +<div class="section" id="weak-consistency"> +<h2>Weak Consistency<a class="headerlink" href="#weak-consistency" title="Permalink to this headline">¶</a></h2> +<div class="section" id="id1"> +<h3>Insert <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/edge/insert</span></code><a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3> +<p>S2Graph <code class="docutils literal notranslate"><span class="pre">does</span> <span class="pre">not</span> <span class="pre">look</span></code> for a unique edge defined by (from, to, label, direction). It simply stores a new edge according to the request. No read, no consistency check. Note that this difference allows multiple edges with same (from, to, label, direction) id.</p> +</div> +<div class="section" id="delete-post-graphs-edges-delete"> +<h3>Delete - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/graphs/edges/delete</span></code><a class="headerlink" href="#delete-post-graphs-edges-delete" title="Permalink to this headline">¶</a></h3> +<p>For deletion on weakly consistent edges, first, S2Graph fetches existing edges from storage. Then, on each resulting edges, fires the actual delete operations.</p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">graphs</span><span class="o">/</span><span class="n">edges</span><span class="o">/</span><span class="n">delete</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span> + <span class="s2">"cacheRemain"</span><span class="p">:</span> <span class="o">-</span><span class="mi">148</span><span class="p">,</span> + <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> + <span class="s2">"to"</span><span class="p">:</span> <span class="s2">"10"</span><span class="p">,</span> + <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> + <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"score"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">3</span><span class="p">,</span> + <span class="s2">"time"</span><span class="p">:</span> <span class="o">-</span><span class="mi">30</span><span class="p">,</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"is_hidden"</span><span class="p">:</span> <span class="n">false</span><span class="p">,</span> + <span class="s2">"is_blocked"</span><span class="p">:</span> <span class="n">false</span> + <span class="p">}</span> + <span class="p">},</span> + <span class="p">{</span> + <span class="s2">"cacheRemain"</span><span class="p">:</span> <span class="o">-</span><span class="mi">148</span><span class="p">,</span> + <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> + <span class="s2">"to"</span><span class="p">:</span> <span class="s2">"10"</span><span class="p">,</span> + <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> + <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> + <span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> + <span class="s2">"score"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">2</span><span class="p">,</span> + <span class="s2">"time"</span><span class="p">:</span> <span class="o">-</span><span class="mi">10</span><span class="p">,</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"is_hidden"</span><span class="p">:</span> <span class="n">false</span><span class="p">,</span> + <span class="s2">"is_blocked"</span><span class="p">:</span> <span class="n">false</span> + <span class="p">}</span> + <span class="p">},</span> + <span class="p">{</span> + <span class="s2">"cacheRemain"</span><span class="p">:</span> <span class="o">-</span><span class="mi">148</span><span class="p">,</span> + <span class="s2">"from"</span><span class="p">:</span> <span class="mi">101</span><span class="p">,</span> + <span class="s2">"to"</span><span class="p">:</span> <span class="s2">"10"</span><span class="p">,</span> + <span class="s2">"label"</span><span class="p">:</span> <span class="s2">"s2graph_label_test_weak"</span><span class="p">,</span> + <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"score"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"_timestamp"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"time"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"weight"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> + <span class="s2">"is_hidden"</span><span class="p">:</span> <span class="n">false</span><span class="p">,</span> + <span class="s2">"is_blocked"</span><span class="p">:</span> <span class="n">false</span> + <span class="p">}</span> + <span class="p">}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +</div> +<div class="section" id="id2"> +<h3>Update - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/edge/update</span></code><a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h3> +<p>Like insert, S2Graph <code class="docutils literal notranslate"><span class="pre">does</span> <span class="pre">not</span> <span class="pre">check</span></code> for uniqueness. Update requires a pre-fetch of existing edges, similar to delete. Props of the resulting edges will be updated.</p> +</div> +<div class="section" id="id3"> +<h3>Increment - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/edge/increment</span></code><a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h3> +<p>For increment, S2Graph also <code class="docutils literal notranslate"><span class="pre">does</span> <span class="pre">not</span> <span class="pre">check</span></code> for uniqueness. Update requires a pre-fetch of existing edges, similar to delete. Props of the resulting edges will be incremented.</p> +</div> +<div class="section" id="id4"> +<h3>Delete All - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/edge/deleteAll</span></code><a class="headerlink" href="#id4" title="Permalink to this headline">¶</a></h3> +<p>Identical to strong consistency.</p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">mutate</span><span class="o">/</span><span class="n">edge</span><span class="o">/</span><span class="n">deleteAll</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"ids"</span> <span class="p">:</span> <span class="p">[</span><span class="mi">101</span><span class="p">],</span> <span class="s2">"label"</span><span class="p">:</span><span class="s2">"s2graph_label_test"</span><span class="p">,</span> <span class="s2">"direction"</span><span class="p">:</span> <span class="s2">"out"</span><span class="p">,</span> <span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616441</span><span class="p">}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="mutate_vertex.html" class="btn btn-neutral float-right" title="Manage Vertices (Optional)" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="index.html" class="btn btn-neutral float-left" title="Mutate APIs" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2018, s2graph + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file
Added: incubator/s2graph/site/docs/api/mutate/mutate_vertex.html URL: http://svn.apache.org/viewvc/incubator/s2graph/site/docs/api/mutate/mutate_vertex.html?rev=1856470&view=auto ============================================================================== --- incubator/s2graph/site/docs/api/mutate/mutate_vertex.html (added) +++ incubator/s2graph/site/docs/api/mutate/mutate_vertex.html Thu Mar 28 11:04:32 2019 @@ -0,0 +1,373 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Manage Vertices (Optional) — S2Graph 0.0.2 documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="../../_static/language_data.js"></script> + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/s2graph_style.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Query APIs" href="../query/index.html" /> + <link rel="prev" title="Manage Edges" href="mutate_edge.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> S2Graph + + + + </a> + + + + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">S2Graph Documentation</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../getting_started/your_first_graph.html">Your First S2Graph</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../index.html">HTTP API Glossary</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../management/index.html">Management APIs</a></li> +<li class="toctree-l2 current"><a class="reference internal" href="index.html">Mutate APIs</a><ul class="current"> +<li class="toctree-l3"><a class="reference internal" href="mutate_edge.html">Manage Edges</a></li> +<li class="toctree-l3 current"><a class="current reference internal" href="#">Manage Vertices (Optional)</a><ul> +<li class="toctree-l4"><a class="reference internal" href="#vertex-fields">Vertex Fields</a></li> +<li class="toctree-l4"><a class="reference internal" href="#basic-vertex-operations">Basic Vertex Operations</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="../query/index.html">Query APIs</a></li> +</ul> +</li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">S2Graph</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">HTTP API Glossary</a> »</li> + + <li><a href="index.html">Mutate APIs</a> »</li> + + <li>Manage Vertices (Optional)</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/api/mutate/mutate_vertex.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="manage-vertices-optional"> +<h1>Manage Vertices (Optional)<a class="headerlink" href="#manage-vertices-optional" title="Permalink to this headline">¶</a></h1> +<p>Vertices are the two end points of an edge, and logically stored in columns of a service. If your use case requires storing metadata corresponding to vertices rather than edges, there are operations available on vertices as well.</p> +<div class="section" id="vertex-fields"> +<h2>Vertex Fields<a class="headerlink" href="#vertex-fields" title="Permalink to this headline">¶</a></h2> +<p>Unlike edges and their labels, properties of a vertex are not indexed nor require a predefined schema. The following fields are used when operating on vertices.</p> +<table border="1" class="colwidths-given docutils" id="id1"> +<caption><span class="caption-text">Option</span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption> +<colgroup> +<col width="11%" /> +<col width="22%" /> +<col width="22%" /> +<col width="22%" /> +<col width="22%" /> +</colgroup> +<thead valign="bottom"> +<tr class="row-odd"><th class="head">Field Name</th> +<th class="head">Definition</th> +<th class="head">Data Type</th> +<th class="head">Example</th> +<th class="head">Note</th> +</tr> +</thead> +<tbody valign="top"> +<tr class="row-even"><td>timestamp</td> +<td>Issue time of request</td> +<td>Long</td> +<td>1430116731156</td> +<td>Required. Unix Epoch time in <strong>milliseconds</strong></td> +</tr> +<tr class="row-odd"><td>operation</td> +<td>One of insert, delete, update, increment</td> +<td>String</td> +<td>i, insert</td> +<td>Required only for bulk operations. Alias are also available: i (insert), d (delete), u (update), in (increment). Default is insert.</td> +</tr> +<tr class="row-even"><td><strong>serviceName</strong></td> +<td>Corresponding service name</td> +<td>String</td> +<td>kakaotalk/kakaogroup</td> +<td>Required</td> +</tr> +<tr class="row-odd"><td><strong>columnName</strong></td> +<td>Corresponding column name</td> +<td>String</td> +<td>user_id</td> +<td>Required</td> +</tr> +<tr class="row-even"><td>id</td> +<td>Unique identifier of vertex</td> +<td>Long/String</td> +<td>101</td> +<td>Required. Use Long if possible</td> +</tr> +<tr class="row-odd"><td><strong>props</strong></td> +<td>Additional properties of vertex</td> +<td>JSON (dictionary)</td> +<td>{âis_active_userâ: true, âageâ:10, âgenderâ: âFâ, âcountry_isoâ: âkrâ}</td> +<td>Required</td> +</tr> +</tbody> +</table> +</div> +<div class="section" id="basic-vertex-operations"> +<h2>Basic Vertex Operations<a class="headerlink" href="#basic-vertex-operations" title="Permalink to this headline">¶</a></h2> +<div class="section" id="insert-post-mutate-vertex-insert-servicename-columnname"> +<h3>Insert - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/vertex/insert/:serviceName/:columnName</span></code><a class="headerlink" href="#insert-post-mutate-vertex-insert-servicename-columnname" title="Permalink to this headline">¶</a></h3> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">mutate</span><span class="o">/</span><span class="n">vertex</span><span class="o">/</span><span class="n">insert</span><span class="o">/</span><span class="n">s2graph</span><span class="o">/</span><span class="n">account_id</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span><span class="s2">"props"</span><span class="p">:{</span><span class="s2">"is_active"</span><span class="p">:</span><span class="n">true</span><span class="p">,</span> <span class="s2">"talk_user_id"</span><span class="p">:</span><span class="mi">10</span><span class="p">},</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431000</span><span class="p">},</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">2</span><span class="p">,</span><span class="s2">"props"</span><span class="p">:{</span><span class="s2">"is_active"</span><span class="p">:</span><span class="n">true</span><span class="p">,</span> <span class="s2">"talk_user_id"</span><span class="p">:</span><span class="mi">12</span><span class="p">},</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431000</span><span class="p">},</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">3</span><span class="p">,</span><span class="s2">"props"</span><span class="p">:{</span><span class="s2">"is_active"</span><span class="p">:</span><span class="n">false</span><span class="p">,</span> <span class="s2">"talk_user_id"</span><span class="p">:</span><span class="mi">13</span><span class="p">},</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431000</span><span class="p">},</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">4</span><span class="p">,</span><span class="s2">"props"</span><span class="p">:{</span><span class="s2">"is_active"</span><span class="p">:</span><span class="n">true</span><span class="p">,</span> <span class="s2">"talk_user_id"</span><span class="p">:</span><span class="mi">14</span><span class="p">},</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431000</span><span class="p">},</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">5</span><span class="p">,</span><span class="s2">"props"</span><span class="p">:{</span><span class="s2">"is_active"</span><span class="p">:</span><span class="n">true</span><span class="p">,</span> <span class="s2">"talk_user_id"</span><span class="p">:</span><span class="mi">15</span><span class="p">},</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431000</span><span class="p">}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +</div> +<div class="section" id="delete-post-mutate-vertex-delete-servicename-columnname"> +<h3>Delete - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/vertex/delete/:serviceName/:columnName</span></code><a class="headerlink" href="#delete-post-mutate-vertex-delete-servicename-columnname" title="Permalink to this headline">¶</a></h3> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">mutate</span><span class="o">/</span><span class="n">vertex</span><span class="o">/</span><span class="n">delete</span><span class="o">/</span><span class="n">s2graph</span><span class="o">/</span><span class="n">account_id</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431001</span><span class="p">},</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">2</span><span class="p">,</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431002</span><span class="p">}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +<p>This operation will delete only the vertex data of a specified column and will not delete any edges connected to those vertices. +Also important thing is timestamp. vertex will be deleted only if delete requests <code class="docutils literal notranslate"><span class="pre">timestamp</span> <span class="pre">is</span> <span class="pre">larger</span> <span class="pre">than</span> <span class="pre">all</span> <span class="pre">of</span> <span class="pre">vertexs</span></code> property`s timestamp.</p> +<p>following example shows the difference.</p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">mutate</span><span class="o">/</span><span class="n">vertex</span><span class="o">/</span><span class="n">insert</span><span class="o">/</span><span class="n">s2graph_test</span><span class="o">/</span><span class="n">account_id</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span><span class="s2">"props"</span><span class="p">:{</span><span class="s2">"is_active"</span><span class="p">:</span><span class="n">true</span><span class="p">,</span> <span class="s2">"talk_user_id"</span><span class="p">:</span><span class="mi">10</span><span class="p">},</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431000</span><span class="p">},</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span><span class="s2">"props"</span><span class="p">:{</span><span class="s2">"talk_user_id"</span><span class="p">:</span><span class="mi">20</span><span class="p">},</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431002</span><span class="p">}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +<p>if user request delete(ts) on vertex like below then vertex would not be deleted, but only properties on this vertex that is updated before ts will be deleted.</p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">mutate</span><span class="o">/</span><span class="n">vertex</span><span class="o">/</span><span class="n">delete</span><span class="o">/</span><span class="n">s2graph_test</span><span class="o">/</span><span class="n">account_id</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span><span class="mi">1</span><span class="p">,</span><span class="s2">"timestamp"</span><span class="p">:</span><span class="mi">1417616431001</span><span class="p">}</span> +<span class="p">]</span><span class="s1">'</span> +</pre></div> +</div> +<p>then result still have vertex with property that is updated with larger timestamp.</p> +<div class="code bash highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">curl</span> <span class="o">-</span><span class="n">XPOST</span> <span class="n">localhost</span><span class="p">:</span><span class="mi">9000</span><span class="o">/</span><span class="n">graphs</span><span class="o">/</span><span class="n">getVertices</span> <span class="o">-</span><span class="n">H</span> <span class="s1">'Content-Type: Application/json'</span> <span class="o">-</span><span class="n">d</span> <span class="s1">'</span> +<span class="p">[</span> + <span class="p">{</span><span class="s2">"serviceName"</span><span class="p">:</span> <span class="s2">"s2graph_test"</span><span class="p">,</span> <span class="s2">"columnName"</span><span class="p">:</span> <span class="s2">"account_id"</span><span class="p">,</span> <span class="s2">"ids"</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">]}</span> +<span class="p">]</span><span class="s1">'</span> + + +<span class="c1"># result</span> +<span class="p">{</span> + <span class="s2">"serviceName"</span><span class="p">:</span> <span class="s2">"s2graph_test"</span><span class="p">,</span> + <span class="s2">"columnName"</span><span class="p">:</span> <span class="s2">"account_id"</span><span class="p">,</span> + <span class="s2">"id"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> + <span class="s2">"props"</span><span class="p">:</span> <span class="p">{</span> + <span class="s2">"talk_user_id"</span><span class="p">:</span> <span class="mi">20</span> + <span class="p">},</span> + <span class="s2">"timestamp"</span><span class="p">:</span> <span class="mi">1417616431002</span> +<span class="p">}</span> +</pre></div> +</div> +<p><strong>Important notes</strong></p> +<div class="admonition note"> +<p class="first admonition-title">Note</p> +<p class="last">This means that edges returned by a query can contain deleted vertices. Clients are responsible for checking validity of the vertices.</p> +</div> +</div> +<div class="section" id="delete-all-post-mutate-vertex-deleteall-servicename-columnname"> +<h3>Delete All - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/mutate/vertex/deleteAll/:serviceName/:columnName</span></code><a class="headerlink" href="#delete-all-post-mutate-vertex-deleteall-servicename-columnname" title="Permalink to this headline">¶</a></h3> +<p>This is a <strong>very expensive</strong> operation. If youâre interested in what goes on under the hood, please refer to the following pseudocode:</p> +<div class="code python highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">vertices</span> <span class="o">=</span> <span class="n">vertex</span> <span class="nb">list</span> <span class="n">to</span> <span class="n">delete</span> + <span class="k">for</span> <span class="n">vertex</span> <span class="ow">in</span> <span class="n">vertices</span> + <span class="n">labels</span> <span class="o">=</span> <span class="n">fetch</span> <span class="nb">all</span> <span class="n">labels</span> <span class="n">that</span> <span class="n">this</span> <span class="n">vertex</span> <span class="ow">is</span> <span class="n">included</span><span class="o">.</span> + <span class="k">for</span> <span class="n">label</span> <span class="ow">in</span> <span class="n">labels</span> + <span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">label</span><span class="o">.</span><span class="n">indices</span> + <span class="n">edges</span> <span class="o">=</span> <span class="n">G</span><span class="o">.</span><span class="n">read</span> <span class="k">with</span> <span class="n">limit</span> <span class="mi">50</span><span class="n">K</span> + <span class="k">for</span> <span class="n">edge</span> <span class="ow">in</span> <span class="n">edges</span> + <span class="n">edge</span><span class="o">.</span><span class="n">delete</span> +</pre></div> +</div> +<p>The total complexity is O(L L.I) reads + O(L L.I 50K) writes, worst case. <strong>If the vertex youâre trying to delete has more than 50K edges, the deletion will not be consistent</strong>.</p> +</div> +<div class="section" id="update-post-mutate-vertex-insert-servicename-columnname"> +<h3>Update - POST /mutate/vertex/insert/:serviceName/:columnName<a class="headerlink" href="#update-post-mutate-vertex-insert-servicename-columnname" title="Permalink to this headline">¶</a></h3> +<p>Basically update on Vertex is same with insert overwrite so use insert for update.</p> +</div> +<div class="section" id="increment"> +<h3>Increment<a class="headerlink" href="#increment" title="Permalink to this headline">¶</a></h3> +<p>Not yet implemented; stay tuned.</p> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="../query/index.html" class="btn btn-neutral float-right" title="Query APIs" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="mutate_edge.html" class="btn btn-neutral float-left" title="Manage Edges" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2018, s2graph + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file Added: incubator/s2graph/site/docs/api/query/index.html URL: http://svn.apache.org/viewvc/incubator/s2graph/site/docs/api/query/index.html?rev=1856470&view=auto ============================================================================== --- incubator/s2graph/site/docs/api/query/index.html (added) +++ incubator/s2graph/site/docs/api/query/index.html Thu Mar 28 11:04:32 2019 @@ -0,0 +1,240 @@ + + +<!DOCTYPE html> +<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> +<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Query APIs — S2Graph 0.0.2 documentation</title> + + + + + + + + + <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> + + + <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> + <script type="text/javascript" src="../../_static/jquery.js"></script> + <script type="text/javascript" src="../../_static/underscore.js"></script> + <script type="text/javascript" src="../../_static/doctools.js"></script> + <script type="text/javascript" src="../../_static/language_data.js"></script> + + <script type="text/javascript" src="../../_static/js/theme.js"></script> + + + + + <link rel="stylesheet" href="../../_static/css/s2graph_style.css" type="text/css" /> + <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> + <link rel="index" title="Index" href="../../genindex.html" /> + <link rel="search" title="Search" href="../../search.html" /> + <link rel="next" title="Query Options" href="query_options.html" /> + <link rel="prev" title="Manage Vertices (Optional)" href="../mutate/mutate_vertex.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="../../index.html" class="icon icon-home"> S2Graph + + + + </a> + + + + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">S2Graph Documentation</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="../../getting_started/index.html">Getting Started</a></li> +<li class="toctree-l1"><a class="reference internal" href="../../getting_started/your_first_graph.html">Your First S2Graph</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="../index.html">HTTP API Glossary</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="../management/index.html">Management APIs</a></li> +<li class="toctree-l2"><a class="reference internal" href="../mutate/index.html">Mutate APIs</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Query APIs</a><ul> +<li class="toctree-l3"><a class="reference internal" href="query_options.html">Query Options</a></li> +<li class="toctree-l3"><a class="reference internal" href="query_edge.html">Edge Queries</a></li> +<li class="toctree-l3"><a class="reference internal" href="query_vertex.html">Query Vertices</a></li> +</ul> +</li> +</ul> +</li> +</ul> + + + + </div> + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="../../index.html">S2Graph</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="../../index.html">Docs</a> »</li> + + <li><a href="../index.html">HTTP API Glossary</a> »</li> + + <li>Query APIs</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="../../_sources/api/query/index.rst.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + <div class="section" id="query-apis"> +<h1>Query APIs<a class="headerlink" href="#query-apis" title="Permalink to this headline">¶</a></h1> +<p>Once you have your graph data uploaded to S2Graph, you can traverse your graph using our query APIs. +S2Graph query DSL define <code class="docutils literal notranslate"><span class="pre">breadth</span> <span class="pre">first</span> <span class="pre">search(BFS)</span></code> and various options for <code class="docutils literal notranslate"><span class="pre">ranking</span></code> subgraph that BFS return. +Query DSL has many options for ranking and filtering.</p> +<p>Contents:</p> +<div class="toctree-wrapper compound"> +<ul> +<li class="toctree-l1"><a class="reference internal" href="query_options.html">Query Options</a><ul> +<li class="toctree-l2"><a class="reference internal" href="query_options.html#query-level-options">Query Level Options</a></li> +<li class="toctree-l2"><a class="reference internal" href="query_options.html#step-level-option">Step Level Option</a></li> +<li class="toctree-l2"><a class="reference internal" href="query_options.html#query-param-level-option">Query Param Level Option</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="query_edge.html">Edge Queries</a><ul> +<li class="toctree-l2"><a class="reference internal" href="query_edge.html#checkedges-post-graphs-checkedges">checkEdges - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/graphs/checkEdges</span></code></a></li> +<li class="toctree-l2"><a class="reference internal" href="query_edge.html#getedges-post-graphs-getedges">getEdges - <code class="docutils literal notranslate"><span class="pre">POST</span> <span class="pre">/graphs/getEdges</span></code></a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="query_vertex.html">Query Vertices</a><ul> +<li class="toctree-l2"><a class="reference internal" href="query_vertex.html#post-graphs-getvertices">POST - <code class="docutils literal notranslate"><span class="pre">/graphs/getVertices</span></code></a></li> +</ul> +</li> +</ul> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="query_options.html" class="btn btn-neutral float-right" title="Query Options" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="../mutate/mutate_vertex.html" class="btn btn-neutral float-left" title="Manage Vertices (Optional)" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + © Copyright 2018, s2graph + + </p> + </div> + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>. + +</footer> + + </div> + </div> + + </section> + + </div> + + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file
