Kepatuhan standar Gremlin di Amazon Neptune - Amazon Neptune

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Kepatuhan standar Gremlin di Amazon Neptune

Bagian berikut memberikan gambaran umum tentang implementasi Neptunus Gremlin dan bagaimana hal itu berbeda dari implementasi Apache. TinkerPop

Neptunus mengimplementasikan beberapa langkah Gremlin secara native di mesinnya, dan menggunakan implementasi TinkerPop Apache Gremlin untuk memproses yang lain (lihat). Dukungan langkah Gremlin asli di Amazon Neptune

catatan

Untuk beberapa contoh konkret dari perbedaan implementasi ini yang ditunjukkan di Konsol Gremlin dan Amazon Neptune, lihat bagian Menggunakan Gremlin untuk mengakses grafik di Amazon Neptunus dari Quick Start.

Standar yang Berlaku untuk Gremlin

Variabel dan parameter dalam skrip

Jika variabel pra-terikat bersangkutan, objek traversal g adalah Pre-bound di Neptunus, dan objek tidak didukung. graph

Meskipun Neptunus tidak mendukung variabel Gremlin atau parameterisasi dalam skrip, Anda mungkin sering menemukan skrip sampel untuk Server Gremlin di Internet yang berisi deklarasi variabel, seperti:

String query = "x = 1; g.V(x)"; List<Result> results = client.submit(query).all().get();

Ada juga banyak contoh yang menggunakan parameterisasi (atau binding) saat mengirimkan kueri, seperti:

Map<String,Object> params = new HashMap<>(); params.put("x",1); String query = "g.V(x)"; List<Result> results = client.submit(query).all().get();

Contoh parameter biasanya dikaitkan dengan peringatan tentang hukuman kinerja karena tidak membuat parameter bila memungkinkan. Ada banyak sekali contoh seperti itu TinkerPop yang mungkin Anda temui, dan semuanya terdengar cukup meyakinkan tentang perlunya membuat parameter.

Namun, baik fitur deklarasi variabel dan fitur parameterisasi (bersama dengan peringatan) hanya berlaku untuk Server TinkerPop Gremlin saat menggunakan. GremlinGroovyScriptEngine Mereka tidak berlaku ketika Gremlin Server menggunakan gremlin-language ANTLR tata bahasa Gremlin untuk mengurai kueri. ANTLRTata bahasa tidak mendukung deklarasi variabel atau parameterisasi, jadi saat menggunakanANTLR, Anda tidak perlu khawatir gagal membuat parameter. Karena ANTLR tata bahasa adalah komponen yang lebih baru TinkerPop, konten lama yang mungkin Anda temui di Internet umumnya tidak mencerminkan perbedaan ini.

Neptunus menggunakan ANTLR tata bahasa dalam mesin pemrosesan kueri daripadaGremlinGroovyScriptEngine, sehingga tidak mendukung variabel atau parameterisasi atau properti. bindings Akibatnya, masalah yang terkait dengan kegagalan parameterisasi tidak berlaku di Neptunus. Menggunakan Neptunus, sangat aman hanya untuk mengirimkan kueri apa adanya di mana seseorang biasanya akan membuat parameter. Akibatnya, contoh sebelumnya dapat disederhanakan tanpa penalti kinerja sebagai berikut:

String query = "g.V(1)"; List<Result> results = client.submit(query).all().get();

TinkerPop enumerasi

Neptune tidak mendukung nama kelas yang memenuhi syarat untuk nilai pencacahan. Misalnya, Anda harus menggunakan single dan bukan org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single dalam permintaan Groovy Anda.

Jenis pencacahan ditentukan oleh jenis parameter.

Tabel berikut menunjukkan nilai enumerasi yang diizinkan dan nama yang TinkerPop sepenuhnya memenuhi syarat terkait.

Kode Java

Neptunus tidak mendukung panggilan ke metode yang ditentukan oleh panggilan perpustakaan Java atau Java arbitrer selain Gremlin yang didukung. APIs Misalnya, java.lang.*, Date(), dan g.V().tryNext().orElseGet() tidak diperbolehkan.

Properti pada elemen

Neptunus tidak mendukung bendera materializeProperties yang diperkenalkan di 3.7.0 untuk mengembalikan TinkerPop properti pada elemen. Akibatnya, Neptunus masih hanya akan mengembalikan simpul atau tepi sebagai referensi hanya dengan dan. id label

