Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
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 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 bukan oleh spesifikasi formal. Untuk format numerik, Gremlin mengikuti standar IEEE 754 (IEEE 754-2019 - Standar IEEE untuk Floating-Point Arithmetic
. Untuk informasi selengkapnya, lihat juga halaman Wikipedia IEEE 754 ).
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
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 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 membuat parameter. Karena tata bahasa ANTLR adalah komponen yang lebih baru TinkerPop, konten lama yang mungkin Anda temui di Internet umumnya tidak mencerminkan perbedaan ini.
Neptunus menggunakan tata bahasa ANTLR di 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 pencacahan
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.
Nilai yang Diizinkan | Kelas |
---|---|
id , key , label , value |
|
T.id , T.key , T.label , T.value |
|
set , single |
org.apache.tinkerpop.gremlin.structure. VertexProperty.Kardinalitas |
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 |
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.Pilih |
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 ByteCode kueri GLV.
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).
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 saat menambahkan simpul atau tepi, Neptunus menghasilkan UUID dan mengubahnya menjadi string, dalam bentuk seperti ini:. "48af8178-50ce-971a-fc41-8c9a954cea62"
Ini UUIDs tidak sesuai dengan standar RFC, 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 CSV Neptunus.
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
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
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
Neptune mendukung serialisasi berikut berdasarkan jenis MIME yang diminta.
Jenis MIME | Serialisasi | Konfigurasi |
|
GraphSONMessageSerializerV1 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
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 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphBinaryMessageSerializerV1 |
|
Sementara Neptunus mendukung jenis serializer yang berbeda ini, panduan penggunaannya cukup mudah. 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. 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-stringd
Umumnya 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
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 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 dalam g.io(
, tetapi tidak untuk menulis.(url)
).read()
Fitur grafik Gremlin di Neptunus
Implementasi Gremlin Neptune tidak mengeksposgraph
objek. 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 |