<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>devkuma – グラフデータベース</title>
    <link>https://www.devkuma.com/jp/tags/%E3%82%B0%E3%83%A9%E3%83%95%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9/</link>
    <image>
      <url>https://www.devkuma.com/jp/tags/%E3%82%B0%E3%83%A9%E3%83%95%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9/logo/180x180.jpg</url>
      <title>グラフデータベース</title>
      <link>https://www.devkuma.com/jp/tags/%E3%82%B0%E3%83%A9%E3%83%95%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9/</link>
    </image>
    <description>Recent content in グラフデータベース on devkuma</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>jp</language>
    <managingEditor>kc@example.com (kc kim)</managingEditor>
    <webMaster>kc@example.com (kc kim)</webMaster>
    <copyright>The devkuma</copyright>
    
	  <atom:link href="https://www.devkuma.com/jp/tags/%E3%82%B0%E3%83%A9%E3%83%95%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9/index.xml" rel="self" type="application/rss+xml" />
    
    
      
        
      
    
    
    <item>
      <title>グラフデータベース・クイックスタート</title>
      <link>https://www.devkuma.com/jp/docs/graph-database/quick-start/</link>
      <pubDate>Wed, 27 Jul 2022 07:48:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/graph-database/quick-start/</guid>
      <description>
        
        
        &lt;h2 id=&#34;グラフデータベースとは&#34;&gt;グラフデータベースとは&lt;/h2&gt;
