Menggunakan grafik yang dipartisi di Azure Cosmos DB

BERLAKU UNTUK: Gremlin

Salah satu fitur utama API untuk Gremlin di Azure Cosmos DB adalah kemampuan untuk menangani grafik skala besar melalui penskalaan horizontal. Kontainer dapat menskalakan secara independen dalam hal penyimpanan dan throughput. Anda dapat membuat kontainer di Azure Cosmos DB yang dapat diskalakan secara otomatis untuk menyimpan data grafik. Data secara otomatis seimbang berdasarkan kunci partisi yang ditentukan.

Pemartisian diperlukan jika kontainer diperkirakan akan menyimpan lebih dari 20 GB atau jika Anda ingin mengalokasikan lebih dari 10.000 unit permintaan per detik (RU). Data secara otomatis dipartisi berdasarkan kunci partisi yang Anda tentukan. Kunci partisi diperlukan jika Anda membuat kontainer grafik dari portal Microsoft Azure atau driver Gremlin versi 3.x atau lebih tinggi. Kunci partisi tidak diperlukan jika Anda menggunakan driver Gremlin versi 2.x atau yang lebih rendah.

Prinsip umum yang sama dari mekanisme proses partisi Azure Cosmos DB berlaku dengan beberapa pengoptimalan khusus grafik yang dijelaskan dalam artikel ini.

Partisi Graph.

Mekanisme partisi Graph

Panduan berikut menjelaskan bagaimana strategi partisi di Azure Cosmos DB berjalan:

  • Kedua verteks dan tepi disimpan sebagai dokumen JSON.

  • Verteks memerlukan kunci partisi. Kunci ini akan menentukan partisi mana yang verteksnya akan disimpan melalui algoritma hashing. Nama properti kunci partisi didefinisikan saat membuat kontainer baru dan memiliki format: /partitioning-key-name.

  • Tepi akan disimpan pada verteks sumbernya. Dengan kata lain, untuk setiap verteks kunci partisinya mendefinisikan di mana verteks disimpan bersama dengan tepi yang keluar. Pengoptimalan ini dilakukan untuk menghindari kueri lintas partisi saat menggunakan out() kardinalitas dalam kueri grafik.

  • Tepi berisi referensi ke verteks yang diarahkan. Semua tepi disimpan dengan tombol partisi dan ID verteks yang diarahkan. Perhitungan ini membuat semua out() kueri arah selalu menjadi kueri yang dipartisi lingkup, dan bukan kueri partisi silang buta.

  • Kueri Graph perlu menentukan kunci partisi. Untuk mengambil keuntungan penuh dari partisi horizontal di Azure Cosmos DB, kunci partisi harus ditentukan kapan pun ketika satu verteks dipilih. Berikut ini adalah kueri untuk memilih satu atau beberapa verteks dalam grafik yang dipartisi:

    • /id dan /label tidak didukung sebagai kunci partisi untuk kontainer di API untuk Gremlin.

    • Memilih verteks dengan ID, lalu menggunakan .has()langkah untuk menentukan properti kunci partisi:

      g.V('vertex_id').has('partitionKey', 'partitionKey_value')
      
    • Memilih verteks dengan menentukan tuple termasuk nilai kunci partisi dan ID:

      g.V(['partitionKey_value', 'vertex_id'])
      
    • Memilih sekumpulan verteks dengan IDnya dan menentukan daftar nilai kunci partisi:

      g.V('vertex_id0', 'vertex_id1', 'vertex_id2', …).has('partitionKey', within('partitionKey_value0', 'partitionKey_value01', 'partitionKey_value02', …)
      
    • Menggunakan strategi Partisi di awal kueri dan menentukan partisi untuk lingkup kueri Gremlin lainnya:

      g.withStrategies(PartitionStrategy.build().partitionKey('partitionKey').readPartitions('partitionKey_value').create()).V()
      

Praktik terbaik saat menggunakan grafik yang dipartisi

Gunakan panduan berikut untuk memastikan performa dan skalabilitas saat menggunakan grafik yang dipartisi dengan kontainer tak terbatas:

  • Selalu tentukan nilai kunci partisi saat membuat kueri verteks. Mendapatkan verteks dari partisi yang dikenal adalah cara untuk mencapai performa. Semua operasi kedekatan berikutnya akan selalu dicakup ke partisi karena Edges berisi ID referensi dan kunci partisi ke verteks target mereka.

  • Gunakan arah keluar saat kueri tepi kapan pun memungkinkan. Seperti disebutkan di atas, tepi disimpan pada verteks sumber mereka ke arah keluar. Jadi kemungkinan beralih ke kueri lintas partisi diminimalkan ketika data dan kueri dirancang dengan pola ini dalam pikiran. Sebaliknya, kueri in() akan selalu menjadi kueri keluaran yang mahal.

  • Pilih kunci partisi yang akan mendistribusikan data secara merata di seluruh partisi. Keputusan ini sangat tergantung pada model data solusi. Baca selengkapnya tentang membuat kunci partisi yang sesuai dalam Partisi dan skala di Azure Cosmos DB.

  • Optimalkan kueri untuk mendapatkan data dalam batas-batas partisi. Strategi partisi yang optimal akan diselaraskan dengan pola kueri. Kueri yang mendapatkan data dari satu partisi memberikan kinerja terbaik.

Langkah berikutnya

Selanjutnya Anda dapat melanjutkan pembacaan artikel berikut: