Dukungan dan kompatibilitas grafik Azure Cosmos DB untuk Gremlin dengan fitur TinkerPop
BERLAKU UNTUK: Gremlin
Azure Cosmos DB mendukung bahasa traversal grafik Apache Tinkerpop, yang dikenal sebagai Gremlin. Anda dapat menggunakan bahasa Gremlin untuk membuat entitas grafik (sudut dan tepi), memodifikasi properti dalam entitas tersebut, melakukan kueri dan traversal, dan menghapus entitas.
Mesin Azure Cosmos DB Graph mengikuti dengan cermat spesifikasi langkah traversal Apache TinkerPop tetapi ada perbedaan dalam implementasi yang khusus untuk Azure Cosmos DB. Dalam artikel ini, kami menyediakan panduan cepat Gremlin dan menghitung fitur Gremlin yang didukung oleh API untuk Gremlin.
Pustaka klien yang kompatibel
Tabel berikut menunjukkan driver Gremlin populer yang dapat Anda gunakan melawan Azure Cosmos DB:
Unduh | Sumber | Memulai | Versi konektor yang didukung/Direkomendasikan |
---|---|---|---|
.NET | Gremlin.NET di GitHub | Buat Grafik menggunakan .NET | 3.4.13 |
Java | Gremlin JavaDoc | Membuat Grafik menggunakan Java | 3.4.13 |
Python | Gremlin-Python di GitHub | Membuat Grafik menggunakan Python | 3.4.13 |
Konsol Gremlin | Dokumen TinkerPop | Membuat Grafik menggunakan Konsol Gremlin | 3.4.13 |
Node.js | Gremlin-JavaScript di GitHub | Membuat Grafik menggunakan Node.js | 3.4.13 |
PHP | Gremlin-PHP di GitHub | Membuat Grafik menggunakan PHP | 3.1.0 |
Go Lang | Go Lang | Pustaka ini dibangun oleh kontributor eksternal. Tim Azure Cosmos DB tidak menawarkan dukungan atau memelihara perpustakaan. |
Catatan
Versi driver klien Gremlin untuk 3.5.*, 3.6.* memiliki masalah kompatibilitas yang diketahui, jadi sebaiknya gunakan versi driver 3.4.* terbaru yang didukung yang tercantum di atas. Tabel ini akan diperbarui ketika masalah kompatibilitas telah diatasi untuk versi driver yang lebih baru ini.
Objek Microsoft Azure AD Graph yang Didukung
TinkerPop adalah standar yang mencakup berbagai teknologi grafik. Oleh karena itu, ia memiliki terminologi standar untuk menggambarkan fitur apa yang disediakan oleh penyedia grafik. Azure Cosmos DB menyediakan database grafik yang persisten, konkurensi tinggi, dapat ditulis yang dapat dipartisi di beberapa server atau kluster.
Tabel berikut mencantumkan fitur TinkerPop yang diimplementasikan oleh Azure Cosmos DB:
Kategori | Implementasu Azure Cosmos DB | Catatan |
---|---|---|
Fitur Microsoft Azure AD Graph | Memberikan Kegigihan dan ConcurrentAccess. Dirancang untuk mendukung Transaksi | Metode komputer dapat diimplementasikan melalui konektor Spark. |
Fitur variabel | Mendukung Boolean, Bilangan Bulat, Byte, Double, Float, Long, String | Mendukung jenis primitif, kompatibel dengan jenis kompleks melalui model data |
Fitur Sudut | Mendukung RemoveVertices, MetaProperties, AddVertices, MultiProperties, StringIds, UserSuppliedIds, AddProperty, RemoveProperty | Mendukung pembuatan, memodifikasi, dan menghapus sudut |
Fitur properti Sudut | StringIds, UserSuppliedIds, AddProperty, RemoveProperty, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues | Mendukung pembuatan, memodifikasi, dan menghapus properti sudut |
Fitur tepi | AddEdges, RemoveEdges, StringIds, UserSuppliedIds, AddProperty, RemoveProperty | Mendukung pembuatan, memodifikasi, dan menghapus tepi |
Fitur properti Azure Stack Edge | Properties, BooleanValues, ByteValues, DoubleValues, FloatValues, IntegerValues, LongValues, StringValues | Mendukung pembuatan, memodifikasi, dan menghapus properti tepi |
Format kawat Gremlin
Azure Cosmos DB menggunakan format JSON saat mengembalikan hasil dari operasi Gremlin. Azure Cosmos DB saat ini mendukung format JSON. Misalnya, cuplikan berikut menunjukkan representasi JSON dari sudut yang dikembalikan ke klien dari Azure Cosmos DB:
{
"id": "a7111ba7-0ea1-43c9-b6b2-efc5e3aea4c0",
"label": "person",
"type": "vertex",
"outE": {
"knows": [
{
"id": "3ee53a60-c561-4c5e-9a9f-9c7924bc9aef",
"inV": "04779300-1c8e-489d-9493-50fd1325a658"
},
{
"id": "21984248-ee9e-43a8-a7f6-30642bc14609",
"inV": "a8e3e741-2ef7-4c01-b7c8-199f8e43e3bc"
}
]
},
"properties": {
"firstName": [
{
"value": "Thomas"
}
],
"lastName": [
{
"value": "Andersen"
}
],
"age": [
{
"value": 45
}
]
}
}
Properti yang digunakan oleh format JSON untuk sudut dijelaskan di bawah ini:
Properti | Deskripsi |
---|---|
id |
ID untuk sudut. Harus unik (dalam kombinasi dengan nilai _partition jika berlaku). Jika tidak ada nilai yang diberikan, maka akan secara otomatis diberikan bersama GUID |
label |
ID untuk sudut. Properti ini digunakan untuk menjelaskan jenis entitas. |
type |
Digunakan untuk membedakan sudut dari dokumen non-grafik |
properties |
Kantong properti yang ditentukan pengguna yang terkait dengan sudut. Setiap properti dapat memiliki beberapa nilai. |
_partition |
Kunci partisi sudut. Digunakan untuk pemartisian grafik. |
outE |
Properti ini berisi daftar tepi dari sudut. Menyimpan informasi yang berdekatan dengan sudut memungkinkan eksekusi traversal yang cepat. Tepi dikelompokkan berdasarkan labelnya. |
Setiap properti dapat menyimpan beberapa nilai dalam array.
Properti | Deskripsi |
---|---|
value |
Nilai properti |
Dan tepi berisi informasi berikut untuk membantu navigasi ke bagian lain dari grafik.
Properti | Deskripsi |
---|---|
id |
ID untuk tepi. Harus unik (dalam kombinasi dengan nilai _partition jika berlaku) |
label |
Label untuk vertex. Properti ini bersifat opsional, dan digunakan untuk menggambarkan jenis hubungan. |
inV |
Properti ini berisi daftar sudut untuk tepi. Menyimpan informasi yang berdekatan dengan sudut memungkinkan eksekusi traversal yang cepat. Sudut dikelompokkan berdasarkan labelnya. |
properties |
Kantong properti yang ditentukan pengguna yang terkait dengan sudut. |
Langkah-langkah Gremlin
Sekarang mari kita lihat langkah-langkah Gremlin yang didukung oleh Azure Cosmos DB. Untuk referensi lengkap tentang Gremlin, lihat referensi TinkerPop.
langkah | Deskripsi | Dokumentasi TinkerPop 3.2 |
---|---|---|
addE |
Menambahkan tepi di antara dua sudut | langkah addE |
addV |
Menambahkan sudut ke grafik | langkah addV |
and |
Memastikan bahwa semua traversal mengembalikan nilai | dan langkah |
as |
Modulator langkah untuk menetapkan variabel ke output langkah | sebagai langkah |
by |
Modulator langkah yang digunakan dengan group dan order |
dengan langkah |
coalesce |
Mengembalikan traversal pertama yang mengembalikan hasil | menggabungkan langkah |
constant |
Mengembalikan nilai konstanta. Digunakan dengan coalesce |
langkah konstanta |
count |
Mengembalikan hitungan dari traversal | hitung langkah |
dedup |
Mengembalikan nilai dengan duplikat dihapus | langkah dedup |
drop |
Menghilangkan nilai (sudut/tepi) | menghilangkan langkah |
executionProfile |
Membuat deskripsi semua operasi yang dihasilkan oleh langkah Gremlin yang dijalankan | langkah executionProfile |
fold |
Bertindak sebagai penghalang yang menghitung agregat hasil | langkah lipat |
group |
Meng-grupkan nilai berdasarkan label yang ditentukan | grup step |
has |
Digunakan untuk memfilter properti, sudut, dan tepi. Mendukung varian hasLabel , hasId , hasNot , dan has . |
memiliki langkah |
inject |
Menyuntikkan nilai ke dalam aliran | langkah menyuntikkan |
is |
Digunakan untuk melakukan filter menggunakan ekspresi boolean | adalah langkah |
limit |
Digunakan untuk membatasi jumlah item dalam traversal | langkah batas |
local |
Lokal membungkus bagian dari traversal, mirip dengan subkueri | langkah lokal |
not |
Digunakan untuk menghasilkan negasi filter | bukan langkah |
optional |
Mengembalikan hasil traversal yang ditentukan jika menghasilkan hasil lain yang mengembalikan elemen panggilan | langkah opsional |
or |
Memastikan setidaknya salah satu traversal mengembalikan nilai | atau langkah |
order |
Mengembalikan hasil dalam susunan urutan yang ditentukan | urutan langkah |
path |
Mengembalikan jalur lengkap traversal | jalur langkah |
project |
Memproyeksikan properti sebagai Peta | proyeksi langkah |
properties |
Mengembalikan properti untuk label yang ditentukan | langkah properti |
range |
Memfilter rentang nilai yang ditentukan | rentang step |
repeat |
Mengulangi langkah untuk jumlah waktu yang ditentukan. Digunakan untuk perulangan | ulangi langkah |
sample |
Digunakan untuk membuat sampel hasil dari traversal | sampel langkah |
select |
Digunakan untuk membuat sampel hasil dari traversal | pilih langkah |
store |
Digunakan untuk mengagregasi non-pemblokiran dari traversal | simpan langkah |
TextP.startingWith(string) |
Fungsi pemfilteran string. Fungsi ini digunakan sebagai predikat untuk langkah has() mencocokkan properti dengan awal string yang diberikan |
Predikat TextP |
TextP.endingWith(string) |
Fungsi pemfilteran string. Fungsi ini digunakan sebagai predikat untuk langkah has() mencocokkan properti dengan awal string yang diberikan |
Predikat TextP |
TextP.containing(string) |
Fungsi pemfilteran string. Fungsi ini digunakan sebagai predikat untuk langkah has() mencocokkan properti dengan awal string yang diberikan |
Predikat TextP |
TextP.notStartingWith(string) |
Fungsi pemfilteran string. Fungsi ini digunakan sebagai predikat untuk langkah has() mencocokkan properti yang tidak dimulai dengan string yang diberikan |
Predikat TextP |
TextP.notEndingWith(string) |
Fungsi pemfilteran string. Fungsi ini digunakan sebagai predikat untuk langkah has() mencocokkan properti dengan diakhiri dengan string yang diberikan |
Predikat TextP |
TextP.notContaining(string) |
Fungsi pemfilteran string. Fungsi ini digunakan sebagai predikat untuk langkah has() mencocokkan properti dengan diakhiri dengan string yang diberikan |
Predikat TextP |
tree |
Jalur agregat dari sudut ke pohon | langkah pohon |
unfold |
Membuka gulungan iterator sebagai langkah | membuka lipatan langkah |
union |
Menggabungkan hasil dari beberapa traversal | gabungan langkah |
V |
Termasuk langkah-langkah yang diperlukan untuk traversal antara sudut dan tepi V , E , out , in , both , outE , inE , bothE , outV , inV , bothV , dan otherV untuk |
langkah-langkah sudut |
where |
Digunakan untuk membuat sampel hasil dari traversal. Mendukung operator eq , neq , lt , lte , gt , gte , dan between |
tempat langkah |
Mesin yang dioptimalkan untuk ditulis yang disediakan oleh Azure Cosmos DB mendukung pengindeksan otomatis semua properti dalam sudut dan tepi secara default. Oleh karena itu, kueri dengan filter, kueri rentang, pengurutan, atau agregat pada properti apa pun diproses dari indeks, dan ditayangkan secara efisien. Untuk informasi selengkapnya tentang cara kerja pengindeksan di Azure Cosmos DB, lihat makalah kami tentang pengindeksan skema-agnostik.
Perbedaan perilaku
- Mesin Graph Azure Cosmos DB menjalankan traversal yang mengutamakan luas sementara TinkerPop Gremlin mengutamakan kedalaman. Perilaku ini mencapai performa yang lebih baik dalam sistem yang dapat diskalakan secara horizontal seperti Azure Cosmos DB.
Fitur yang tidak didukung
Gremlin Bytecode adalah spesifikasi agnostik bahasa pemrograman untuk traversal grafik. Azure Cosmos DB Graph belum mendukungnya. Gunakan
GremlinClient.SubmitAsync()
dan berikan traversal sebagai string teks.Kardinalitas set
property(set, 'xyz', 1)
tidak didukung hari ini. Gunakanproperty(list, 'xyz', 1)
sebagai gantinya. Untuk mempelajari selengkapnya, lihat Properti sudut dengan TinkerPop.Langkah
match()
saat ini tidak tersedia. Langkah ini menyediakan kapabilitas kueri deklaratif.Objek sebagai properti pada sudut atau tepi tidak didukung. Properti hanya bisa menjadi jenis primitif.
Mengurutkan menurut properti array
order().by(<array property>)
tidak didukung. Pengurutan hanya didukung oleh jenis primitif.Jenis JSON non-primitif tidak didukung. Gunakan jenis
string
,number
atautrue
/false
. Nilai-nilainull
tidak didukung.Pebuat seriallisasi GraphSONv3 saat ini tidak didukung. Gunakan kelas
GraphSONv2
Serializer, Pembaca, dan Penulis dalam konfigurasi koneksi. Hasil yang dikembalikan oleh Azure Cosmos DB untuk Gremlin tidak memiliki format yang sama dengan format GraphSON.Ekspresi dan fungsi Lambda saat ini tidak didukung. Ini termasuk fungsi
.map{<expression>}
,.by{<expression>}
, dan.filter{<expression>}
. Untuk mempelajari lebih lanjut, dan mempelajari cara menulis ulang menggunakan langkah-langkah Gremlin, lihat Catatan di Lambdas.Transaksi tidak didukung karena sifat sistem yang didistribusikan. Konfigurasikan model konsistensi yang sesuai pada akun Gremlin untuk "membaca tulisan Anda sendiri" dan menggunakan konkurensi optimis untuk menyelesaikan penulisan yang bertentangan.
Pembatasan yang diketahui
- Pemanfaatan indeks untuk kueri Gremlin dengan
.V()
langkah-langkah pertengahan traversal: Saat ini, hanya.V()
panggilan pertama dari traversal yang akan menggunakan indeks untuk menyelesaikan filter atau predikat apa pun yang terlampir padanya. Panggilan berikutnya tidak akan berkonsultasi dengan indeks, yang mungkin meningkatkan latensi dan biaya kueri.
Dengan asumsi pengindeksan default, kueri Gremlin baca khas yang .V()
dimulai dengan langkah akan menggunakan parameter dalam langkah pemfilteran terlampirnya, seperti .has()
atau .where()
untuk mengoptimalkan biaya dan performa kueri. Contohnya:
g.V().has('category', 'A')
Namun, ketika lebih dari satu langkah .V()
disertakan dalam kueri Gremlin, resolusi data untuk kueri mungkin tidak optimal. Ambil kueri berikut sebagai contoh:
g.V().has('category', 'A').as('a').V().has('category', 'B').as('b').select('a', 'b')
Kueri ini akan mengembalikan dua grup sudut berdasarkan properti mereka yang disebut category
. Dalam hal ini, hanya panggilan pertama, g.V().has('category', 'A')
akan menggunakan indeks untuk menyelesaikan sudut berdasarkan nilai properti mereka.
Solusi untuk kueri ini adalah menggunakan langkah-langkah subtraversal seperti .map()
dan union()
. Ini dicontohkan di bawah ini:
// Query workaround using .map()
g.V().has('category', 'A').as('a').map(__.V().has('category', 'B')).as('b').select('a','b')
// Query workaround using .union()
g.V().has('category', 'A').fold().union(unfold(), __.V().has('category', 'B'))
Anda dapat mengulas performa kueri dengan menggunakan langkah executionProfile()
Gremlin.
Langkah berikutnya
- Mulai membuat aplikasi grafik menggunakan SDK kami
- Pelajari selengkapnya tentang dukungan grafik di Azure Cosmos DB