Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Petunjuk kueri Gremlin repeatMode
Petunjuk kueri repeatMode
Neptune menentukan bagaimana mesin Neptune mengevaluasi langkah repeat()
dalam traversal Gremlin: breadth first, depth first, atau chunked depth first.
Mode evaluasi langkah repeat()
penting ketika digunakan untuk menemukan atau mengikuti jalur, bukan hanya mengulangi langkah dalam jumlah pengulangan terbatas.
Sintaks
Petunjuk kueri repeatMode
ditentukan dengan menambahkan langkah withSideEffect
untuk kueri.
g.withSideEffect('Neptune#repeatMode', '
mode
').gremlin-traversal
catatan
Semua efek samping petunjuk kueri Gremlin diprefiks dengan Neptune#
.
Mode yang Tersedia
-
BFS
Pencarian Breadth-First
Mode eksekusi default untuk langkah
repeat()
. Ini mendapat semua node saudara sebelum pergi lebih dalam sepanjang jalur.Versi ini intensif memori dan perbatasan bisa menjadi sangat besar. Ada risiko yang lebih tinggi bahwa kueri akan kehabisan memori dan dibatalkan oleh mesin Neptune. Ini paling cocok dengan implementasi Gremlin lainnya.
-
DFS
Pencarian Depth-First
Mengikuti setiap jalur ke kedalaman maksimum sebelum beralih ke solusi berikutnya.
Ini menggunakan lebih sedikit memori. Ini dapat memberikan performa yang lebih baik dalam situasi seperti menemukan jalur tunggal dari titik awal ke beberapa hop.
-
CHUNKED_DFS
Pencarian Chunked Depth-First
Pendekatan hibrida yang mengeksplorasi depth-first grafik dalam potongan 1.000 node, bukan 1 node (
DFS
) atau semua node (BFS)
).Mesin Neptune akan mendapatkan hingga 1.000 node pada setiap tingkat sebelum mengikuti jalur yang lebih dalam.
Ini adalah pendekatan yang seimbang antara kecepatan dan penggunaan memori.
Hal ini juga berguna jika Anda ingin menggunakan
BFS
, tapi kueri menggunakan terlalu banyak memori.
Contoh
Bagian berikut menjelaskan efek dari mode pengulangan pada traversal Gremlin.
Di Neptune, mode default untuk langkah repeat()
adalah untuk melakukan strategi eksekusi breadth-first (BFS
) untuk semua traversal.
Dalam kebanyakan kasus, TinkerGraph implementasi menggunakan strategi eksekusi yang sama, tetapi dalam beberapa kasus mengubah eksekusi traversal.
Misalnya, TinkerGraph implementasi memodifikasi query berikut.
g.V("
3
").repeat(out()).times(10).limit(1).path()
Langkah repeat()
dalam traversal ini di-“unrolled” ke dalam traversal berikut, yang menghasilkan strategi depth-first (DFS
).
g.V(<id>).out().out().out().out().out().out().out().out().out().out().limit(1).path()
penting
Mesin permintaan Neptune tidak melakukan ini secara otomatis.
Breadth-first (BFS
) adalah strategi eksekusi default, dan mirip dengan TinkerGraph dalam kebanyakan kasus. Namun, ada kasus-kasus tertentu di mana strategi depth (DFS
) lebih baik.
BFS(Default)
Breadth-first (BFS) adalah strategi eksekusi default untuk operator. repeat()
g.V("
3
").repeat(out()).times(10).limit(1).path()
Mesin Neptune sepenuhnya mengeksplorasi perbatasan sembilan hop pertama sebelum menemukan sepuluh hop solusi. Hal ini efektif dalam banyak kasus, seperti kueri jalur terpendek.
Namun, untuk contoh sebelumnya, traversal akan jauh lebih cepat menggunakan mode depth-first (DFS
) untuk operator repeat()
.
DFS
Kueri berikut menggunakan mode depth-first (DFS
) untuk operator repeat()
.
g.withSideEffect("Neptune#repeatMode", "DFS").V("
3
").repeat(out()).times(10).limit(1)
Ini mengikuti setiap solusi individu ke kedalaman maksimum sebelum menjelajahi solusi berikutnya.