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.
Topik
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
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).
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 ().\nSetiap 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.
| Nilai yang Diizinkan | Kelas |
|---|---|
id, key, label, value |
|
T.id, T.key, T.label, T.value |
|
set, single |
org.apache.tinkerpop.gremlin.struktur. VertexProperty.Cardinality |
asc, desc, shuffle |
|
Order.asc, Order.desc, Order.shuffle |
|
global, local |
|
Scope.global, Scope.local |
|
all, first, last, mixed |
|
normSack |
org.apache.tinkerpop.gremlin.process.traversal. SackFunctions.Barrier |
addAll, and, assign, div,
max, min, minus, mult,
or, sum, sumLong |
|
keys, values |
|
BOTH, IN, OUT |
|
any, none |
org.apache.tinkerpop.gremlin.process.traversal.step. TraversalOptionParent.Pick |
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 dengan
g. Hal ini mencakup:Ekspresi aritmatika seperti
1 + 1Panggilan 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(), dang.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
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
Stringyang 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
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
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 adalah
application/vnd.graphbinary-v1.0. -
Jika Anda terhubung ke Neptunus melalui HTTP, prioritaskan penggunaan
application/vnd.gremlin-v3.0+json;types=falsesebagai tipe tertanam dalam versi alternatif GraphsOn 3 membuatnya rumit untuk dikerjakan. -
Um
application/vnd.graphbinary-v1.0-stringdumnya 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 |
|
GraphSONUntypedMessageSerializerV1 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphSONMessageSerializerV2 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
GraphSONUntypedMessageSerializerV2 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
GraphSONMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphSONUntypedMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphSONUntypedMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphBinaryMessageSerializerV1 |
|
|
GraphBinaryMessageSerializerV1 |
serializeResultToString: true |
|
GraphSONMessageSerializerGremlinV1 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphSONMessageSerializerV2(hanya bekerja dengan WebSockets) |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
GraphSONMessageSerializerV3 |
|
|
GraphSONMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
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
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 pada g.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 |