البرمجة

تحسين كفاءة حذف الحواف في TitanGraph باستخدام استعلامات TinkerPop3

فيما يبدو، تحتاج إلى طريقة أكثر فعالية لإزالة الرابط بين رأسين في الرمز الخاص بك. يمكن تحسين الأداء وتبسيط الشيفرة باستخدام استعلام مباشر لإزالة الرابط المطلوب. قد يتساءل البعض عن الأسباب التي تجعل الكود الحالي غير فعال، لنقم بتحليل ذلك ومن ثم سنقترح حلاً أفضل.

أولاً وقبل كل شيء، يبدو أن الشيفرة تستخدم TinkerPop3 مع TitanGraph. يجب علينا مراعاة أن TitanGraph تم استبداله بـ JanusGraph في الإصدارات الحديثة، وهو ما يمكن أن يؤثر على توفر بعض الوظائف.

الشيفرة الحالية تقوم بفحص كل الحواف بين الرأسين وتحديد الحافة المراد إزالتها بناءً على العديد من الشروط. قد يؤدي هذا إلى أداء غير فعّال خاصة إذا كانت الرسوم البيانية كبيرة.

بدلاً من ذلك، يمكنك استخدام استعلام مباشر لحذف الحافة المطلوبة، مثلما يلي:

java
private void removeEdgeOfTwoVertices(Vertex fromV, Vertex toV, String edgeLabel, GraphTraversalSource g) { g.V(fromV).outE(edgeLabel).where(__.inV().hasId(toV.id())).drop().toList(); }

هذا الاستعلام يقوم بالبحث عن الحافة المرتبطة برأس fromV، والتي تحمل العلامة edgeLabel وتتصل برأس toV، ثم يقوم بحذفها مباشرة. يُفضل هذا الأسلوب لأنه يقلل من عدد الخطوات المطلوبة لإزالة الحافة.

من الجيد دائمًا أن نكون حذرين عند استخدام عمليات التعديل على الرسوم البيانية لتجنب أخطاء الأداء أو فقدان البيانات، لذلك يفضل دائمًا اختبار الشيفرة بشكل جيد.

المزيد من المعلومات

بالطبع، يمكننا توسيع المناقشة حول بعض الجوانب الإضافية لتحسين وفهم الكود الخاص بك.

في الكود الذي قدمته، يتم استخدام TinkerPop3 مع TitanGraph، وهو نظام قديم لقواعد البيانات الرسومية. ومع أنه كان منتشرًا في السابق، إلا أن JanusGraph قد تم تطويره كبديل له. JanusGraph يقدم أداءً محسّنًا وتحديثات أمان أفضل، لذا يفضل التحول إليه إذا كنت تستخدم TitanGraph في مشروعك.

تحسين الشيفرة ليس فقط حول كفاءة الأداء، ولكن أيضًا حول إتقان أسلوب البرمجة. في الشيفرة الأصلية، تم استخدام TitanGraph().tx() لبدء وتأكيد العمليات التي تتطلب تحول الرسم البياني. ومع ذلك، في الكود الذي قدمته لك، تم التخلص من هذا الجزء لتبسيط الشيفرة. إزالة الحافة تمت مباشرة دون الحاجة إلى هذه الخطوات.

لاحظ أيضًا أننا استخدمنا __.inV().hasId(toV.id()) لتحديد الرأس الذي نريد. هذا يستخدم عبارات الاستعلام في TinkerPop3 ويعني “الحافة التي تتصل بالرأس الذي له الهوية toV”. هذا أكثر وضوحًا من استخدام قائمة حافة لفحص الحافة المطلوبة.

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

زر الذهاب إلى الأعلى