問題タブ [graphaware]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - Codeigniter : Neo4J データベースへの自動接続
私は私の個人的なプロジェクトで codeigniter 2.x を使用しています。データベースは MySql ですが、Neo4J に移行することにしました。
インストールしたGraphAwareというライブラリを使用しました。これまでのところ意図したとおりに実行されます。私のテストコードは次のとおりです。
ここまでは順調ですね!
私の問題は次のとおりです。毎回手動で接続を作成する必要がないように、ページ作成時にneo4jデータベースに自動的に接続するにはどうすればよいですか?
私の考えでは、上記のコードは次のようになります。
私はコードイグナイターで検索してきましたが、いくつかのコアコンセプトの理解が不足しているため、解決策を見つけることができないようです.
どのように進めるか考えていますか。
ありがとう。
ロイック。
php - 保存できるプロパティは 1 つだけです
次の「ユーザー」クラスがあります。
次のように、私はそれを操作しようとしています:
ただし、Neo4j の「ブラウザ」で次のクエリを実行すると、次のものが作成されていることがわかります。
他のプロパティの作成は一見スキップされます。
かなり基本的なものが欠けていると思います。上記のコードの問題は何ですか?
neo4j - Cypher エラー : "それを比較する方法がわかりません"。バグの可能性?
だから私は日本語を含む個人的なプロジェクトに取り組んでいます。このプロジェクトでは、Neo4J データベースも使用しています。
私はあなたの専門知識が欲しい非常に独特な問題に出くわしました。
基本的に、DB からいくつかの日本語の文字 (ひらがなと呼ばれる) を取得します。特別なことは何もありません。音節は 1 文字 (「に」、「に」など) または 2 文字 (「にょ」、「にょ」など) で構成されるという事実に基づいて、ひらがなをいくつかのサブカテゴリに分けました。に (に) と よう (よ) から作られます)。
したがって、私のカテゴリには次の構造があります(ここでは少し簡略化されています):
これらの各カテゴリは、ひらがな値 (にやにょなど) を含むノード (ここでは項目と呼ばれます) にリンクされています。これらの文字を取得するには、「ひらがなリストのサブリストに属するすべての文字を取得してください」のようなクエリを作成します。実際のコードは特別なものではなく、次のようになります。
これから、次のエラーが発生します。
最初から、同じタイプ (NodeProxy) を持っているように見えるため、DB エンジンがこれらを比較する方法を知らないことに戸惑っています。また、クエリがノードの値を他のノードと比較しようとしていたとは感じません。
とにかく、以前に使用したことがあり、機能したため、クエリの変更を開始しました。しばらく検索した後、return 句でkana.value を itemに変更すると、たとえばkana.value を kanaに変更すると、突然再び機能することに気付きました。
その値をもう少し変更したところ、次の結果が得られました。
- かな.value as item : KO
- kana.value as kana : OK
- kana.value as test : KO
- kana.value as es : KO
- かな.値としての質問: KO
- kana.value ローマ字 : KO
- kana.value ひらがな : KO
- return kana.value : KO
- kana.value as a : KO
- kana.value as kanak : KO
なんらかの理由で、「カナとしてのカナ.値」のみが機能しました...
何が起こっているのか分かりますか?これはバグであり、私のミスではありませんか?
ロイック。
PS:データベースを呼び出すためにphpでgraphawareライブラリを使用していますが、noe4jブラウザでもエラーが発生するため、問題は無関係です
php - 致命的なエラー: GraphAware\Neo4j\Client\HttpDriver\Session::run() の宣言
ここで助けてください:
致命的なエラー: GraphAware\Neo4j\Client\HttpDriver\Session::run() の宣言は、C の GraphAware\Common\Driver\SessionInterface::run($statement, array $parameters = Array, $tag = NULL) と互換性がある必要があります:\xampp2\htdocs\testno\vendor\graphaware\neo4j-php-client\src\HttpDriver\Session.php 24 行目
これは、メインの Web サイト ディレクトリにある index.php です。
新しい composer.lock :
neo4j - NEO4J-PHP-OGM で node over 2 リレーションのプロパティにアクセスする方法
neo4j-php-ogm ライブラリとの 2 つの関係を介してプロパティにアクセスする方法がわかりません。
たとえば、多数の「リソース」ノードに接続する「ユーザー」ノードがあり、各ノードは固定数の事前定義された「 MetaResource」ノードに接続されているとします。「リソース」ノードにはプロパティがあり、「MetaResource」ノードには各リソース タイプのメタ プロパティがあります。「user」ノードから始まる「MetaResource」ノードのプロパティへのアクセスを知るにはどうすればよいですか? Neo4j では、そのようなルートの 1 つが次のようになります。
私のユーザーエンティティの例:
私のリソースエンティティの例:
そして、私の MetaResource エンティティの例:
そして最後に、関係を設定するコントローラーからのコード:
Neo4j Web コンソールを見ると、すべての関係とノードが正しく挿入されています。
ここで、ユーザーのリソースを取得すると、$user->getResources()
すべてのリソース オブジェクトを正常に取得できますが、MetaResource エンティティの予想されるオブジェクトではなく、「$metaResource」プロパティが常に NULL になります。たとえば、次のようにします。
次に、NULL のみを出力します。
一方、リソース オブジェクトを (たとえば で$resource = $em->getRepository(Resources::class)->findOneById(123)
) 直接取得してから、接続された MetaResource を取得しようとすると、機能し$resource->getMetaResource()
ます。私は何が欠けていますか?
乾杯
neo4j - GraphAware TimeTree の問題 - 分の解像度の不適切な挿入
編集:問題を解決しました。
TL;DR: TimeTree はエポックからのミリ秒を必要とします。エポックからの秒数を時間値として使用していました。
バージョン:
最近、タイム ツリーを使用してグラフを時間範囲で検索し始めました。先日、次のようなクエリを作成したときに、おかしな動作に気付きました。
ここでの時間範囲は 1000 秒しか離れていないことに注意してください。奇妙なのは、私の戻りノード (すべて同じタイプ) が次のようになっていることです。
time:1308026580
具体的には、値が私が提供した範囲内にないことに注意してください。ここで、この例を作成しました (現在、クエリの実行に時間がかかるため) が、前回クエリを実行したときと同様の結果が得られました。
ということで少し調べてみました。まず、TimeTree にデータを挿入する方法は次のとおりです。
に注意してresolution: "Minute"
ください。このクエリを関数として最初に書いたとき、解像度を指定するのを忘れていました。したがって、この方法で約 4 ~ 5 件のレコードを追加すると、解像度はデフォルトで「日」になりました。
これが問題だとは思わなかったので、これらのレコードを「日」の解像度でグラフに残しただけで、それ以降はすべて「分」の解像度になります。
そこで、Neo4J ブラウザーを使用してグラフをチェックし、何か奇妙なことが起こっているかどうかを確認することにしました。ここから、次のクエリを実行しました。
あはは!ノードにアタッチされたすべてのレコードMinute
は、時間値に関して連続したレコードであることに気付きました。例えば:
KAOU_20110613v20001_0956
もっているtime:1307998620
KAOU_20110613v20001_0957
もっているtime:1307998680
これらの連続したレコードはすべて 1 分間隔です。(つまり、時間 1 - 時間 2 == 60)
では、なぜそれらは同じ分のノードに追加されているのでしょうか? エポック タイム コンバーターを使用して、これらのタイム スタンプが実際には 1 分ずれており、意図した日付を表していることを確認しました。
すべてのレコードが Minute ノードに蓄積されているため、この問題がパフォーマンス ラグの原因になっていると思います。
つまり、時間の値とタイム ツリーがそれらを処理する方法に関して何かを見逃したか、何か怪しいことが起こっているかのどちらかです。
neo4j - neo4j タイム ツリーがフリーズする理由は何ですか?
Neo4j で奇妙な問題が発生しています。私は最近、GraphAware TimeTree を使用して作業を行っており、昨日まではうまく機能していました。エラーが発生したため、ツリーを再構築する必要があったため、スクリプトを一晩実行したままにしました (nohup)。
今日戻ってきて、スクリプトが 3 分間しか実行されていないことがわかりました。
仕事中にこの動作に気づきましたが、活動していないときに一晩そのままにしておくと助けになると思いました. 競合が発生する可能性がある場合に備えて、他の Java サーバー プロセスもオフにしました。この時点で、私のサーバーはバックグラウンドで python tornado サーバーのみを実行していましたが、これはそれほど重くなく、トラフィックも多くありません (1 日に数ヒット)。
全体として、システムには利用可能な RAM が十分にあり、CPU は他の場所で使用されておらず、マシン上で重い IO を実行している他のプロセスはありません。利用可能なリソースを備えた健全なシステムを使用top
/表示します。atop
これが私のスクリプトが行っていることの高レベルです:
私のハンドラーは、__init__
コンストラクターでドライバーとセッションを作成します。
私のジェネレーターはmeta_id
、グラフのノードに一意のプロパティ値である値を提供します。
このpopulate_timetree()
関数は、次のステートメントを作成します。
すべてがうまく機能していました。時間の値を台無しにした後、データベースを削除し、再起動して、もう一度やり直しました。今回だけ、セッションを閉じる呼び出しを行うと、プログラムがフリーズします。
注: 私は実際に__del__
デコンストラクターでこれを呼び出します (これはおそらく悪い習慣と見なされますが、これまでのところうまく機能しており、私のニーズに合っています。)
すべてのコードで不正な readline ステートメントや一時停止の原因となる可能性のあるものがないか再確認しました。また、このすべてのコードを含むパッケージを再コンパイルしました。session.close()
私は、この声明で立ち往生しているという事実を知っています。
そこで、Neo4j-shell ツールをいじってみて、何か違うかどうかを確認してみました。最初に簡単な応答性チェック:
わかりました。ここで、単一の値に対して timetree 呼び出しを試みます。
ブーム。Neo4j が動かなくなった! 明確にするために、ここで MATCH ステートメントが永遠にかかるわけではないことを知っています。これは、今回はデータベースに約 200 万ノードしか入れておらず、match ステートメントだけを呼び出すだけでまったく問題なく実行されるためです。この一意のプロパティのインデックスも設定しています (上記のスキーマ呼び出しを参照)。
それで、ここで何が起こっているのですか?単一のノードのみを挿入する場合、ツリーの最初の作成はそれほど問題にならないと思います。私の最初の試みは完璧に実行されているようです。私が持っていた 5,800 万件のレコードのうち 200 万件をデータベースに入力することを除いて、今回は何が違うのかわかりません。(したがって、はるかに高速になるはずです)。
実際、このコマンドを数時間実行したままにしましたが、私のシステムでは数分間しか実行されていませんでした。ここで何が起こっているのか、私はとても混乱しています。誰にもアイデアはありますか?とにかく、neo4jがこのコマンドについて積極的に行っていることを確認できますか? (コミュニティエディションを使用していることに注意してください)
私はneo4jのバージョン3.0.3と、CentOS 7サーバーで3.0.3.39 timetree / graphawareを実行しています。
私が持っている唯一の考えは、それがpythonまたはcmdラインシェルツールを介しているかどうかにかかわらず、サイファーステートメントを呼び出して、コミットする前にそれらをキャンセルしてきたということです。大きなトランザクションが完了する前にキャンセルして、トランザクション マネージャーをいじりすぎている可能性はありますか?
例えば:
そしてcontrol-C
2時間ほど走りきってからヒット。
アップデート:
わかりましたので、ログ ファイルを調査したところ、いくつかの問題が見つかりました。十分なメモリがないためにスレッドがブロックされていたようです。私の最大ヒープサイズは人為的に制限されており、マシンで利用可能なリソースを使用していなかったと思います. (多分??)。だから私は手動で設定しdbms.memory.heap.max_size=16000
ました。
問題は解決したようです。neo4j-shell
Java OOM がツールの応答に表示されることを期待していたので、私は混乱していたと思います。
neo4j - グラファウェア neo4j-php-client | Neo4jException をキャッチできません
プロジェクトに Postgresql + Neo4j を使用しています。neo4j クエリが失敗した場合、postgre クエリをロールバックする必要があります。したがって、コードで Neo4jException をキャッチする必要があります。しかし、まだできませんでした。手伝ってくれてありがとう。
これは私の作業コードです。しかし、ご覧のとおり、neo4j 例外をキャッチするための catch ブロックがありません。だから私はこれを追加しましたが、運はありません。例外クラスとしてwithNeo4jExceptionInterfaceも試しました(絶望的な時間)。(ところで、例外を取得するために間違った型のクエリを使用しています)
また、運がなければこれをやろうとしました。