كيف يمكنني تخزين هذا النوع من الرسم البياني في NEO4J للعب سريع؟

StackOverflow https://stackoverflow.com/questions/2421959

  •  19-09-2019
  •  | 
  •  

سؤال

هذا هو رسم بياني موجود لعقده في العديد من المكونات المتصلة مرة واحدة لأن علاقات العقدة هي مجموعة من مجموعات الحافة بحيث يمكن أن تكون حافة واحدة فقط لكل مجموعة حافة موجودة في وقت واحد. أحتاج إلى أن أكون قادرا على العثور على جميع المكونات المتصلة التي توجد فيها عقدة. ماذا ستكون أفضل طريقة لتخزين هذا الرسم البياني في NEO4J للعثور بسرعة على جميع المكونات المتصلة التي توجد بها عقدة؟ هل هناك طريقة لاستخدام اجتذارات المدمجة للقيام بذلك؟

أيضا: هل هناك اسم لهذا النوع من الرسم البياني؟ كنت أقدر أي مساعدة / أفكار.

تحديث:

المعذرة لعدم كوني واضحا. جميع العقد هي من نفس النوع. العقد لها عدد متغير من مجموعات الحافة. يجب اختيار حافة واحدة بالضبط من كل مجموعة حافة لمكون متصل معين. سأحاول أن أشرح من خلال المثال:

Node x1 is related to: (x2 or x3 or x4) AND (x5 or x6) AND (x7)
Node x2 is related to: (x8) AND (x9 or x10)

لذلك المجموعة الحافة الأولى ل X1 هي (x2, x3, x4), ، مجموعة الحافة الثانية هي (x5, x6), ، ومجموعة الحافة الثالثة هي (x7).

حتى هنا عدد قليل من المكونات المتصلة التي x1 موجود في:

CC1:

x1 is related to: x2, x5, x7
x2 is related to: x8 x9 

CC2:

x1 is related to: x2, x6, x7
x2 is related to: x8, x9

CC3:

x1 is related to: x3, x5, x7

CC4:

x1 is related to: x3, x6, x7

إلخ.

أنا ممتن لمساعدتك في هذا.

تحديث 2:

أعتقد أنني سأكون قادرا على القيام بذلك إذا كان هناك إجابة على هذا السؤال:كيف يمكنني تحديد نوع العلاقة التي يجب استخدامها كدالة للعقدة الحالية في كل خطوة من اجتياز اجتياز مع NEO4J؟

هل كانت مفيدة؟

المحلول

إنهم بطريقة أفهم سؤالك لديك عدد من العقد، دعونا نسميهم العقد x, ، وهي متصلة بعدد من العقد من النوع (أو شيء مماثل)، دعونا ندعو هذه العقد العقد ر. وبعد يمكن أن تحتوي عقدة X على اتصالات بعدة عقدة متعددة، ولكن اتصال واحد فقط بكل عقدة لكل ر، أو ربما اتصال واحد فقط لكل منهما عطوف من t node (وصفك هو غامض بعض الشيء هنا).

الطريقة التي أقوم بها من خلال استخدام علاقة واحدة لكل عقدة (نوع من) ر. ثم يمكنك استخدام x_node.getRelationships (t_type_one، t_type_two، ... إلخ ...) للحصول على جميع العقد T من عقدة x. عندما تتحور عقدة x هي المكان الذي تحتاج فيه إلى الحفاظ على الثبات الخاص بك أنه لا يمكن أن يكون لديك فقط علاقة واحدة لكل عقدة (نوع من). تقوم بهذا بك باستخدام x_node.getsinglerelationship (the_t_type_youre_mutating)، إذا كان ذلك إرجاع NULL، فمن الآمن إضافة علاقة جديدة بهذا النوع، إذا ترجع العلاقة، فسيتعين عليك إزالته قبل أن تتمكن من إضافة واحدة جديدة.

مثال ASCII-ART على هذا النموذج (كما أفسر ذلك):

(x1)--T_ONE-->(t1a)   (t1b)<--T_ONE--(x2)--T_FOUR-->(t4a)
 |\                                   |
 \ |---T_TWO-->(t2a)                 /
  \                                 /
   |---T_THREE-->(t3a)<--T_THREE---/

في المثال أعلاه، تعد العقد العالية جزءا من مكونات T_ONE، ولكن X1 جزء من مكون T1A و X2 جزء من T1B. كلاهما جزء من مكون T3A T2A، ثم X1 جزء من مكون T2A T2A، و X2 جزء من T_Four Component T4A. الاستعلام في هذا المثال سوف تبدو مثل:

Iterable<Relationship> x1_comps = x1.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR);
Iterable<Relationship> x2_comps = x2.getRelationships(T_ONE, T_TWO, T_THREE, T_FOUR);

وتحديث سيظهر مثل هذا:

void setComponent(Node xNode, RelationshipType tType, Node tNode) {
    Relationship current = xNode.getSingleRelationship(tType);
    if (current != null) current.delete();
    xNode.createRelationshipTo(tNode, tType);
}

واسمحوا لي أن أعرف إذا أسيء تفسير متطلباتك، وسأكون سعيدا بإعطاء وصفك المحدث طعنة.

نصائح أخرى

فيما يتعلق بالاستعلام الآخر، أشرت إلى بعض الاحتمالات لوظائف الحبيبات الدقيقة في كيف يمكنني تحديد نوع العلاقة التي يجب استخدامها كدالة للعقدة الحالية في كل خطوة من اجتياز اجتياز مع NEO4J؟في الأساس، لا تستخدم عبور ولكن أكثر من العقدة المباشرة. getrelationship * api وبناء التكرار الخاص بك لسيطرة الحبيبات الدقيقة.

هل هذا يحل مشكلتك؟

/ بيتر neubauer

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top