2017-02-22 7 views
3

OSX(El Capitan)上で実行されているDockerコンテナ(Docker-Compose経由)でNeo4j 3.1インスタンスをスピンアップしようとしています。ネオの最大ヒープスペースをデフォルトの512MBよりも大きくすることを試みない限り、すべてうまくいっています。DockerのNeo4j - 最大ヒープサイズが原因でハードクラッシュが発生する137

によれば、これは環境変数NEO4J_dbms_memory_heap_maxSizeを追加することによって達成することができ、サーバラッパースクリプトはそれに応じてneo4j.confファイルを更新します。私はチェックして、期待通りに更新されています。

docker-compose upを実行してコンテナを回転させると、Neo4jインスタンスがステータスコードでクラッシュするという問題があります。ちょっと調べてみると、ヒープサイズの上限に基づいて、これはlinux hard-crashです。

$ docker-compose up 
Starting elasticsearch 
Recreating neo4j31 
Attaching to elasticsearch, neo4j31 
neo4j31   | Starting Neo4j. 
neo4j31 exited with code 137 

私の質問:

  1. が、これはドッカーまたはOSXの制限によるものですか?
  2. これらの制限を変更する方法はありますか?リクエストされた制限を1GBに落とすと、それは回転を開始しますが、重いクエリを実行するとクラッシュします(これは、とにかく増加したヒープスペースの必要性を引き起こします)。
  3. 実行中のクエリは、フルテキスト属性を含む多くのノード(> 150k)の大規模な更新で​​あり、プラグインを使用してElasticSearchと同期させることができます。ネオがサイファーだけを使用して、一度に500のノードを実行する方法がありますか(私はできるかぎりスクリプトを書くことを避けたいですが、少し汚れていると感じています)。次のよう

マイドッキングウィンドウ-compose.ymlは次のとおりです。

--- 
version: '2' 
services: 
# ---<SNIP> 

    neo4j: 
    image: neo4j:3.1 
    container_name: neo4j31 
    volumes: 
     - ./docker/neo4j/conf:/var/lib/neo4j/conf 
     - ./docker/neo4j/mnt:/var/lib/neo4j/import 
     - ./docker/neo4j/plugins:/plugins 
     - ./docker/neo4j/data:/data 
     - ./docker/neo4j/logs:/var/lib/neo4j/logs 
    ports: 
     - "7474:7474" 
     - "7687:7687" 
    environment: 
     - NEO4J_dbms_memory_heap_maxSize=4G 

# ---<SNIP> 

答えて

7
  1. が原因ドッカーまたはOSXの制限にこのですか?

    いいえこの問題を解決するには、使用可能なRAMの量をDockerに増やしてください。

  2. これらの制限を変更する方法はありますか?要求された の制限を1GBに落とすと、それは回転しますが、重い クエリを実行するとクラッシュします(これは、増加したヒープスペースの必要性が原因です)。彼らは を使用してElasticSearchにsyncronisedすることができるように

    Docker Memory Settings

  3. 私が実行しているクエリは、属性のフルテキストを含む ノード(> 150K)たくさんの間で大規模なアップデートでありますプラグイン。方法はありますか cypherだけを使用して、一度に500ノードを実行することでNeoを取得することができます(私は、できるならスクリプトを書くのをやめたい、少し感じています )。

    N/AこれはNEO4J固有の質問です。上記のDockerの質問からこれを分離する方が良いかもしれません。彼らはプラグインを使用してElasticSearchにsyncronisedことができるように、私が実行している

+0

ありがとうございます。私は何かが欠けていると確信していました(私はDockerにとってかなり新しいです!)。私はドッカーの作成コマンドで何かを探していましたが、これははるかに意味があります! – n00dle

+0

心配する必要はありません!あなたがちょうど始まったときに小さな事を見落とすことは本当に簡単です!申し訳ありませんが、私はあなたのneo4jsの質問に答えることができませんでした。 –

2

3.クエリは、属性のフルテキストを含むノードの多く(> 150K)間で大規模なアップデートであります。ネオがサイファーだけを使用して、一度に500のノードを実行する方法がありますか(私はできるかぎりスクリプトを書くことを避けたいですが、少し汚れていると感じています)。

あなたはより具体的にapoc.periodic.iterate またはapoc.periodic.commit 、のNeo4j ためapocプラグインの助けを借りてこれを行うことができます。それは時々ループに落ちるので、ノードは、すでに同期してい

あなたが最初の試合は、例のように特異的であるべきであるapoc.periodic.commit使用する場合は、マーク:

call apoc.periodic.commit(" 
match (user:User) WHERE user.synced = false 
with user limit {limit} 
MERGE (city:City {name:user.city}) 
MERGE (user)-[:LIVES_IN]->(city) 
SET user.synced =true 
RETURN count(*) 
",{limit:10000}) 

あなたがapoc.periodic.iterateを使用している場合は、それを実行することができますパラレルモードでは:

CALL apoc.periodic.iterate(
"MATCH (o:Order) WHERE o.date > '2016-10-13' RETURN o", 
"with {o} as o MATCH (o)-[:HAS_ITEM]->(i) WITH o, sum(i.value) as value 
CALL apoc.es.post(host-or-port,index-or-null,type-or-null, 
query-or-null,payload-or-null) yield value return *", {batchSize:100, parallel:true}) 

注二MATCH句とapoc.es.postの必要がないことを弾性検索にPOSTリクエストを送信することができますAPOCのための機能です。 詳細はdocumentationをご覧ください。

+0

これはありがとう、非常に便利に見えます! – n00dle

関連する問題