View a markdown version of this page

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 Gremlin Neptunus dan bagaimana perbedaannya dari implementasi Apache TinkerPop .

Neptunus mengimplementasikan beberapa langkah Gremlin secara asli di mesinnya, dan menggunakan implementasi Apache TinkerPop 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 data grafik di Amazon Neptunus dari Quick Start.

Standar yang Berlaku untuk Gremlin

  • Bahasa Gremlin didefinisikan oleh TinkerPop Dokumentasi Apache dan TinkerPop implementasi Apache dari Gremlin daripada dengan spesifikasi formal.

  • Untuk format numerik, Gremlin mengikuti standar IEEE 754 (IEEE 754-2019 - Standar IEEE untuk Aritmatika. Floating-Point Untuk informasi lebih lanjut, lihat juga halaman Wikipedia IEEE 754).

Variabel dan parameter dalam skrip

Dalam hal variabel pra-terikat, objek traversal g berada Pre-bound di Neptunus, dan graph objek tidak didukung.

Meskipun Neptunus tidak mendukung variabel Gremlin atau parameterisasi dalam skrip, Anda mungkin sering menemukan contoh skrip 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 melakukan parameterisasi bila memungkinkan. Ada banyak sekali contoh TinkerPop yang mungkin Anda temui, dan semuanya terdengar cukup meyakinkan tentang perlunya parameterisasi.

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

Neptunus menggunakan tata bahasa ANTLR 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 melakukan parameter. Akibatnya, contoh sebelumnya dapat disederhanakan tanpa penalti kinerja sebagai berikut:

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

Eksekusi skrip

Mesin Gremlin Neptunus mengurai kueri menggunakan tata bahasa ANTLR TinkerPop. gremlin-language Itu tidak menjalankan GremlinGroovyScriptEngine (seperti yang dilakukan beberapa penerapan Server TinkerPop-based Gremlin), jadi skrip yang dikirimkan ke Neptunus harus berisi hanya bahasa Gremlin — bukan kode Groovy atau Java yang sewenang-wenang.

Skrip dapat dikirim ke Neptunus dalam berbagai cara, seperti melalui titik akhir Gremlin REST, Gremlin Console, atau melalui driver TinkerPop bahasa (misalnya, klien skrip driver Java). Kendala yang dijelaskan di bagian ini berlaku untuk salah satu jalur pengiriman string teks ini.

Penting untuk tidak membingungkan bahasa Gremlin itu sendiri dengan gula sintaksis atau fungsi tujuan umum dari bahasa pemrograman apa pun yang mungkin pernah Anda lihat membungkus contoh Gremlin di tempat lain. Jika kode tersebut muncul dalam TinkerPop tutorial atau sampel online, itu tergantung pada runtime Groovy atau Java yang tidak disediakan Neptunus.

penting

Semua yang ada di bagian ini berlaku untuk kiriman Gremlin string teks. Pengajuan bytecode GLV (Gremlin Language Variant) yang dibangun dalam bahasa host seperti Java, Python, atau.NET tidak tunduk pada batasan ini, karena pembuat traversal bahasa host menghasilkan bytecode yang dikonsumsi mesin Neptunus secara langsung.

Apa yang mungkin berisi skrip

  • Semua kueri harus dimulai dengan g, objek traversal.

  • Beberapa traversal dapat dikeluarkan dalam satu pengiriman yang dipisahkan oleh titik koma (;) atau karakter baris baru (). \n Setiap pernyataan selain yang terakhir harus diakhiri dengan .iterate() langkah yang akan dieksekusi; hanya data traversal akhir yang dikembalikan.

Mereferensikan nilai TinkerPop enumerasi

Jika nilai TinkerPop enumerasi diharapkan sebagai argumen langkah (misalnya, kardinalitas pada property() atau urutan padaby()), gunakan nilai bentuk pendek yang dikenali oleh tata bahasa ANTLR. Neptunus tidak menyelesaikan nama kelas Java yang sepenuhnya memenuhi syarat dalam posisi ini - misalnya, tidak org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single diterima; gunakan sebagai single gantinya.

Tabel berikut mencantumkan nilai bentuk pendek yang diizinkan dan TinkerPop kelas yang mendasarinya masing-masing.

Apa yang mungkin tidak mengandung skrip