Eksekusi skrip

Semua kueri harus dimulai dengan g, objek traversal.

Dalam pengiriman kueri String, beberapa traversals dapat dikeluarkan terpisah dengan titik koma (;) atau karakter baris baru (\n). Untuk dieksekusi, setiap pernyataan selain yang terakhir harus diakhiri dengan langkah .iterate(). Hanya data dari traversal akhir yang dikembalikan. Perhatikan bahwa ini tidak berlaku untuk pengiriman GLV ByteCode kueri.

Sesi

Sesi di Neptune dibatasi hanya durasi 10 menit. Lihat Sesi berbasis skrip Gremlin dan Referensi TinkerPop Sesi untuk informasi lebih lanjut.

Transaksi

Neptune membuka transaksi baru pada awal setiap traversal Gremlin dan menutup transaksi setelah berhasil menyelesaikan traversal. Transaksi di-rollback ketika ada kesalahan.

Beberapa pernyataan dipisahkan dengan titik koma (;) atau karakter baris baru (\n) disertakan dalam satu transaksi. Setiap pernyataan selain yang terakhir harus diakhiri dengan langkah next() yang akan dieksekusi. Hanya data dari traversal akhir yang dikembalikan.

Logika transaksi manual menggunakan tx.commit() dan tx.rollback() tidak didukung.

penting

Ini hanya berlaku untuk metode di mana Anda mengirim kueri Gremlin sebagai string teks (lihatTransaksi Gremlin).

Vertex dan tepi IDs

Neptunus Gremlin Vertex dan Edge harus bertipe. IDs String String ID ini mendukung karakter Unicode, dan ukurannya tidak boleh melebihi 55 MB.

Disediakan pengguna IDs didukung, tetapi opsional dalam penggunaan normal. Jika Anda tidak memberikan ID ketika Anda menambahkan simpul atau tepi, Neptunus menghasilkan dan mengubahnya UUID menjadi string, dalam bentuk seperti ini:. "48af8178-50ce-971a-fc41-8c9a954cea62" Ini UUIDs tidak sesuai dengan RFC standar, jadi jika Anda membutuhkan standar, UUIDs Anda harus membuatnya secara eksternal dan menyediakannya saat Anda menambahkan simpul atau tepi.

catatan

Perintah Load Neptunus mengharuskan Anda IDs menyediakan, menggunakan bidang ~id dalam format Neptunus. CSV

Disediakan pengguna IDs

Disediakan pengguna IDs diizinkan di Neptunus Gremlin dengan ketentuan berikut.

  • Disediakan IDs adalah opsional.

  • Hanya vertex dan edge yang didukung.

  • Hanya tipe String yang didukung.

Untuk membuat vertex baru dengan ID kustom, gunakan langkah property dengan Kata Kunci id: g.addV().property(id, 'customid').

catatan

Jangan menaruh tanda kutip di sekitar Kata Kunci id. Ini mengacu padaT.id.

Semua simpul IDs harus unik, dan semua tepi IDs harus unik. Namun, Neptune tidak mengizinkan vertex dan edge untuk memiliki ID yang sama.

Jika Anda mencoba untuk membuat sebuah vertex baru menggunakan g.addV() dan sebuah vertex dengan ID sudah ada, operasi gagal. Pengecualian untuk ini adalah jika Anda menentukan label baru untuk vertex tersebut, operasi berhasil tetapi menambahkan label baru dan properti tambahan yang ditentukan ke vertex yang ada. Tidak ada yang ditimpa. Sebuah vertex baru tidak dibuat. ID vertex tidak berubah dan tetap unik.

Misalnya, perintah konsol Gremlin berikut berhasil:

gremlin> g.addV('label1').property(id, 'customid') gremlin> g.addV('label2').property(id, 'customid') gremlin> g.V('customid').label() ==>label1::label2

Properti Vertex IDs

Properti Vertex IDs dihasilkan secara otomatis dan dapat muncul sebagai angka positif atau negatif ketika ditanyakan.

Kardinalitas sifat simpul

Neptune mendukung kardinalitas rangkaian dan kardinalitas tunggal. Jika tidak ditentukan, kardinalitas rangkaian dipilih. Ini berarti bahwa jika Anda menetapkan nilai properti, ia menambahkan nilai baru ke properti, tetapi hanya jika itu belum muncul di set nilai. Ini adalah nilai pencacahan Gremlin Set.

