Pemodelan data grafik untuk Azure Cosmos DB untuk Gremlin
BERLAKU UNTUK: Gremlin
Dokumen berikut dirancang untuk menyediakan rekomendasi pemodelan data grafik. Langkah ini sangat penting untuk memastikan skalabilitas dan kinerja sistem database grafik seiring dengan perkembangan data. Model data yang efisien sangat penting untuk grafik skala besar.
Persyaratan
Proses yang diuraikan dalam panduan ini didasarkan pada berbagai asumsi berikut:
- Entitas dalam ruang masalah sudah teridentifikasi. Entitas ini dimaksudkan untuk dikonsumsi secara atomis untuk setiap permintaan. Dengan kata lain, sistem database tidak dirancang untuk mengambil data entitas tunggal dalam beberapa permintaan kueri.
- Ada pemahaman tentang persyaratan baca dan tulis untuk sistem database. Persyaratan ini akan memandu pengoptimalan yang diperlukan untuk model data grafik.
- Prinsip-prinsip standar grafik properti Apache Tinkerpop dipahami dengan baik.
Kapan saya memerlukan database grafik?
Solusi database grafik dapat diterapkan secara optimal jika entitas dan hubungan dalam domain data memiliki salah satu dari karakteristik berikut:
- Entitas sangat terhubung melalui hubungan deskriptif. Keuntungan dalam skenario ini adalah fakta bahwa hubungan tetap ada dalam penyimpanan.
- Ada hubungan siklus atau entitas yang direferensikan sendiri. Pola ini sering menjadi tantangan pada saat menggunakan database relasional atau dokumen.
- Ada hubungan yang berkembang secara dinamis antara beberapa entitas. Pola ini terutama berlaku atas data hierarkis atau berstruktur pohon dengan banyak tingkatan.
- Ada hubungan jamak-ke-jamak di antara beberapa entitas.
- Ada persyaratan tulis dan baca pada entitas dan juga hubungan.
Jika kriteria di atas terpenuhi, kemungkinan pendekatan database grafik akan memberikan keuntungan untuk kompleksitas kueri, skalabilitas model data, dan kinerja kueri.
Langkah selanjutnya adalah menentukan apakah grafik akan digunakan untuk tujuan analitik atau tujuan transaksional. Jika grafik dimaksudkan untuk digunakan untuk beban kerja komputasi berat dan pemrosesan data, sebaiknya Anda mempelajari tentang konektor Cosmos DB Spark dan penggunaan pustaka GraphX.
Cara menggunakan objek grafik
Standar grafik properti Apache Tinkerpop mendefinisikan dua jenis objek, yaitu Simpul dan Tepi.
Berikut ini adalah praktik terbaik untuk properti dalam objek grafik:
Objek | Properti | Jenis | Catatan |
---|---|---|---|
Puncak | ID | String | Diberlakukan secara unik, per partisi. Jika nilai tidak diberikan pada saat penyisipan, GUID yang dibuat secara otomatis akan disimpan. |
Puncak | label | String | Properti ini digunakan untuk menentukan tipe entitas yang diwakili oleh puncak. Jika nilai tidak disediakan, nilai default "puncak" akan digunakan. |
Puncak | properti | String, Boolean, Numerik | Daftar properti terpisah yang disimpan sebagai pasangan nilai-kunci dalam setiap puncak. |
Puncak | kunci partisi | String, Boolean, Numerik | Properti ini mendefinisikan di mana puncak dan tepi keluarnya akan disimpan. Pelajari selengkapnya tentang pemartisian grafik. |
Azure Stack Edge | ID | String | Diberlakukan secara unik, per partisi. Dibuat secara otomatis, secara default. Tepi biasanya tidak perlu diambil secara unik oleh ID. |
Azure Stack Edge | label | String | Properti ini digunakan untuk menentukan jenis hubungan yang dimiliki oleh dua simpul. |
Azure Stack Edge | properti | String, Boolean, Numerik | Daftar properti terpisah yang disimpan sebagai pasangan nilai-kunci dalam setiap tepi. |
Catatan
Tepi tidak memerlukan nilai kunci partisi, karena nilainya ditetapkan secara otomatis berdasarkan puncak sumbernya. Pelajari selengkapnya dalam artikel pemartisian grafik.
Panduan pemodelan entitas dan hubungan
Berikut ini adalah serangkaian panduan untuk mendekati pemodelan data untuk database grafik Azure Cosmos DB untuk Gremlin. Panduan ini mengasumsikan terdapatnya definisi yang sudah ada dari domain data dan kueri untuk itu.
Catatan
Langkah-langkah yang diuraikan di bawah ini disampaikan sebagai rekomendasi. Model akhir harus dievaluasi dan diuji sebelum dinilai siap produksi. Selain itu, rekomendasi di bawah ini bersifat spesifik untuk implementasi Gremlin API Azure Cosmos DB.
Memodelkan simpul dan properti
Langkah pertama untuk model data grafik adalah memetakan setiap entitas yang teridentifikasi ke objek puncak. Pemetaan satu-ke-satu dari semua entitas ke simpul harus menjadi langkah awal dan bisa berubah sewaktu-waktu.
Salah satu kekeliruan yang umum terjadi adalah memetakan properti dari satu entitas menjadi beberapa simpul terpisah. Pertimbangkan contoh di bawah ini, di mana entitas yang sama direpresentasikan dengan dua cara berbeda:
- Properti berbasis puncak: Dalam pendekatan ini, entitas menggunakan tiga simpul terpisah dan dua tepi untuk menggambarkan propertinya. Meskipun pendekatan ini dapat mengurangi redundansi, ini meningkatkan kompleksitas model. Peningkatan dalam kompleksitas model dapat mengakibatkan latensi tambahan, kompleksitas kueri, dan biaya komputasi. Model ini juga dapat menghadirkan tantangan dalam pemartisian.
- Simpul yang disematkan properti: Pendekatan ini memanfaatkan daftar pasangan kunci-nilai untuk mewakili semua properti entitas dalam suatu puncak. Pendekatan ini menyediakan kompleksitas model yang lebih rendah, yang akan menghasilkan kueri yang lebih sederhana dan traversal yang lebih hemat biaya.
Catatan
Contoh di atas menunjukkan model grafik yang disederhanakan, yang hanya menunjukkan perbandingan antara dua cara membagi properti entitas.
Pola simpul yang disematkan properti pada umumnya memberikan pendekatan yang lebih berkinerja dan dapat diskalakan. Pendekatan default untuk model data grafik baru harus tertuju pada pola ini.
Namun, ada beberapa skenario di mana merujuk ke properti bisa memberikan keuntungan. Misalnya: jika properti yang dijadikan rujukan sering diperbarui. Menggunakan puncak terpisah untuk mewakili properti yang terus berubah akan meminimalkan jumlah operasi tulis yang diperlukan oleh pembaruan.
Pemodelan hubungan dengan pengarahan tepi
Setelah simpul dimodelkan, tepi dapat ditambahkan untuk menunjukkan hubungan di antara mereka. Aspek pertama yang perlu dievaluasi adalah arah hubungan.
Objek Azure Stack Edge memiliki arah default yang diikuti oleh traversal saat menggunakan fungsi out()
atau outE()
. Menggunakan arah alami ini menghasilkan operasi yang efisien, karena semua simpul disimpan dengan tepi keluar.
Namun, melintas ke arah yang berlawanan dari tepi, dengan menggunakan fungsi in()
, akan selalu menghasilkan kueri lintas-partisi. Pelajari selengkapnya tentang pemartisian grafik. Jika ada kebutuhan untuk terus melintas menggunakan fungsi in()
, Anda disarankan untuk menambahkan tepi ke kedua arah.
Anda dapat menentukan arah tepi dengan menggunakan predikat .to()
atau .from()
pada langkah Gremlin .addE()
. Atau, gunakan pustaka pelaksana massal untuk Gremlin API.
Catatan
Objek Azure Stack Edge memiliki arah secara default.
Pelabelan hubungan
Menggunakan label hubungan deskriptif dapat meningkatkan efisiensi operasi resolusi tepi. Pola ini dapat diterapkan dengan beberapa cara berikut:
- Gunakan istilah non-generik untuk melabeli hubungan.
- Kaitkan label puncak sumber ke label puncak target dengan nama hubungan tersebut.
Semakin spesifik label yang digunakan traverser untuk memfilter tepi, semakin baik. Pilihan ini juga dapat berdampak signifikan pada biaya kueri. Anda dapat mengevaluasi biaya kueri sewaktu-waktu menggunakan langkah executionProfile.
Langkah berikutnya:
- Lihat daftar langkah-langkah Gremlin yang didukung.
- Pelajari tentang pemartisian database grafik untuk menangani grafik skala besar.
- Evaluasi kueri Gremlin Anda dengan menggunakan langkah Profil Eksekusi.
- Model data rancangan Graph pihak ketiga