Berikut ini tidak didukung dalam kueri Gremlin string teks ke Neptunus, karena mereka bergantung pada dukungan runtime Groovy atau Java yang tidak disediakan Neptune:

  • Pernyataan keren yang tidak dimulai dengang. Hal ini mencakup:

    • Ekspresi aritmatika seperti 1 + 1

    • Panggilan sistem seperti System.nanoTime()

    • Deklarasi variabel seperti x = 1; g.V(x)

  • Metode Java atau panggilan pustaka selain API Gremlin yang didukung. Misalnya, java.lang.*, Date(), dan g.V().tryNext().orElseGet(...) tidak diperbolehkan.

  • Metode Gremlin yang mengambil tipe Java sebagai argumen. Ini hanya dapat dijangkau dari JVM-language host, bukan dari pengiriman string teks. Contoh:

    • 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 dapat dikirimkan sebagai string teks:g.V().addE('something').from(__.V().next()).to(__.V().next()).

Properti pada elemen

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

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).

ID simpul dan tepi

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

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

catatan

Per Load intah Neptune mengharuskan Anda memberikan ID, menggunakan bidang ~id dalam format CSV Neptune.

User-supplied ID

User-supplied ID diperbolehkan di Neptunus Gremlin dengan ketentuan berikut.

  • ID yang disediakan 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 ID vertex harus unik, dan semua ID edge 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

ID properti Vertex

ID properti Vertex dihasilkan secara otomatis dan dapat muncul sebagai angka positif atau negatif ketika dikueri.

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 selengkapnya 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.

Serialisasi

Neptune mendukung serialisasi berikut berdasarkan jenis MIME yang diminta.

Dengan Neptunus, Anda dapat menggunakan banyak serializer yang TinkerPop ditawarkan, dengan dukungan untuk berbagai versi dan konfigurasi GraphSon dan. GraphBinary Lihat tabel berikut untuk serializer yang didukung saat ini. Meskipun ada banyak opsi yang ada, panduan untuk digunakan sangat mudah:

  • Jika Anda menggunakan TinkerPop driver Apache, pilih default untuk driver tanpa menentukannya secara eksplisit. Kecuali Anda memiliki alasan yang sangat spesifik untuk melakukannya, Anda mungkin tidak perlu menentukan serializer dalam inisialisasi driver Anda. Secara umum, default yang digunakan oleh driver adalahapplication/vnd.graphbinary-v1.0.

  • Jika Anda terhubung ke Neptunus melalui HTTP, prioritaskan penggunaan application/vnd.gremlin-v3.0+json;types=false sebagai tipe tertanam dalam versi alternatif GraphsOn 3 membuatnya rumit untuk dikerjakan.

  • Um application/vnd.graphbinary-v1.0-stringd umnya hanya berguna ketika digunakan bersama dengan Gremlin Console karena mengubah semua hasil menjadi representasi string untuk tampilan sederhana.

  • Format yang tersisa tetap ada karena alasan lama dan biasanya tidak boleh digunakan dengan driver tanpa alasan yang jelas.

Tipe MIME Serialisasi Konfigurasi

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
catatan

Tabel serializer yang ditampilkan di sini mengacu pada penamaan pada TinkerPop 3.7.0. Jika Anda ingin mengetahui lebih lanjut tentang perubahan ini, silakan lihat dokumentasi TinkerPop peningkatan. 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.

Langkah-langkah Gremlin yang tidak didukung

Neptune tidak mensupport langkah-langkah Gremlin berikut:

  • Langkah Gremlin io () hanya didukung sebagian di Neptunus. Anda dapat menggunakannya dalam konteks baca, seperti padag.io("https://example.com/data/my-graph.graphml").read(), tetapi Anda tidak dapat menggunakannya untuk menulis. Untuk membaca file yang Anda simpan sebagai objek Amazon S3, pertama-tama buat URL yang telah ditandatangani sebelumnya. Kemudian berikan URL HTTPS itu keg.io(). Untuk informasi selengkapnya tentang URL yang telah ditandatangani sebelumnya, lihat Mengunduh dan mengunggah objek dengan URL yang telah ditandatangani sebelumnya di Panduan Pengguna Amazon S3.

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 grafik

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

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 tepi

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