List tidak didukung. Untuk informasi lebih lanjut tentang kardinalitas properti, lihat topik Vertex di Gremlin. JavaDoc

Memperbarui properti vertex

Untuk memperbarui nilai properti tanpa menambahkan nilai tambahan untuk set nilai, tentukan kardinalitas single dalam langkah property.

g.V('exampleid01').property(single, 'age', 25)

Ini akan menghapus semua nilai yang ada untuk properti tersebut.

Label

Neptune mendukung beberapa label untuk sebuah vertex. Ketika Anda membuat label, Anda dapat menentukan beberapa label dengan memisahkannya dengan ::. Sebagai contoh, g.addV("Label1::Label2::Label3") menambahkan sebuah vertex dengan tiga label yang berbeda. Langkah hasLabel cocok dengan vertex ini dengan salah satu dari tiga label tersebut: hasLabel("Label1"), hasLabel("Label2"), dan hasLabel("Label3").

penting

Pembatas :: dicadangkan untuk penggunaan ini saja. Anda tidak dapat menentukan beberapa label di langkah hasLabel. Misalnya, hasLabel("Label1::Label2") tidak cocok dengan apa pun.

Karakter melarikan diri

Neptune menyelesaikan semua karakter escape seperti yang dijelaskan dalambagian Meng-Escape Karakter Khusus dari dokumentasi bahasa Apache Groovy.

Keterbatasan Groovy

Neptune tidak mendukung perintah Groovy yang tidak dimulai dengan g. Ini termasuk matematika (misalnya, 1+1), panggilan sistem (misalnya, System.nanoTime()), dan definisi variabel (misalnya, 1+1).

penting

Neptune tidak mendukung nama kelas yang memenuhi syarat. Misalnya, Anda harus menggunakan single dan bukan org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single dalam permintaan Groovy Anda.

Serialisasi

Neptunus mendukung serialisasi berikut berdasarkan jenis yang diminta. MIME

MIMEjenis Serialisasi Konfigurasi

application/vnd.gremlin-v1.0+json

GraphSONMessageSerializerV1 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1]

application/vnd.gremlin-v1.0+json;types=false

GraphSONUntypedMessageSerializerV1 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1]

application/vnd.gremlin-v2.0+json

GraphSONMessageSerializerV2 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2]

application/vnd.gremlin-v2.0+json;types=false

GraphSONUntypedMessageSerializerV2 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2]

application/vnd.gremlin-v3.0+json

GraphSONMessageSerializerV3 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3]

application/vnd.gremlin-v3.0+json;types=false

GraphSONUntypedMessageSerializerV3 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3]

application/json

GraphSONUntypedMessageSerializerV3 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1]

application/vnd.graphbinary-v1.0

GraphBinaryMessageSerializerV1

application/vnd.graphbinary-v1.0-stringd

GraphBinaryMessageSerializerV1 serializeResultToString: true

application/vnd.gremlin-v1.0+json

GraphSONMessageSerializerGremlinV1 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1]

application/vnd.gremlin-v2.0+json

GraphSONMessageSerializerV2(hanya bekerja dengan WebSockets) ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2]

application/vnd.gremlin-v3.0+json

GraphSONMessageSerializerV3

application/json

GraphSONMessageSerializerV3 ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3]

application/vnd.graphbinary-v1.0

GraphBinaryMessageSerializerV1

Sementara Neptunus mendukung jenis serializer yang berbeda ini, panduan penggunaannya cukup mudah. Jika Anda terhubung ke Neptunus, HTTP prioritaskan penggunaan application/vnd.gremlin-v3.0+json;types=false sebagai tipe yang disematkan dalam versi alternatif SON Grafik 3 membuatnya rumit untuk dikerjakan. Jika Anda menggunakan TinkerPop driver Apache, Anda mungkin tidak perlu membuat pilihan karena Anda akan menggunakan default. application/vnd.graphbinary-v1.0 application/vnd.graphbinary-v1.0-stringdUmumnya hanya berguna bila digunakan bersama dengan konsol Gremlin karena mengubah semua hasil menjadi representasi string untuk tampilan sederhana. Format yang tersisa tetap ada karena alasan lama.

catatan