&lt;p&gt;グラフデータベースはグラフ構造を保存・処理する。リレーショナルデータベースでも関係を表現できるが、適切なスキーマ、複雑なクエリ、高コストなJOINが必要になりやすい。グラフデータベースはホワイトボードの図のように接続データを直感的に扱える一方、関係のないデータには適さない。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/graph-database/graph-data-model.png&#34; alt=&#34;グラフデータモデル&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;グラフはノードとエッジを持つ。&lt;/li&gt;
&lt;li&gt;ノードはラベルとKey-Valueプロパティを持つ。&lt;/li&gt;
&lt;li&gt;エッジはラベル、方向、開始ノード、終了ノードを持つ。&lt;/li&gt;
&lt;li&gt;エッジもプロパティを持てる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;dockerで試す&#34;&gt;Dockerで試す&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;% git clone https://github.com/krlawrence/graph.git
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;% cd graph/sample-data
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;% docker run -it --rm -v `pwd`:/mydata tinkerpop/gremlin-console
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; :load /mydata/load-air-routes-graph-34.groovy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;gremlinで探索する&#34;&gt;Gremlinで探索する&lt;/h2&gt;
&lt;p&gt;Gremlinのトラバーサルは通常、グラフトラバーサルソース&lt;code&gt;g&lt;/code&gt;から始まる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().count()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;3619
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).count()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;3374
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).has(&amp;#39;code&amp;#39;,&amp;#39;ICN&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;v[122]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).has(&amp;#39;code&amp;#39;,&amp;#39;ICN&amp;#39;).valueMap()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;[country:[KR],code:[ICN],city:[Seoul],icao:[RKSI]]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;V()&lt;/code&gt;は頂点、&lt;code&gt;hasLabel&lt;/code&gt;はラベル、&lt;code&gt;has&lt;/code&gt;はプロパティを絞り込み、&lt;code&gt;valueMap&lt;/code&gt;はプロパティを返す。&lt;/p&gt;
&lt;h3 id=&#34;リレーションシップをたどる&#34;&gt;リレーションシップをたどる&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).has(&amp;#39;code&amp;#39;,&amp;#39;ICN&amp;#39;).out(&amp;#39;route&amp;#39;).count()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;144
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).has(&amp;#39;code&amp;#39;,&amp;#39;ICN&amp;#39;).out(&amp;#39;route&amp;#39;).values(&amp;#39;code&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;BKK
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;SVO
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;HND
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;乗り継ぎ1回の重複を&lt;code&gt;dedup()&lt;/code&gt;で除くと1817空港になる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).has(&amp;#39;code&amp;#39;,&amp;#39;ICN&amp;#39;).out(&amp;#39;route&amp;#39;).out(&amp;#39;route&amp;#39;).dedup().count()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;1817
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;直行便で到達できる空港を除くと1673、仁川から金浦へ戻る2区間ルートは次のように取得できる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).has(&amp;#39;code&amp;#39;,&amp;#39;ICN&amp;#39;).out(&amp;#39;route&amp;#39;).aggregate(&amp;#39;nonstop&amp;#39;).out(&amp;#39;route&amp;#39;).where(without(&amp;#39;nonstop&amp;#39;)).dedup().count()
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;1673
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).has(&amp;#39;code&amp;#39;,&amp;#39;ICN&amp;#39;).out(&amp;#39;route&amp;#39;).out(&amp;#39;route&amp;#39;).has(&amp;#39;code&amp;#39;,&amp;#39;GMP&amp;#39;).path().by(&amp;#39;code&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;[ICN,HND,GMP]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;[ICN,KIX,GMP]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;[ICN,NGO,GMP]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;韓国から日本への便を出発空港別に集計する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).has(&amp;#39;country&amp;#39;,&amp;#39;KR&amp;#39;).as(&amp;#39;kr&amp;#39;).out(&amp;#39;route&amp;#39;).has(&amp;#39;country&amp;#39;,&amp;#39;JP&amp;#39;).select(&amp;#39;kr&amp;#39;).groupCount().by(&amp;#39;code&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;[ICN:27,TAE:5,GMP:3,CJU:4,PUS:6]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最長路線はエッジの&lt;code&gt;dist&lt;/code&gt;を並べ替えて取得でき、仁川―新千歳の882マイルである。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;gremlin&amp;gt; g.V().hasLabel(&amp;#39;airport&amp;#39;).has(&amp;#39;country&amp;#39;,&amp;#39;KR&amp;#39;).outE(&amp;#39;route&amp;#39;).order().by(&amp;#39;dist&amp;#39;,desc).inV().has(&amp;#39;country&amp;#39;,&amp;#39;JP&amp;#39;).path().by(&amp;#39;code&amp;#39;).by(&amp;#39;dist&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;==&amp;gt;[ICN,882,CTS]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;特徴と難しさ&#34;&gt;特徴と難しさ&lt;/h2&gt;
&lt;p&gt;接続データを容易にたどれるが、参照するノードやエッジが数百万規模になると応答は遅くなる。一般的なクエリを効率よく処理できるようグラフを設計し、グラフ保存の利点がないデータは他のデータベースと組み合わせることが重要である。&lt;/p&gt;
&lt;h2 id=&#34;参考文献&#34;&gt;参考文献&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://kelvinlawrence.net/book/Gremlin-Graph-Guide.html&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Practical Gremlin&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.oreilly.com/library/view/graph-databases/9781449356255/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;O&amp;rsquo;Reilly Graph Databases&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tinkerpop.apache.org/docs/current/reference/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;TinkerPopドキュメント&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>データベース</category>
      
      <category>グラフデータベース</category>
      
      <category>Gremlin</category>
      
    </item>
    
    <item>
      <title>Apache TinkerPopとは</title>
      <link>https://www.devkuma.com/jp/docs/graph-database/apache-tinkerpop/</link>
      <pubDate>Thu, 28 Jul 2022 18:47:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/graph-database/apache-tinkerpop/</guid>
      <description>
        
        
        &lt;h2 id=&#34;apache-tinkerpopとは&#34;&gt;Apache TinkerPopとは&lt;/h2&gt;
&lt;p&gt;Apache TinkerPopは、グラフ計算のためのフレームワークである。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://tinkerpop.apache.org&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Apache TinkerPop&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;個々のグラフデータベースを覆う抽象化レイヤーとして設計されており、さまざまなグラフデータベースを共通の方法で操作できるようにすることを目標としている。&lt;/p&gt;
&lt;p&gt;すでにNeo4j、JanusGraph、Amazon Neptune、Azure Cosmos DBをはじめ、さまざまなクラウドベースおよびオープンソースのデータベースに対応している。&lt;/p&gt;
&lt;p&gt;このフレームワークは、おおむね次の要素で構成される。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JavaベースのCore API&lt;/li&gt;
&lt;li&gt;グラフトラバーサル言語Gremlin&lt;/li&gt;
&lt;li&gt;クライアントとクエリやデータを交換するGremlin Server&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;グラフトラバーサル言語gremlin&#34;&gt;グラフトラバーサル言語：Gremlin&lt;/h2&gt;
&lt;p&gt;Gremlinは、グラフというデータ構造の操作に特化した言語であり、リレーショナルデータベースにおけるSQLと同様の役割を持つ。&lt;/p&gt;
&lt;p&gt;Gremlinではクエリを簡潔に記述できる。RDBMSでもグラフを表現できるが、SQLでクエリを記述するとJOINが増え、複雑になりやすい。一方、GremlinはJOINを使わずにメソッドチェーンで処理を簡潔につなげられるため、可読性が高い。&lt;/p&gt;
&lt;p&gt;次の例は、JOINを含む単純なSQLクエリとGremlinクエリを比較したものである。ただし、データモデルが異なるため、完全に対等な比較ではない。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-SQL&#34; data-lang=&#34;SQL&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;SELECT&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Products&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;ProductName&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;FROM&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Products&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;INNER&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;JOIN&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Categories&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;        &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ON&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Categories&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;CategoryID&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Products&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;CategoryID&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;     &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;WHERE&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;Categories&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;CategoryName&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;Beverages&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;g.V().has(&amp;#34;name&amp;#34;,&amp;#34;Beverages&amp;#34;).in(&amp;#34;inCategory&amp;#34;).values(&amp;#34;name&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;言語別のgremlinライブラリ&#34;&gt;言語別のGremlinライブラリ&lt;/h2&gt;
&lt;p&gt;PythonやJavaScriptなどからGremlinトラバーサルを記述できる公式ライブラリが提供されている。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://tinkerpop.apache.org/docs/current/reference/#gremlin-python&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://tinkerpop.apache.org/docs/current/reference/#gremlin-python&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://tinkerpop.apache.org/docs/current/reference/#gremlin-javascript&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://tinkerpop.apache.org/docs/current/reference/#gremlin-dotnet&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;http://tinkerpop.apache.org/docs/current/reference/#gremlin-dotnet&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Gremlin-PythonやGremlin-JavaScriptなどの各言語向けライブラリは、基本的にその言語で記述されたトラバーサルからバイトコードを生成し、JVMへ送信する。&lt;/p&gt;
&lt;h2 id=&#34;amazon-neptuneとの関係&#34;&gt;Amazon Neptuneとの関係&lt;/h2&gt;
&lt;p&gt;Amazon Neptuneでは、クエリ言語としてGremlinとSPARQLを利用できる。多くの場合、Gremlinが自然な選択肢になるだろう。SPARQLは名前だけでなく、構文もSQLに似ている。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;SELECT&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;DISTINCT&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;WHERE&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#a40000&#34;&gt;{&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;person&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;label&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;person&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;person&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;age&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;age&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;person&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;e&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;created&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;project&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;project&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;project&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;v&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;lang&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;lang&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;FILTER&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;age&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;30&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;?&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;lang&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;==&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;java&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;)&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a40000&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Gremlinはノード、エッジ、プロパティからなるプロパティグラフモデルを基盤とする。一方、SPARQLは主語、述語、目的語からなるトリプルストアモデルを基盤とするため、概念的にはGremlinのほうがグラフ理論に近いといえる。&lt;/p&gt;

      </description>
      
      <category>データベース</category>
      
      <category>グラフデータベース</category>
      
    </item>
    
    <item>
      <title>Neo4jの概要 - 主な特徴と動作環境</title>
      <link>https://www.devkuma.com/jp/docs/neo4j/overview/</link>
      <pubDate>Fri, 28 Oct 2022 01:02:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/neo4j/overview/</guid>
      <description>
        
        
        &lt;h2 id=&#34;neo4jの概要&#34;&gt;Neo4jの概要&lt;/h2&gt;
&lt;p&gt;Neo4jは、グラフ構造のデータモデル&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;を扱うデータベース管理システム（DBMS）であり、グラフデータベース&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;に分類される。&lt;/p&gt;
&lt;p&gt;Neo4jは最も広く利用されているグラフデータベースの一つである。RDBMSの性能上の課題を解決するため2000年に開発が始まり、2002年に初期版が公開された。2007年にオープンソース化され、2010年にバージョン1.0がリリースされた。実装言語はJavaである。&lt;/p&gt;
&lt;p&gt;スキーマレスなデータ構造、開発の容易さ、ACIDトランザクションなどが評価され、グラフデータに適したデータベースアーキテクチャとして世界的に注目されている。InfoWorld&amp;rsquo;s 2014 Technology of the Year Awardにも選出されている。&lt;/p&gt;
&lt;h2 id=&#34;neo4jの主な特徴&#34;&gt;Neo4jの主な特徴&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;強力なトランザクション
&lt;ul&gt;
&lt;li&gt;原子性、一貫性、分離性、永続性を備えたACID準拠のトランザクションにより、データの整合性を保つ。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;柔軟なスキーマ
&lt;ul&gt;
&lt;li&gt;プロパティグラフモデルに基づき、自然な形でデータをモデル化できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;高性能なトラバーサル
&lt;ul&gt;
&lt;li&gt;Index-free adjacencyにより、グラフの規模や複雑さに左右されにくい高速なトラバーサルを実現する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;クエリ言語
&lt;ul&gt;
&lt;li&gt;宣言型グラフクエリ言語Cypherを使用する。直感的で、SQLより少ないコードで記述できる場合が多い。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;主要な言語とフレームワークへの対応
&lt;ul&gt;
&lt;li&gt;Java、C#、Python、JavaScript用の公式ドライバーを提供する。コミュニティはSpring Data、Django ORM、Laravel、JDBCなども支援する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;クラウド対応
&lt;ul&gt;
&lt;li&gt;AWS、Microsoft Azure、Google Cloud Platformで利用でき、公式Dockerイメージで容易に導入できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;マルチデータベース
&lt;ul&gt;
&lt;li&gt;Neo4j 4.0以降は、クラスターごとに複数のデータベースを扱える。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;リアクティブアーキテクチャ
&lt;ul&gt;
&lt;li&gt;Neo4j 4.0以降はリアクティブアーキテクチャによって応答性、弾力性、耐障害性を高めている。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;リレーショナルデータベースとの比較&#34;&gt;リレーショナルデータベースとの比較&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;リレーショナルデータベース&lt;/th&gt;
					&lt;th&gt;Neo4j&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;データストレージ&lt;/td&gt;
					&lt;td&gt;データを定義済みの行と列を持つテーブルに分割するため、接続データのクエリ効率が低下することがある。&lt;/td&gt;
					&lt;td&gt;Index-free adjacencyを持つグラフストレージにより、トランザクションと関係の処理が高速になる。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;データモデル&lt;/td&gt;
					&lt;td&gt;論理モデルを物理モデルへ変換する必要があり、型やソースを事前に把握するため変更コストが高い。&lt;/td&gt;
					&lt;td&gt;論理モデルと物理モデルが一致し、型やソースを随時追加・変更できる。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;クエリ性能&lt;/td&gt;
					&lt;td&gt;JOINや関係の数と深さに影響される。&lt;/td&gt;
					&lt;td&gt;関係の数や深さにかかわらず低遅延のグラフ処理を提供する。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;クエリ言語&lt;/td&gt;
					&lt;td&gt;SQLはJOINが増えるほど複雑になる。&lt;/td&gt;
					&lt;td&gt;Cypherは関係クエリを表現力豊かに記述できる。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;トランザクション&lt;/td&gt;
					&lt;td&gt;ACIDトランザクションをサポートする。&lt;/td&gt;
					&lt;td&gt;ACIDトランザクションをサポートする。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;データセンター効率&lt;/td&gt;
					&lt;td&gt;統合は可能だが、スケールアップとスケールアウトのコストが高い。&lt;/td&gt;
					&lt;td&gt;データと関係をまとめて保存し、効率的なサーバー統合とハードウェア利用を可能にする。&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;neo4jのユースケース&#34;&gt;Neo4jのユースケース&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;セキュリティの強化
&lt;ul&gt;
&lt;li&gt;従来はアカウント、IPアドレス、端末など個別のデータ点を検査する。Neo4jはそれらの関係も分析し、従来手法が見逃すパターンを検出できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;検索機能の強化
&lt;ul&gt;
&lt;li&gt;グラフベースの検索では、追加のキーワードを入力しなくても関連情報を表示できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;neo4jの動作環境&#34;&gt;Neo4jの動作環境&lt;/h2&gt;
&lt;p&gt;以下はNeo4j 4.xの要件である。&lt;/p&gt;
&lt;h3 id=&#34;対応プラットフォーム&#34;&gt;対応プラットフォーム&lt;/h3&gt;
&lt;p&gt;物理、仮想、コンテナを問わずx86_64アーキテクチャをサポートする。&lt;/p&gt;
&lt;h3 id=&#34;ハードウェア&#34;&gt;ハードウェア&lt;/h3&gt;
&lt;p&gt;個人利用および開発環境：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;項目&lt;/th&gt;
					&lt;th&gt;仕様&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CPU&lt;/td&gt;
					&lt;td&gt;Intel Core i3以上、Core i7推奨&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;メモリ&lt;/td&gt;
					&lt;td&gt;2 GB以上、16 GB以上推奨&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ストレージ&lt;/td&gt;
					&lt;td&gt;10 GB SATA以上、SATA ExpressまたはNVMe SSD推奨&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;クラウド環境：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;項目&lt;/th&gt;
					&lt;th&gt;仕様&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CPU&lt;/td&gt;
					&lt;td&gt;2 vCPU以上、16以上推奨。可能ならXeon&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;メモリ&lt;/td&gt;
					&lt;td&gt;2 GB以上。実際の要件はワークロードとグラフサイズによる&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ストレージ&lt;/td&gt;
					&lt;td&gt;10 GBブロックストレージ以上、NVMe SSD推奨。容量はDBサイズによる&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;オンプレミスサーバー：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;項目&lt;/th&gt;
					&lt;th&gt;仕様&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;CPU&lt;/td&gt;
					&lt;td&gt;Intel Xeonプロセッサー&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;メモリ&lt;/td&gt;
					&lt;td&gt;8 GB以上。実際の要件はワークロードとグラフサイズによる&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ストレージ&lt;/td&gt;
					&lt;td&gt;SATA 7.2K RPM 6 Gbps以上、NVMe SSD推奨。容量はDBサイズによる&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;ソフトウェア&#34;&gt;ソフトウェア&lt;/h3&gt;
&lt;p&gt;互換性のあるJVMが必要である。Neo4j 3.xはJava 8、Neo4j 4.xはJava 11を必要とする。&lt;/p&gt;
&lt;p&gt;個人利用および開発環境：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;OS&lt;/th&gt;
					&lt;th&gt;バージョン&lt;/th&gt;
					&lt;th&gt;対応JDK&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;macOS&lt;/td&gt;
					&lt;td&gt;10.14以降&lt;/td&gt;
					&lt;td&gt;Zulu JDK 11&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Ubuntu Desktop&lt;/td&gt;
					&lt;td&gt;16.04以降&lt;/td&gt;
					&lt;td&gt;OpenJDK 11、Oracle JDK 11、Zulu JDK 11&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Debian&lt;/td&gt;
					&lt;td&gt;9以降&lt;/td&gt;
					&lt;td&gt;OpenJDK 11、Oracle JDK 11、Zulu JDK 11&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;SUSE&lt;/td&gt;
					&lt;td&gt;15以降&lt;/td&gt;
					&lt;td&gt;Oracle JDK 11&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Windows&lt;/td&gt;
					&lt;td&gt;10&lt;/td&gt;
					&lt;td&gt;Oracle JDK 11、Zulu JDK 11&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;クラウド環境：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;OS&lt;/th&gt;
					&lt;th&gt;対応JDK&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Ubuntu Server 16.04以降&lt;/td&gt;
					&lt;td&gt;OpenJDK 11、Oracle JDK 11、Zulu JDK 11&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Red Hat Enterprise Linux Server 7.5以降&lt;/td&gt;
					&lt;td&gt;Red Hat OpenJDK 11、Oracle JDK 11、Zulu JDK 11&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;CentOS Server 7.7&lt;/td&gt;
					&lt;td&gt;OpenJDK 11&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Amazon Linux 2 AMI&lt;/td&gt;
					&lt;td&gt;Amazon Corretto 11、OpenJDK 11、Oracle JDK 11&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Windows Server 2016以降&lt;/td&gt;
					&lt;td&gt;Oracle JDK 11、Zulu JDK 11&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;neo4jのライセンス&#34;&gt;Neo4jのライセンス&lt;/h2&gt;
&lt;p&gt;Neo4j Community EditionはGNU General Public License（GPLv3.0）で提供され、条件に従って複製、配布、ソースコードの公開、変更が認められる。&lt;/p&gt;
&lt;h2 id=&#34;neo4jの参考情報&#34;&gt;Neo4jの参考情報&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://neo4j.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Neo4j製品ページ&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://neo4j.com/download/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Neo4jのダウンロード&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/neo4j/neo4j&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Neo4jソースコード（GitHub）&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;グラフ構造のデータモデルとは、最小単位であるノードと、ノード間のリレーションシップからなるデータ構造である。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;グラフデータベースはグラフ理論を基礎とするNoSQLデータベースの一種である。テーブルに保存するリレーショナルデータベースとは異なり、複雑な関係に基づいてデータを処理できる。固定スキーマが不要で、複雑な階層のプロパティを管理でき、表現力の高いクエリやGUIツールを利用できる。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

      </description>
      
      <category>Neo4j</category>
      
      <category>グラフデータベース</category>
      
    </item>
    
    <item>
      <title>Neo4jの用語</title>
      <link>https://www.devkuma.com/jp/docs/neo4j/terms/</link>
      <pubDate>Fri, 12 May 2023 14:40:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/neo4j/terms/</guid>
      <description>
        
        
        &lt;h2 id=&#34;関連情報&#34;&gt;関連情報&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://www.devkuma.com/jp/docs/graph-database/overview/#%e3%82%b0%e3%83%a9%e3%83%95%e7%90%86%e8%ab%96%e3%81%ae%e7%94%a8%e8%aa%9e&#34;&gt;グラフ理論の用語&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;ソフトウェア&#34;&gt;ソフトウェア&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;用語&lt;/th&gt;
					&lt;th&gt;説明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Neo4j&lt;/td&gt;
					&lt;td&gt;グラフデータベースの一つ&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Bolt&lt;/td&gt;
					&lt;td&gt;Neo4jの公式言語ドライバープロトコル&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;webツール&#34;&gt;Webツール&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;用語&lt;/th&gt;
					&lt;th&gt;説明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Neo4j Browser&lt;/td&gt;
					&lt;td&gt;Neo4jを操作し、データのクエリと可視化を行うWebツール&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Sandbox&lt;/td&gt;
					&lt;td&gt;Neo4j Browserで利用する一時的な無料テストデータベース。数日後に失効する&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;言語&#34;&gt;言語&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;用語&lt;/th&gt;
					&lt;th&gt;説明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Cypherクエリ&lt;/td&gt;
					&lt;td&gt;Neo4jのクエリ言語&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;句&lt;/td&gt;
					&lt;td&gt;&lt;code&gt;MATCH&lt;/code&gt;、&lt;code&gt;CREATE&lt;/code&gt;、&lt;code&gt;WHERE&lt;/code&gt;など、Cypherクエリの構成要素&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;リソース&#34;&gt;リソース&lt;/h2&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;用語&lt;/th&gt;
					&lt;th&gt;説明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;ノード&lt;/td&gt;
					&lt;td&gt;グラフ内のデータレコード、エンティティ、またはオブジェクト&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;リレーションシップ&lt;/td&gt;
					&lt;td&gt;ノードを接続する情報。エッジとも呼ばれる&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;プロパティ&lt;/td&gt;
					&lt;td&gt;ノードやリレーションシップに付随するKey-Value形式のデータ&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ラベル&lt;/td&gt;
					&lt;td&gt;ノードの役割を示すラベル。オントロジーにおけるRoleに相当する&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;タイプ&lt;/td&gt;
					&lt;td&gt;リレーションシップの種類を表す&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;グラフデータモデリング&#34;&gt;グラフデータモデリング&lt;/h2&gt;
&lt;h3 id=&#34;グラフデータモデリング-1&#34;&gt;グラフデータモデリング&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ノードとリレーションシップを用いて、データを接続されたグラフとして記述するプロセスである。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ノード&#34;&gt;ノード&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;グラフを構成する最も基本的な単位である。&lt;/li&gt;
&lt;li&gt;概念的に一意な対象を表す。&lt;/li&gt;
&lt;li&gt;リレーションシップを通じて他のノードと接続し、一つ以上のラベルとプロパティを持てる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;リレーションシップ&#34;&gt;リレーションシップ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ノード間の接続や相互作用を表す。&lt;/li&gt;
&lt;li&gt;常に一方向の向きを持ち、別のノードだけでなく同じノード自身にも接続できる。&lt;/li&gt;
&lt;li&gt;一つ以上のプロパティを持てる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ラベル&#34;&gt;ラベル&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;類似するノードをグループ化して分類する。&lt;/li&gt;
&lt;li&gt;クエリの最適化に使われる。ラベルがなければすべてのノードが検索対象となる。ラベル自体はプロパティを持たない。&lt;/li&gt;
&lt;li&gt;複数のノードを一つの集合にまとめる、名前付きのグラフ構造である。&lt;/li&gt;
&lt;li&gt;同じラベルを持つノードは同じ集合に属する。&lt;/li&gt;
&lt;li&gt;ドメインオブジェクトの役割からラベルを特定できる。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;プロパティ&#34;&gt;プロパティ&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ノードやリレーションシップに保存するデータをKey-Value形式で保持する。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一般的な用語との比較&#34;&gt;一般的な用語との比較&lt;/h2&gt;
&lt;p&gt;Neo4j、グラフ理論、オントロジーでほぼ同じ意味を持つ用語を比較する。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;Neo4j&lt;/th&gt;
					&lt;th&gt;グラフ理論&lt;/th&gt;
					&lt;th&gt;オントロジー&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;Node&lt;/td&gt;
					&lt;td&gt;Node&lt;/td&gt;
					&lt;td&gt;Entity&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Relationship&lt;/td&gt;
					&lt;td&gt;Edge&lt;/td&gt;
					&lt;td&gt;Relation&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;Label&lt;/td&gt;
					&lt;td&gt;Label&lt;/td&gt;
					&lt;td&gt;Role&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;

      </description>
      
      <category>Neo4j</category>
      
      <category>グラフデータベース</category>
      
    </item>
    
    <item>
      <title>macOSにNeo4jをダウンロードしてインストールする</title>
      <link>https://www.devkuma.com/jp/docs/neo4j/installation-macos/</link>
      <pubDate>Fri, 12 May 2023 16:03:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/neo4j/installation-macos/</guid>
      <description>
        
        
        &lt;h2 id=&#34;macosへのインストール&#34;&gt;macOSへのインストール&lt;/h2&gt;
&lt;p&gt;macOSにNeo4jをインストールする前に、システム要件を確認し、環境が適合していることを確かめる。&lt;/p&gt;
&lt;h2 id=&#34;unixコンソールアプリケーション&#34;&gt;Unixコンソールアプリケーション&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;OpenJDK 17またはOracle Java 17が未インストールの場合はインストールする。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://neo4j.com/download-center&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Neo4j Download Center&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;から最新リリースをダウンロードする。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;プラットフォームに適したtar.gzディストリビューションを選択する。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;ダウンロードしたファイルのSHAハッシュが正しいことを必ず確認する。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;Neo4j Download Centerで、ダウンロードしたファイルの下にある項目をクリックして正しい&lt;code&gt;SHA-256&lt;/code&gt;ハッシュを確認する。&lt;/li&gt;
&lt;li&gt;プラットフォームに適したコマンドで、ダウンロードしたファイルの&lt;code&gt;SHA-256&lt;/code&gt;ハッシュを表示する。&lt;/li&gt;
&lt;li&gt;2つのハッシュが同じであることを確認する。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;filename&amp;gt;&lt;/code&gt;をアーカイブ名に置き換え、&lt;code&gt;tar -xf&lt;/code&gt;で展開する。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;例：&lt;code&gt;tar -xf neo4j-community-5.7.0-unix.tar.gz&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;
&lt;p&gt;展開したファイルをサーバー上の適切な場所に配置する。本稿では最上位ディレクトリを&lt;code&gt;NEO4J_HOME&lt;/code&gt;と呼ぶ。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Neo4j v5.4以降では、Neo4j Enterprise Editionを実行する前にライセンス契約への同意が必要である。Community Editionではこの手順を省略できる。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;商用ライセンスに同意するには、次のいずれかを使用する。詳細は&lt;a href=&#34;https://neo4j.com/terms/licensing/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Neo4jのライセンス&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;を参照する。
&lt;ul&gt;
&lt;li&gt;環境変数に&lt;code&gt;NEO4J_ACCEPT_LICENSE_AGREEMENT=yes&lt;/code&gt;を設定する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;NEO4J_HOME&amp;gt;/bin/neo4j-admin server license --accept-commercial&lt;/code&gt;を実行する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;評価版ライセンスに同意するには、次のいずれかを使用する。詳細は&lt;a href=&#34;https://neo4j.com/terms/enterprise_us/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;評価版契約&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;を参照する。
&lt;ul&gt;
&lt;li&gt;環境変数に&lt;code&gt;NEO4J_ACCEPT_LICENSE_AGREEMENT=eval&lt;/code&gt;を設定する。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;NEO4J_HOME&amp;gt;/bin/neo4j-admin server license --accept-evaluation&lt;/code&gt;を実行する。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;7&#34;&gt;
&lt;li&gt;Neo4jを起動する。&lt;/li&gt;
&lt;/ol&gt;
&lt;ul&gt;
&lt;li&gt;コンソールアプリケーションとして実行するには、&lt;code&gt;&amp;lt;NEO4J_HOME&amp;gt;/bin/neo4j console&lt;/code&gt;を実行する。&lt;/li&gt;
&lt;li&gt;バックグラウンドプロセスとして実行するには、&lt;code&gt;&amp;lt;NEO4J_HOME&amp;gt;/bin/neo4j start&lt;/code&gt;を実行する。&lt;/li&gt;
&lt;/ul&gt;
&lt;ol start=&#34;8&#34;&gt;
&lt;li&gt;
&lt;p&gt;Webブラウザで&lt;code&gt;http://localhost:7474&lt;/code&gt;を開く。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ユーザー名&lt;code&gt;neo4j&lt;/code&gt;と初期パスワード&lt;code&gt;neo4j&lt;/code&gt;で接続する。その後、パスワードの変更を求められる。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;コンソールモードで実行している場合は、&lt;code&gt;Ctrl-C&lt;/code&gt;を入力するとサーバーが停止する。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;コンソールモードでは、ログがターミナルに出力される。&lt;/p&gt;
&lt;h2 id=&#34;macosサービス&#34;&gt;macOSサービス&lt;/h2&gt;
&lt;p&gt;標準のmacOSシステムツールを使用し、&lt;code&gt;neo4j&lt;/code&gt;コマンドを基にサービスを作成する。&lt;/p&gt;
&lt;h2 id=&#34;macosのファイルディスクリプタ上限&#34;&gt;macOSのファイルディスクリプタ上限&lt;/h2&gt;
&lt;p&gt;データベースに多数のインデックスや接続がある場合、&lt;strong&gt;オープンファイルディスクリプタの上限&lt;/strong&gt;を引き上げる必要がある。macOSで現在の上限を確認するには&lt;code&gt;launchctl limit maxfiles&lt;/code&gt;を実行する。変更方法はmacOSのバージョンによって異なるため、適切なコマンドはOSのドキュメントで確認する。&lt;/p&gt;
&lt;p&gt;上限を10240以上に引き上げる場合は、&lt;a href=&#34;https://neo4j.com/docs/operations-manual/current/configuration/file-locations/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;neo4j.conf&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;にも次の設定を追加する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-properties&#34; data-lang=&#34;properties&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;server.jvm.additional&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;-XX:-MaxFDLimit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;この設定がないと、JVMのファイルディスクリプタ上限は10240を超えて増加しない。これはmacOSだけに適用される。他のOSでは、&lt;code&gt;MaxFDLimit&lt;/code&gt;のJVM設定を常に有効なままにする。&lt;/p&gt;
&lt;h2 id=&#34;原文&#34;&gt;原文&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://neo4j.com/docs/operations-manual/current/installation/osx/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;macOS installation - Operations Manual&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>Neo4j</category>
      
      <category>グラフデータベース</category>
      
    </item>
    
    <item>
      <title>macOSにHomebrewでNeo4jをインストールする</title>
      <link>https://www.devkuma.com/jp/docs/neo4j/installation-homebrew/</link>
      <pubDate>Fri, 12 May 2023 14:40:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/neo4j/installation-homebrew/</guid>
      <description>
        
        
        &lt;h2 id=&#34;neo4jのインストール&#34;&gt;Neo4jのインストール&lt;/h2&gt;
&lt;p&gt;HomebrewでNeo4jをインストールする。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-zsh&#34; data-lang=&#34;zsh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;% brew install neo4j
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;インストール後にバージョンを確認する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-zsh&#34; data-lang=&#34;zsh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;% neo4j --version
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;5.7.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;バージョンが正しく表示されればインストールは完了である。&lt;/p&gt;
&lt;h3 id=&#34;使用ポート&#34;&gt;使用ポート&lt;/h3&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;ポート&lt;/th&gt;
					&lt;th&gt;説明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;7687&lt;/td&gt;
					&lt;td&gt;Neo4jデータベースサービス&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;7474&lt;/td&gt;
					&lt;td&gt;管理コンソール（Neo4j Browser）のホスティング&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;初期パスワード&#34;&gt;初期パスワード&lt;/h3&gt;
&lt;p&gt;Neo4jの初期認証情報は次のとおりである。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;ID&lt;/th&gt;
					&lt;th&gt;パスワード&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;neo4j&lt;/td&gt;
					&lt;td&gt;neo4j&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;この初期パスワードは変更する必要がある。Web画面または次のコマンドで変更できる。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ neo4j-admin dbms set-initial-password &lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;{&lt;/span&gt;password&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;neo4jの起動&#34;&gt;Neo4jの起動&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ neo4j start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;起動エラー&#34;&gt;起動エラー&lt;/h3&gt;
&lt;p&gt;インストール後の起動時に、次のようなエラーで起動できない場合がある。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ neo4j start
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Failed to &lt;span style=&#34;color:#204a87&#34;&gt;read&lt;/span&gt; config /opt/homebrew/Cellar/neo4j/5.7.0/libexec/conf/neo4j.conf: Unrecognized setting. No declared setting with name: wrapper.java.additional.4. Cleanup the config or disable &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;server.config.strict_validation.enabled&amp;#39;&lt;/span&gt; to &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;continue&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Run with &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;--verbose&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;for&lt;/span&gt; a more detailed error message.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;メッセージの指示どおり、&lt;code&gt;/opt/homebrew/Cellar/neo4j/5.7.0/libexec/conf/neo4j.conf&lt;/code&gt;に次の設定を追加する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-properties&#34; data-lang=&#34;properties&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#c4a000&#34;&gt;server.config.strict_validation.enabled&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;neo4jの停止&#34;&gt;Neo4jの停止&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ neo4j stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;neo4jの状態確認&#34;&gt;Neo4jの状態確認&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ neo4j status
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;neo4j-browser管理コンソールを開く&#34;&gt;Neo4j Browser管理コンソールを開く&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ open http://localhost:7474
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;インストール後の初回起動時には、パスワードの変更を求められる。新しいパスワードを設定していない場合は変更が必要である。&lt;/p&gt;
&lt;h2 id=&#34;接続情報&#34;&gt;接続情報&lt;/h2&gt;
&lt;p&gt;アプリケーションからはHTTP/HTTPSまたはBoltプロトコルで接続できる。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;HTTPベースURL&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;http://localhost:7474/db/data
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;BoltベースURL&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bolt://localhost:7687
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;ディレクトリとファイルのパス&#34;&gt;ディレクトリとファイルのパス&lt;/h2&gt;
&lt;h3 id=&#34;ベースディレクトリ&#34;&gt;ベースディレクトリ&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/homebrew/Cellar/neo4j/5.7.0/libexec/import/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;設定ファイル&#34;&gt;設定ファイル&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/homebrew/Cellar/neo4j/5.7.0/libexec/conf/neo4j.conf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;プラグインディレクトリ&#34;&gt;プラグインディレクトリ&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/homebrew/Cellar/neo4j/5.7.0/libexec/plugins/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;データディレクトリ&#34;&gt;データディレクトリ&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/homebrew/var/neo4j/data/databases/neo4j/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;ログファイル&#34;&gt;ログファイル&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/homebrew/var/log/neo4j/neo4j.log
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
      
      <category>Neo4j</category>
      
      <category>グラフデータベース</category>
      
    </item>
    
    <item>
      <title>DockerによるNeo4jのインストール</title>
      <link>https://www.devkuma.com/jp/docs/neo4j/installation-docker/</link>
      <pubDate>Sat, 13 May 2023 22:33:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/neo4j/installation-docker/</guid>
      <description>
        
        
        &lt;h2 id=&#34;dockerイメージ&#34;&gt;Dockerイメージ&lt;/h2&gt;
&lt;p&gt;公式Dockerイメージを利用して、Docker環境にNeo4jをインストールする。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Neo4j公式イメージ
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://hub.docker.com/_/neo4j&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;https://hub.docker.com/_/neo4j&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;neo4j-dockerイメージで実行する&#34;&gt;Neo4j Dockerイメージで実行する&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --publish&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;7474:7474 &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --publish&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;7687:7687 &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --volume&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;$HOME&lt;/span&gt;/neo4j/data:/data &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  --env &lt;span style=&#34;color:#000&#34;&gt;NEO4J_AUTH&lt;/span&gt;&lt;span style=&#34;color:#ce5c00;font-weight:bold&#34;&gt;=&lt;/span&gt;neo4j/password &lt;span style=&#34;color:#4e9a06&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  neo4j
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;起動したら、次のURLへアクセスする。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;http://localhost:7474/
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Web画面が表示されたら、コマンドで設定した&lt;code&gt;neo4j/password&lt;/code&gt;で認証する。&lt;/p&gt;
&lt;h2 id=&#34;docker-composeで実行する&#34;&gt;Docker Composeで実行する&lt;/h2&gt;
&lt;h3 id=&#34;作業ディレクトリを作成する&#34;&gt;作業ディレクトリを作成する&lt;/h3&gt;
&lt;p&gt;適切な場所に作業ディレクトリを作成する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ mkdir neo4j
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;$ &lt;span style=&#34;color:#204a87&#34;&gt;cd&lt;/span&gt; neo4j
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;docker-composeファイルを作成する&#34;&gt;Docker Composeファイルを作成する&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;docker-compose.yml&lt;/code&gt;を作成し、次の内容を記述する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yml&#34; data-lang=&#34;yml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;version&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#39;3.1&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;services&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;neo4j&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;container_name&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;neo4j-server&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;image&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;neo4j&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;ports&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;7474&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;7474&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;7687&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;7687&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;volumes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;      &lt;/span&gt;- &lt;span style=&#34;color:#000&#34;&gt;data:/data&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;environment&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;      &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;NEO4J_AUTH&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;neo4j/password&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;volumes&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;  &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;data&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;    &lt;/span&gt;&lt;span style=&#34;color:#204a87;font-weight:bold&#34;&gt;driver&lt;/span&gt;&lt;span style=&#34;color:#000;font-weight:bold&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt; &lt;/span&gt;&lt;span style=&#34;color:#000&#34;&gt;local&lt;/span&gt;&lt;span style=&#34;color:#f8f8f8&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;docker-composeを起動する&#34;&gt;Docker Composeを起動する&lt;/h3&gt;
&lt;p&gt;コンテナを作成して起動する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-zsh&#34; data-lang=&#34;zsh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker-compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;-d&lt;/code&gt;（&lt;code&gt;--detach&lt;/code&gt;）オプションを指定すると、デタッチモード、つまりバックグラウンドで実行される。&lt;/p&gt;
&lt;h3 id=&#34;dockerコンテナの実行を確認する&#34;&gt;Dockerコンテナの実行を確認する&lt;/h3&gt;
&lt;p&gt;次のコマンドでNeo4jコンテナが実行中であることを確認する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-zsh&#34; data-lang=&#34;zsh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker ps -a
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-zsh&#34; data-lang=&#34;zsh&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;% docker ps -a
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                                      NAMES
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;bf181e1623d3   neo4j     &lt;span style=&#34;color:#4e9a06&#34;&gt;&amp;#34;tini -g -- /startup…&amp;#34;&lt;/span&gt;   &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;19&lt;/span&gt; seconds ago   Up &lt;span style=&#34;color:#0000cf;font-weight:bold&#34;&gt;18&lt;/span&gt; seconds   0.0.0.0:7474-&amp;gt;7474/tcp, 7473/tcp, 0.0.0.0:7687-&amp;gt;7687/tcp   neo4j-server
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
      </description>
      
      <category>Neo4j</category>
      
      <category>グラフデータベース</category>
      
      <category>Docker</category>
      
    </item>
    
    <item>
      <title>Neo4j Cypher入門</title>
      <link>https://www.devkuma.com/jp/docs/neo4j/intro-cypher/</link>
      <pubDate>Sun, 14 May 2023 02:30:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/neo4j/intro-cypher/</guid>
      <description>
        
        
        &lt;h2 id=&#34;cypherとは&#34;&gt;Cypherとは&lt;/h2&gt;
&lt;p&gt;Cypherは、Neo4jがデータベースクエリのために開発したグラフクエリ言語である。SQLに似た形式を持ち、強力で多様なデータ表現ができる。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/neo4j/sample-cypher.png&#34; alt=&#34;Cypherの例&#34;&gt;&lt;/p&gt;
&lt;p&gt;Neo4jの主要インターフェースとして、パターンとリレーションシップを視覚的に照合する方法を提供する。&lt;/p&gt;
&lt;p&gt;Cypherでは&lt;code&gt;(nodes)-[:ARE_CONNECTED_TO]-&amp;gt;(otherNodes)&lt;/code&gt;のようなパターンを使う。丸括弧&lt;code&gt;()&lt;/code&gt;は&lt;strong&gt;ノード&lt;/strong&gt;、角括弧&lt;code&gt;[]&lt;/code&gt;は&lt;strong&gt;リレーションシップ&lt;/strong&gt;、&lt;code&gt;-&lt;/code&gt;と&lt;code&gt;-&amp;gt;&lt;/code&gt;はノード間の&lt;strong&gt;リレーションシップの方向&lt;/strong&gt;を表す。&lt;/p&gt;
&lt;p&gt;表現力と効率に優れたクエリを記述し、グラフデータの作成、読み取り、更新、削除（CRUD）を実行できる。&lt;/p&gt;
&lt;h2 id=&#34;cypherの構文&#34;&gt;Cypherの構文&lt;/h2&gt;
&lt;p&gt;Cypherは人が読みやすいように設計されており、英単語とエンティティを表す図形を使った視覚的な構文を持つ。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/neo4j/cypher_graph_v1.jpg&#34; alt=&#34;Cypherグラフ v1&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Jenniferはグラフ技術が好きである。&lt;/li&gt;
&lt;li&gt;Jenniferは2018年からMichaelと友人である。&lt;/li&gt;
&lt;li&gt;JenniferはNeo4jで働いている。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;cypherのコメント&#34;&gt;Cypherのコメント&lt;/h3&gt;
&lt;p&gt;コメントは&lt;code&gt;//&lt;/code&gt;で始め、その後に任意のテキストを記述する。多くのプログラミング言語と同様に、2つのスラッシュ以降、その行の末尾までがコメントになる。&lt;/p&gt;
&lt;h2 id=&#34;cypherでノードを表現する&#34;&gt;Cypherでノードを表現する&lt;/h2&gt;
&lt;p&gt;CypherはパターンにASCIIアート&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;を使用するため、各要素を視覚的に表現する。プロパティグラフモデルの主な要素はノードとリレーションシップである。ノードはグラフ内のデータエンティティで、データモデルの名詞やオブジェクトに相当する。この例ではJennifer、Michael、GraphsがNeo4jのノードである。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/neo4j/cypher_graph_nodes.jpg&#34; alt=&#34;Cypherグラフのノード&#34;&gt;&lt;/p&gt;
&lt;p&gt;Cypherでは&lt;code&gt;(node)&lt;/code&gt;のように、ノードを丸括弧で囲む。この形はデータモデルの図でノードを表す円に似ている。&lt;/p&gt;
&lt;h3 id=&#34;ノード変数&#34;&gt;ノード変数&lt;/h3&gt;
&lt;p&gt;後からノードを参照するには、&lt;code&gt;(p:Person)&lt;/code&gt;や&lt;code&gt;(t:Thing)&lt;/code&gt;のように変数を指定する。&lt;code&gt;(person)&lt;/code&gt;や&lt;code&gt;(thing)&lt;/code&gt;のような長く説明的な名前も利用できる。プログラミング言語の変数と同様に名前を選び、以降のクエリで同じ名前を使う。&lt;/p&gt;
&lt;p&gt;空の丸括弧&lt;code&gt;()&lt;/code&gt;は匿名ノードを表す。ノード自体が戻り値に不要な場合に使う。匿名ノードは後から名前で返すことができない。&lt;/p&gt;
&lt;h3 id=&#34;ノードラベル&#34;&gt;ノードラベル&lt;/h3&gt;
&lt;p&gt;ノードラベルはプロパティグラフ内の類似ノードをグループ化する。ラベルはタグのように機能し、検索または作成するエンティティの種類を指定する。この例では&lt;code&gt;Person&lt;/code&gt;、&lt;code&gt;Technology&lt;/code&gt;、&lt;code&gt;Company&lt;/code&gt;がラベルである。&lt;/p&gt;
&lt;p&gt;ラベルはSQLで検索対象のテーブルを指定することに似ている。SQLが&lt;code&gt;Person&lt;/code&gt;、&lt;code&gt;Employee&lt;/code&gt;、&lt;code&gt;Customer&lt;/code&gt;テーブルを対象にできるように、Cypherも対象ラベルだけを検査できる。これによりエンティティを区別し、クエリ実行を最適化できる。可能な場合はノードラベルを使用することを推奨する。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ラベルを指定しない場合、Cypherは無関係なノードを除外するためデータベース内のすべてのノードを確認する。非常に大きなグラフではクエリに時間がかかる。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;例cypherのノード&#34;&gt;例：Cypherのノード&lt;/h3&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-cypher&#34; data-lang=&#34;cypher&#34;&gt;()                  // ラベルも変数もない匿名ノード。すべてのノードを参照できる
(p:Person)          // 変数はp、ラベルはPerson
(:Technology)       // 変数はなく、ラベルはTechnology
(work:Company)      // 変数はwork、ラベルはCompany
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;cypherでリレーションシップを表現する&#34;&gt;Cypherでリレーションシップを表現する&lt;/h2&gt;
&lt;p&gt;グラフデータベースを十分に活用するには、ノード間のリレーションシップも表現する。Cypherでは2つのノード間を矢印&lt;code&gt;--&amp;gt;&lt;/code&gt;または&lt;code&gt;&amp;lt;--&lt;/code&gt;で示す。リレーションシップの種類やプロパティなどの追加情報は、矢印内の角括弧&lt;code&gt;[]&lt;/code&gt;に記述する。&lt;/p&gt;
&lt;p&gt;この例では&lt;code&gt;LIKES&lt;/code&gt;、&lt;code&gt;WORKS_FOR&lt;/code&gt;、&lt;code&gt;IS_FRIENDS_WITH&lt;/code&gt;がノード間のリレーションシップである。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/neo4j/cypher_graph_rels.jpg&#34; alt=&#34;Cypherグラフのリレーションシップ&#34;&gt;&lt;/p&gt;
&lt;p&gt;無方向のリレーションシップは矢印を付けず、2つのダッシュ&lt;code&gt;--&lt;/code&gt;で表す。データベースには方向が保存されるが、無方向クエリではCypherが物理的な方向を無視してリレーションシップと接続ノードを検索する。保存方向が不明な場合に柔軟なクエリを記述できる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;データの保存方向と逆方向をクエリに指定すると、Cypherは結果を返さない。方向が不明な場合は無方向のリレーションシップを使用する。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-cypher&#34; data-lang=&#34;cypher&#34;&gt;// データは次の方向で保存されている。
CREATE (p:Person)-[:LIKES]-&amp;gt;(t:Technology)

// 逆方向のクエリは結果を返さない。
MATCH (p:Person)&amp;lt;-[:LIKES]-(t:Technology)

// 方向が不明な場合は無方向で検索する。
MATCH (p:Person)-[:LIKES]-(t:Technology)
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;リレーションシップタイプ&#34;&gt;リレーションシップタイプ&lt;/h2&gt;
&lt;p&gt;リレーションシップタイプは、ラベルがノードをまとめるのと同様にリレーションシップを分類して意味を加える。リレーションシップはノードの接続方法を示し、データモデル内の動作や動詞から識別できる場合が多い。&lt;/p&gt;
&lt;p&gt;必要なタイプを自由に定義できるが、動詞や行為に基づく明確な名前が望ましい。不適切な名前はCypherを読みにくくする。適切に命名されたCypherは英文のように読める。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;[:LIKES]&lt;/code&gt; — Jennifer LIKES Graphsのように両側のノードと合わせて意味を持つ。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[:IS_FRIENDS_WITH]&lt;/code&gt; — Jennifer IS_FRIENDS_WITH Michaelを表す。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;[:WORKS_FOR]&lt;/code&gt; — Jennifer WORKS_FOR Neo4jを表す。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;リレーションシップ変数&#34;&gt;リレーションシップ変数&lt;/h3&gt;
&lt;p&gt;後から参照するには&lt;code&gt;[r]&lt;/code&gt;や&lt;code&gt;[rel]&lt;/code&gt;などの変数を指定する。&lt;code&gt;[likes]&lt;/code&gt;や&lt;code&gt;[knows]&lt;/code&gt;のような説明的な名前も使える。後から参照しない場合は&lt;code&gt;--&lt;/code&gt;、&lt;code&gt;--&amp;gt;&lt;/code&gt;、&lt;code&gt;&amp;lt;--&lt;/code&gt;で匿名リレーションシップを表す。&lt;/p&gt;
&lt;p&gt;たとえば&lt;code&gt;-[rel]-&amp;gt;&lt;/code&gt;または&lt;code&gt;-[rel:LIKES]-&amp;gt;&lt;/code&gt;では、変数&lt;code&gt;rel&lt;/code&gt;を使って後からリレーションシップと詳細を参照できる。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;-[LIKES]-&amp;gt;&lt;/code&gt;のようにタイプ名の前のコロンを省略すると、&lt;code&gt;LIKES&lt;/code&gt;は変数になる。タイプが指定されていないため、Cypherはすべてのリレーションシップタイプを検索する。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;ノードとリレーションシップのプロパティ&#34;&gt;ノードとリレーションシップのプロパティ&lt;/h2&gt;
&lt;p&gt;プロパティはノードとリレーションシップに詳細を加える名前と値の組である。Cypherではノードの丸括弧またはリレーションシップの角括弧内に波括弧を置き、その中に名前と値を記述する。例にはノードプロパティ&lt;code&gt;name&lt;/code&gt;とリレーションシッププロパティ&lt;code&gt;since&lt;/code&gt;がある。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ノードプロパティ：&lt;code&gt;(p:Person {name: &#39;Jennifer&#39;})&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;リレーションシッププロパティ：&lt;code&gt;-[rel:IS_FRIENDS_WITH {since: 2018}]-&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://www.devkuma.com/docs/neo4j/cypher_graph_props.jpg&#34; alt=&#34;Cypherグラフのプロパティ&#34;&gt;&lt;/p&gt;
&lt;p&gt;プロパティはさまざまなデータ型の値を持てる。完全な一覧はCypherマニュアルの値と型の項を参照する。&lt;/p&gt;
&lt;h2 id=&#34;cypherのパターン&#34;&gt;Cypherのパターン&lt;/h2&gt;
&lt;p&gt;ノードとリレーションシップはグラフパターンの構造を形成する。組み合わせることで単純または複雑なパターンを表現できる。Cypherでは連続したパスとして記述するか、小さなパターンに分けてカンマで結合する。&lt;/p&gt;
&lt;p&gt;これまで説明したノードとリレーションシップの構文を組み合わせる。たとえば&lt;code&gt;Jennifer likes Graphs&lt;/code&gt;は次のように表す。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-cypher&#34; data-lang=&#34;cypher&#34;&gt;(p:Person {name: &amp;#34;Jennifer&amp;#34;})-[rel:LIKES]-&amp;gt;(g:Technology {type: &amp;#34;Graphs&amp;#34;})
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;この断片は目的のパターンを表すが、既存パターンを検索するのか、新しいパターンを追加するのかは指定していない。操作を指定するにはCypherのキーワードを追加する。&lt;/p&gt;
&lt;h2 id=&#34;原文&#34;&gt;原文&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://neo4j.com/developer/cypher/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Cypher Query Language - Developer Guides&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://neo4j.com/developer/cypher/intro-cypher/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Getting Started with Cypher - Developer Guides&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;テキストと特殊文字だけを組み合わせて画像や図を表現する手法。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

      </description>
      
      <category>Neo4j</category>
      
      <category>グラフデータベース</category>
      
    </item>
    
    <item>
      <title>Neo4j Cypherクエリ</title>
      <link>https://www.devkuma.com/jp/docs/neo4j/cypher-querying/</link>
      <pubDate>Sun, 14 May 2023 03:20:00 +0900</pubDate>
      <author>kc@example.com (kc kim)</author>
      <guid>https://www.devkuma.com/jp/docs/neo4j/cypher-querying/</guid>
      <description>
        
        
        &lt;h2 id=&#34;cypherのキーワード&#34;&gt;Cypherのキーワード&lt;/h2&gt;
&lt;p&gt;多くのプログラミング言語と同様に、Cypherにはクエリ内の特定の処理に使う予約語がある。Neo4jではデータの作成、読み取り、更新、削除が必要であり、キーワードはこれらの処理を実行するために使われる。ここでは一般的な2つのキーワードを詳しく取り上げる。その他は後続のガイドで説明する。&lt;/p&gt;
&lt;h3 id=&#34;match&#34;&gt;MATCH&lt;/h3&gt;
&lt;p&gt;Cypherの&lt;code&gt;MATCH&lt;/code&gt;キーワードは、データベースから既存のノード、リレーションシップ、ラベル、プロパティ、パターンを検索する。SQLに慣れている場合、&lt;code&gt;MATCH&lt;/code&gt;はSQLの&lt;code&gt;SELECT&lt;/code&gt;とよく似た動作をすると考えられる。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;MATCH&lt;/code&gt;を使用すると、すべてのノードラベルの検索、特定ノードの取得、特定のリレーションシップを持つノードの検索、ノードとリレーションシップのパターン検索などを実行できる。&lt;/p&gt;
&lt;h3 id=&#34;return&#34;&gt;RETURN&lt;/h3&gt;
&lt;p&gt;Cypherの&lt;code&gt;RETURN&lt;/code&gt;キーワードは、クエリが返す値や結果を指定する。ノード、リレーションシップ、それらのプロパティ、パターンを返すよう指定できる。書き込みだけを行う処理では不要だが、データの読み取りには必要である。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;RETURN&lt;/code&gt;はノード変数やリレーションシップ変数を使うときに重要になる。ノード、リレーションシップ、プロパティ、パターンを取得するには、&lt;code&gt;MATCH&lt;/code&gt;句で対象データに変数を割り当てる。&lt;/p&gt;
&lt;h2 id=&#34;cypherの例&#34;&gt;Cypherの例&lt;/h2&gt;
&lt;p&gt;次の例では&lt;code&gt;MATCH&lt;/code&gt;と&lt;code&gt;RETURN&lt;/code&gt;を使用する。それぞれ目的を示した後、Neo4j Browserで実行できるクエリを掲載する。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;例1&lt;/strong&gt;：&lt;code&gt;Person&lt;/code&gt;グラフからラベル付きノードを検索する。&lt;code&gt;Person&lt;/code&gt;ノードを返すには、ノードに&lt;code&gt;p&lt;/code&gt;などの変数を割り当てる。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;MATCH (p:Person)
RETURN p
LIMIT 1
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;例2&lt;/strong&gt;：&lt;code&gt;Person&lt;/code&gt;グラフから名前が&lt;code&gt;Tom Hanks&lt;/code&gt;のノードを検索する。後から同じ名前で参照すれば、変数名は自由に指定できる。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;MATCH (tom:Person {name: &amp;#39;Tom Hanks&amp;#39;})
RETURN tom
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;例3&lt;/strong&gt;：Tom Hanksが監督した&lt;code&gt;Movie&lt;/code&gt;を検索する。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;MATCH (:Person {name: &amp;#39;Tom Hanks&amp;#39;})-[:DIRECTED]-&amp;gt;(movie:Movie)
RETURN movie
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;例4&lt;/strong&gt;：Tom Hanksが監督した映画を検索し、今回はタイトルだけを返す。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;MATCH (:Person {name: &amp;#39;Tom Hanks&amp;#39;})-[:DIRECTED]-&amp;gt;(movie:Movie)
RETURN movie.title
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;戻り値に別名を付ける&#34;&gt;戻り値に別名を付ける&lt;/h2&gt;
&lt;p&gt;すべてのプロパティ名が&lt;code&gt;movie.title&lt;/code&gt;のように単純とは限らない。長い名前、複数語の説明、開発者向けの用語、省略形などにより、読みにくい名前になることがある。特にレポートやユーザー向け画面に表示する場合、このような名前は理解しづらい。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;// 分かりにくいプロパティ名
MATCH (tom:Person {name:&amp;#39;Tom Hanks&amp;#39;})-[rel:DIRECTED]-(movie:Movie)
RETURN tom.name, tom.born, movie.title, movie.released
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;SQLと同様に、&lt;code&gt;AS&lt;/code&gt;キーワードで分かりやすい別名を指定し、戻り値のフィールド名を変更できる。次の例では、映画情報を読みやすい名前で返す。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code class=&#34;language-cypher&#34; data-lang=&#34;cypher&#34;&gt;// 別名を使った読みやすい出力
MATCH (tom:Person {name:&amp;#39;Tom Hanks&amp;#39;})-[rel:DIRECTED]-(movie:Movie)
RETURN tom.name AS name, tom.born AS `Year Born`, movie.title AS title, movie.released AS `Year Released`
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;movie.released AS `Year Released` &lt;/code&gt;のように、空白を含む戻り値の別名はバッククォート（`）で囲む。空白を含まない別名ではバッククォートは不要である。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;参考&#34;&gt;参考&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://neo4j.com/developer/cypher/querying/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Querying with Cypher - Developer Guides&lt;i class=&#34;fas fa-external-link-alt&#34;&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

      </description>
      
      <category>Neo4j</category>
      
      <category>グラフデータベース</category>
      
    </item>
    
  </channel>
</rss>
