問題タブ [spring-data-neo4j]
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.
java - DataRetrievalFailureException: '__type__' が Spring Data Neo4j に見つかりません
Neo4j REST データベースをセットアップして実行しており、Spring Data Neo4j を使用してアクセスしようとしていました。次のコード:
次の例外をスローします。
スレッド「メイン」での
http://my.ip.addr.ess:7474/db/data/node/1234;
例外http://my.ip.addr.ess:7474/db/data/node/1234
http://my.ip.addr.ess:7474/db/data/node/1234
に移動すると、オブジェクトが正しく表示されることに注意してください。
私のポンで私は持っていますorg.springframework.data:spring-data-neo4j-rest:2.1.0.BUILD-SNAPSHOT
neo4j - インポート時に Spring Data Neo4j が非常に遅い
エンティティを Neo4j にインポートするのに 6 ~ 10 秒かかる理由を誰か説明してもらえますか?
Neo4jTemplate @Autowire
-dを持つカスタムリポジトリでSpring Data Neo4jを使用しています。したがって、エンティティを永続化するときは、 を呼び出しますtemplate.save(entity)
。ただし、エンティティは少し重いと言わざるを得ません。47 個のプロパティ、つまりフィールドがあり、そのうちの 3 つは@Indexed
注釈でマークされ、そのうちの 10 は でマークされた他のカスタム エンティティ@RelatedTo
です。5 つの@RelatedTo
フィールドのタイプはSet
です。つまり、実際には、この 1 つの重いエンティティをインポートすると、別の 10 ~ 15 のエンティティも永続化され、それに接続される可能性があります。
それは実際の問題ですか、それともプロセスをスピードアップするために私にできることはありますか?
私は周りを見回して見つけましたBatchInserter
が、インデックスを処理しません。この実装例を見つけましたが、他に選択肢がなければ試してみます。
だから私が理解しようとしているのは、重いエンティティが遅い永続化の理由であるか、それ以外の理由であるかということです。
私は Neo4j 1.8 を使用していますが、設定ファイルには触れていません。
どんな助けでも大歓迎です。ありがとう。
EDIT
@Michael Hunger:
- DB 内のデータ量には影響がないようです。
- 私は AspectJ を使用していないので、単純なマッピングを使用していると思いますよね? AspectJ を使用するとパフォーマンスが向上すると思いますか? -メソッド
にまたがる外部トランザクションがあるとは思わない。save
Wicket Web アプリケーションから DB を使用しています。たとえば、Jersey REST クライアントで Neo4j の REST API を使用した方がよいでしょうか?
- カスタム タイプのクラスにアトリビュートがある場合、たとえばArea area
、別のノードが自動的に作成されarea
、メイン ノードと の間の接続が作成されarea
ますよね?の必要はありませんtemplate.createRelationshipBetween(entity1, entity2, type, properties, true)
よね?これを使用するために私がしなければならないことは、area
属性を選択し、いくつかのインデックスを使用して正しいものを見つけてから、area
手動で接続します。そうですか?
これは私の保存方法がどのように見えるかです:
エンティティの定義方法の例を次に示します (@ExcelCell 注釈は無視してください)。通常、永続エンティティによって拡張される抽象クラスがあります。私が何か間違ったことをしている場合は教えてください。
そして、これは抽象 Building クラスを拡張し、DB に永続化される NewBuilding クラスです。
casting - Neo4j:spring-data-neo4j、結果を型クラスにキャストする方法は?
Neo4j DBにノードを挿入しました。データベースからノードを選択して、特定のクラスにキャストします。
この問題に関するコードは次のとおりです。
次のようなノードに関する詳細:
ノードのID、名前、年齢をdbから取得し、それをUserクラスに入れたいだけです。しかし、それは多くの方法で何度も失敗しました。
ここで、次のような問題が発生しました:結果をターゲットクラスにキャストするにはどうすればよいですか?たくさんのキャスト方法を試しましたが、やっと失敗しました。よろしくお願いします。
lazy-loading - ノード関係を一部でも読み込まないように設定するには?
ノードに@RelatedTo、@RelatedToViaアノテーションを使用するリレーション プロパティが含まれている間、 Spring データ Neo4jプロジェクトを使用しています。
ノードがフェッチされると、他のすべての関係が部分的にフェッチされます (フェッチされた各関連ノードは id のみで、残りのプロパティは null です)。これは、関係の関係に対してもネストされた方法で発生します。
このオーバーヘッドを防ぐ方法はありますか? spring data mongo dbのようにインクルード/エクスクルードフィールドを使用していますか?
ありがとう
neo4j - リモート DB がダウンしている場合、Neo4j graphDatabaseService がコンテキストの初期化で異常終了する
Neo4j構成が初期化され、リモートDBが実行されていない場合、サーバーは起動しません...
サーバーが実行されていないときに作成を適切に停止または停止する方法はありますか?
これははるかに大きなアプリケーションのモジュールであり、アプリを起動できません。b/c Neo4j が実行を停止しました..
java - トランザクションのneo4jロック
私はneo4jから始めて、レコメンデーションエンジンの基盤となる優れたデータベースになるかどうかを評価しています。読み取りおよび書き込み操作中にエンティティで取得されたロックに関するドキュメントがあるかどうか疑問に思いました。
たとえば、ノードNが関係R1とR2を介してノードN1とN2にそれぞれ関連している場合、関係R1が作成または変更されている場合、N、N1、N2、またはR2を使用する操作(関係の作成/変更またはトラバーサル)は発生しますか?ブロック ?直感的には、書き込まれるのはR1だけであり、ロックされる必要があるのはR1だけなので、いいえと思います。ただし、特に双方向トラバーサルがすべての関係に提供されているため(おそらくNとN1がロックされるのでしょうか?)、基礎となる実装にも依存すると思います。誰かが私にこれに関するいくつかの公式文書を教えてくれるといいですね。
そのようなロックが実際に発生した場合、問題を解決するために私が考えることができる1つの方法は、各ノードを各関係の目的で子ノードに解決し、それぞれがルートエンティティに接続することです。(たとえば、ユーザーはソーシャルユーザー、ユーザーは製品ユーザーなど)
これにより、ノードあたりの関係の数が減り、ルートノードを解決して、書き込みが重い子と読み取りが重い子を作成し、特定のサブグラフをすばやく取得できるようになると思います。私が見ることができる唯一の欠点は、ノードと関係の総数がn倍になることです(私のdbサイズはn = 4と比較的小さいので、問題はありません)。これらの結論が正しいかどうか、もしそうなら、パフォーマンスを改善し、ロックの数を減らすのに役立つかどうかについての入力をいただければ幸いです。
spring - spring-data neo4j: 関連するエンティティによってノード エンティティが見つからない
spring-data neo4j を使用して、snippet と person の 2 つのノード エンティティがあります。各スニペットには作成者がいます。以下は、クラスと失敗したテストです。
.
.
.
spring - Spring Data Neo4j: オブジェクトから文字列へのコンバーターは機能するが、オブジェクトから long は実行されない
ドメインオブジェクトからNeo4jがプロパティ値としてネイティブに保存できるものへの変換には、本当に奇妙な問題があります。テスト ケースとして、Joda の DateTime を使用します。そのタイプのオブジェクトは、非常に簡単に String または Long に変換できます。
DateTime から String への変換は、次のコードで問題なく機能します。
プロパティがノードに表示されます。
ただし、DateTime を Long として保存したい場合 (Cypher で時間でソートするのに便利です)、まったく機能しません。これが私のコンバーターです:
プロパティはノードに保存されません。したがって、完全に欠落しています。例外はスローされません。変換コードがまったく呼び出されていないようです。
コンバーターは、コードベースの構成を使用して Spring Data にフックされます。
手がかりはありますか?私の意見ではうまくいくはずなので、私はここでかなり迷っています...
編集Spring Data Neo4j のドキュメントで次のテキストを見つけました:
Spring 変換サービスを使用して文字列に変換可能なすべてのフィールドは、文字列として保存されます。
これは、文字列への変換のみがサポートされているということですか? これはかなり限定的なようです。
spring - パラメーター化された BeforeSaveEventTに関係なく、登録されたすべてのリスナーに対してトリガーされます
エンティティの一意のインクリメント ID を生成しようとしています。その目的のために、すべてのエンティティ タイプに対して複数の ApplicationListeners を次のように登録しました。
定義は次のようなものです:
ご覧のとおり、型BeforeSaveEvent
でパラメータ化されていCustomer
ます。ただし、保存イベントが顧客に対して発生しようとすると、他のリスナーもトリガーされますが、これらのリスナーはorBeforeSaveEvent
などのさまざまなタイプでパラメーター化されています(同じ親クラスから継承している間)Employee
Message
Entity
これは予想されることですか?そして、この問題に対する私のアプローチはどうあるべきですか? 最初に頭に浮かぶのは、リスナーを 1 つだけ使用して内部をinstanceOf
if
s で区別することですが、これは非常に見苦しく思えます。
私はneo4j 1.9.M03、spring-data-neo4j 2.1.0.RC4、およびspring 3.1.3を使用しています
social-networking - ソーシャルRESTfulレイヤーのNeo4jSpringデータPOC
新しいプロジェクトに取り組み始めています...ソーシャルネットワークプラットフォームにサービスを提供するRESTfulレイヤー。
Neo4jはメインデータストアの私の明白な選択でした。以前はNeoを使用する機会がありましたが、 SpringDataの機能を利用してPOJOをノードにマッピングすることは非常に便利でした。
目標:
レイヤーは、URLから参照できるエンティティ/オブジェクト関連のプロパティと接続を定義するFacebookGraphAPIに似たサポートを提供する必要があります。FBグラフAPI
可能であれば、ドメインエンティティとの間でシリアル化される転送オブジェクトを避け、クライアントとの間で転送されるJSONとしてドメインpojoを使用したいと思います。
例:
HTTP GET / profile / {id} /?fields = ...&connections = ...応答は、要求されたURLを含むプロファイルオブジェクトになります。
HTTP GET / profile / {id} / stories /?fields = ..&connections = ...&page = ..&sort = ...応答は、要求されたストーリーオブジェクトのリストになります。
関連するバージョン:
- Spring Framework 3.1.2
- Spring Data Neo4j 2.1.0.RC3
- Spring Data Mongodb 1.1.0.RC1
- AspectJ 1.6.12
- ジャクソン1.8.5
簡単にするために、プロファイル、ストーリーノード、およびそれらの間のロール関係があります。
プロファイルノード
ストーリーノード
役割の関係
最初はAspectJサポートを使用しませんでしたが、POJOと実際のノードの間に仕切りを生成するため、ユースケースに非常に役立ちます。したがって、リクエストとドメイン駆動型に応じてプロパティ/接続を簡単にリクエストできます。デザインアプローチはとてもいいようです。
質問1-AspectJ:
オブジェクトのデフォルトフィールドを定義したいとします。これらのフィールドは、URLで要求されたかどうかに関係なくクライアントに返されます...したがって、これらのフィールドで@FETCHアノテーションを試しましたが、使用すると機能しないようです。 AspectJ。現時点ではそのようにしています。
それを達成するための正しいアプローチですか?AspectJを使用している場合でも、@ FETCHアノテーションをサポートする必要がありますか?AspectJ + Neo4jについて話している例/ブログで、ほとんど何も見つかりませんでした。
質問2-ページネーション:
たとえば、特定の接続を要求するときにページネーションをサポートしたい
/ profile / {id} / stories /、ストーリーが以下のように関連している場合
/ profile / {id} / stories /、以下のように関連するストーリーの場合
ページ付けは、@Query ||のいずれかですぐにサポートされますか @RelatedTo || @RelatedToViaは、Set / List / Iterableの代わりにPageableインターフェイスを使用してPageを取得しますか?制限と並べ替えは、クライアントからの要求に応じて動的である必要があります... Cypher Query DSLを使用してそれを達成できますが、基本を使用することを好みます。他のアプローチは喜んで受け入れられます。
質問3-{self}を使用した@Query:
ちょっとばかげた質問ですが、仕方がありません:)、ノードエンティティ内で@Queryを使用する場合({self}パラメータ}を使用する場合、戻り型はIterableである必要があります。これは意味があります。例を見てみましょう。 。
公開された接続が要求された場合:
そのための回避策はありますか?これは、Profile内で@Transiantになる別のプロパティを作成していません。
質問4-漸化式:
推移的/再帰的関係に問題があります。ストーリーで新しいプロファイルロールを割り当てると、リレーションエンティティロールに@EndNodeストーリーが含まれ、ロール接続が含まれます...そのうちの1つは上記のコンテキストロールであり、終了することはありません:) ...これらの終わりのない関係を作成しないようにSpringデータエンジンを構成する方法はありますか?
質問5-トランザクション:
前に言及したはずですが、Neo4j DBにRESTサーバーを使用しています。以前の記事から、トランザクションですぐに使用できるサポートがないことを理解していますか?組み込みサーバーを使用するときのように、私は次のコードを持っています...
これはRESTサーバーを使用するときにトランザクションで実行されますか?ここにはいくつかの操作がありますが、1つが失敗した場合、すべてが失敗しますか?
質問6-Mongo+Neo4j:
フィード、コメント、マッサージなど、リレーショナルな性質を持たないデータを保存する必要があります。これらを保存するためにMongoDB
との統合を考えました。クロスストアサポートを使用して、ドメインpojoフィールド/接続をmongo / neo4jの両方に分割できますか?AspectJをサポートしますか?
今のところは以上です....上記で提示したアプローチに関するコメントは大歓迎です..ありがとうございます。