Tabel serializer yang ditampilkan di sini mengacu pada penamaan pada 3.7.0. TinkerPop Jika Anda ingin tahu lebih banyak tentang perubahan ini, silakan lihat dokumentasi TinkerPop pemutakhiran. Dukungan serialisasi Gryo tidak digunakan lagi di 3.4.3 dan secara resmi dihapus di 3.6.0. Jika Anda secara eksplisit menggunakan Gryo atau pada versi driver yang menggunakannya secara default, maka Anda harus beralih ke GraphBinary atau meningkatkan driver Anda.

Langkah-langkah Lambda

Neptune tidak mendukung Lambda Steps.

Metode Gremlin yang tidak didukung

Neptune tidak mendukung metode Gremlin berikut:

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.program(org.apache.tinkerpop.gremlin.process.computer.VertexProgram)

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.sideEffect(java.util.function.Consumer)

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.from(org.apache.tinkerpop.gremlin.structure.Vertex)

  • org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.to(org.apache.tinkerpop.gremlin.structure.Vertex)

Misalnya, traversal berikut tidak diperbolehkan: g.V().addE('something').from(__.V().next()).to(__.V().next()).

penting

Ini hanya berlaku untuk metode di mana Anda mengirim kueri Gremlin sebagai string teks.

Langkah-langkah Gremlin yang tidak didukung

Neptune tidak mensupport langkah-langkah Gremlin berikut:

  • Langkah Gremlin io () hanya didukung sebagian di Neptunus. Ini dapat digunakan dalam konteks baca, seperti dalamg.io((url)).read(), tetapi tidak untuk menulis.

Fitur grafik Gremlin di Neptunus

Implementasi Gremlin Neptune tidak mengeksposgraphobjek. Tabel berikut mencantumkan fitur Gremlin dan menunjukkan apakah Neptunus mendukungnya atau tidak.

Dukungan Neptunus untuk fitur graph

Fitur grafik Neptunus, jika didukung, sama seperti yang akan dikembalikan oleh perintah. graph.features()

Fitur grafik Diaktifkan?
Transactions true
ThreadedTransactions SALAH
Computer SALAH
Persistence true
ConcurrentAccess true

Dukungan Neptunus untuk fitur variabel

Fitur variabel Diaktifkan?
Variables false
SerializableValues false
UniformListValues false
BooleanArrayValues false
DoubleArrayValues false
IntegerArrayValues false
StringArrayValues false
BooleanValues false
ByteValues false
DoubleValues false
FloatValues false
IntegerValues false
LongValues false
MapValues false
MixedListValues false
StringValues false
ByteArrayValues false
FloatArrayValues false
LongArrayValues false

Dukungan Neptunus untuk fitur vertex

Fitur Vertex Diaktifkan?
MetaProperties false
DuplicateMultiProperties SALAH
AddVertices true
RemoveVertices true
MultiProperties true
UserSuppliedIds true
AddProperty true
RemoveProperty true
NumericIds SALAH
StringIds BETUL
UuidIds SALAH
CustomIds false
AnyIds false

Dukungan Neptunus untuk fitur properti vertex

Fitur properti Vertex Diaktifkan?
UserSuppliedIds SALAH
AddProperty true
RemoveProperty true
NumericIds true
StringIds true
UuidIds SALAH
CustomIds false
AnyIds SALAH
Properties BETUL
SerializableValues SALAH
UniformListValues false
BooleanArrayValues false
DoubleArrayValues false
IntegerArrayValues false
StringArrayValues SALAH
BooleanValues true
ByteValues true
DoubleValues true
FloatValues true
IntegerValues true
LongValues true
MapValues SALAH
MixedListValues SALAH
StringValues BETUL
ByteArrayValues SALAH
FloatArrayValues false
LongArrayValues false

Dukungan Neptunus untuk fitur tepi

Fitur tepi Diaktifkan?
AddEdges true
RemoveEdges true
UserSuppliedIds true
AddProperty true
RemoveProperty true
NumericIds SALAH
StringIds BETUL
UuidIds SALAH
CustomIds false
AnyIds false

Dukungan Neptunus untuk fitur properti edge

Fitur properti tepi Diaktifkan?
Properties true
SerializableValues SALAH
UniformListValues false
BooleanArrayValues false
DoubleArrayValues false
IntegerArrayValues false
StringArrayValues SALAH
BooleanValues true
ByteValues true
DoubleValues true
FloatValues true
IntegerValues true
LongValues true
MapValues SALAH
MixedListValues SALAH
StringValues BETUL
ByteArrayValues SALAH
FloatArrayValues false
LongArrayValues false