Menyerap data secara massal di Azure Cosmos DB untuk Gremlin dengan menggunakan pustaka pelaksana massal
BERLAKU UNTUK: Gremlin
Database grafik sering kali perlu menyerap data secara massal untuk me-refresh seluruh grafik atau memperbarui sebagiannya. Azure Cosmos DB, database terdistribusi dan tulang punggung Azure Cosmos DB untuk Gremlin, dimaksudkan untuk melakukan yang terbaik ketika beban didistribusikan dengan baik. Pustaka eksekutor massal di Azure Cosmos DB dirancang untuk mengeksploitasi kemampuan unik Azure Cosmos DB ini dan memberikan performa optimal. Untuk informasi selengkapnya, lihat Memperkenalkan dukungan massal di .NET SDK.
Dalam tutorial ini, Anda mempelajari cara menggunakan pustaka pelaksana massal Azure Cosmos DB untuk mengimpor dan memperbarui objek grafik ke dalam kontainer Azure Cosmos DB for Gremlin. Selama proses ini, Anda menggunakan pustaka untuk membuat objek vertex dan edge secara terprogram, kemudian menyisipkan beberapa objek per permintaan jaringan.
Alih-alih mengirim kueri Gremlin ke database, tempat perintah dievaluasi kemudian dieksekusi satu per satu, gunakan pustaka eksekutor massal untuk membuat dan memvalidasi objek secara lokal. Setelah pustaka menginisialisasi objek grafik, pustaka tersebut memungkinkan Anda untuk mengirim objek grafik ke layanan database secara berurutan.
Dengan menggunakan metode ini, Anda dapat meningkatkan kecepatan penyerapan data sebanyak seratus kali lipat, yang menjadikannya cara ideal untuk melakukan migrasi data awal atau operasi pergerakan data berkala.
Pustaka eksekutor massal kini hadir dalam variasi berikut.
.NET
Prasyarat
Sebelum memulai, pastikan Anda memiliki hal-hal berikut:
Visual Studio 2019 dengan beban kerja pengembangan Azure. Anda dapat memulai Visual Studio 2019 Community Edition secara gratis.
Langganan Azure. Apabila belum memiliki langganan, Anda dapat membuat akun Azure gratis.
Atau, Anda dapat membuat akun Azure Cosmos DB gratis tanpa langganan Azure.
Azure Cosmos DB untuk database Gremlin dengan koleksi tak terbatas. Untuk memulai, buka Azure Cosmos DB untuk Gremlin di .NET.
Git. Untuk memulai, buka halaman unduhan git.
Klon
Untuk menggunakan sampel ini, jalankan perintah berikut:
git clone https://github.com/Azure-Samples/azure-cosmos-graph-bulk-executor.git
Untuk mendapatkan sampel, buka .\azure-cosmos-graph-bulk-executor\dotnet\src\
.
Sampel
IGraphBulkExecutor graphBulkExecutor = new GraphBulkExecutor("MyConnectionString", "myDatabase", "myContainer");
List<IGremlinElement> gremlinElements = new List<IGremlinElement>();
gremlinElements.AddRange(Program.GenerateVertices(Program.documentsToInsert));
gremlinElements.AddRange(Program.GenerateEdges(Program.documentsToInsert));
BulkOperationResponse bulkOperationResponse = await graphBulkExecutor.BulkImportAsync(
gremlinElements: gremlinElements,
enableUpsert: true);
Jalankan
Modifikasi parameter, seperti yang dijealskan dalam tabel berikut:
Parameter | Deskripsi |
---|---|
ConnectionString |
Layanan Anda string koneksi, yang akan Anda temukan di bagian Kunci akun Azure Cosmos DB for Gremlin Anda. Titik akhir ini diformat sebagai AccountEndpoint=https://<account-name>.documents.azure.com:443/;AccountKey=<account-key>; . |
DatabaseName , ContainerName |
Nama database dan kontainer target. |
DocumentsToInsert |
Jumlah dokumen yang akan dihasilkan (hanya relevan untuk data sintetis). |
PartitionKey |
Memastikan bahwa kunci partisi ditentukan dengan setiap dokumen selama penyerapan data. |
NumberOfRUs |
Relevan hanya jika kontainer belum ada dan perlu dibuat selama eksekusi. |
Unduh aplikasi sampel lengkap di .NET.
Java
Penggunaan sampel
Aplikasi sampel berikut mengilustrasikan cara menggunakan paket GraphBulkExecutor. Sampel tersebut menggunakan anotasi objek domain atau objek POJO (objek Java lama biasa) secara langsung. Disarankan untuk mencoba kedua pendekatan tersebut untuk menentukan mana yang lebih memenuhi tuntutan implementasi dan performa Anda.
Klon
Untuk menggunakan sampel, jalankan perintah berikut:
git clone https://github.com/Azure-Samples/azure-cosmos-graph-bulk-executor.git
Untuk mendapatkan sampel, buka .\azure-cosmos-graph-bulk-executor\java\
.
Prasyarat
Untuk menjalankan sampel ini, Anda harus memiliki perangkat lunak berikut:
- OpenJDK 11
- Maven
- Akun Azure Cosmos DB yang dikonfigurasi untuk menggunakan Gremlin API
Sampel
private static void executeWithPOJO(Stream<GremlinVertex> vertices,
Stream<GremlinEdge> edges,
boolean createDocs) {
results.transitionState("Configure Database");
UploadWithBulkLoader loader = new UploadWithBulkLoader();
results.transitionState("Write Documents");
loader.uploadDocuments(vertices, edges, createDocs);
}
Konfigurasi
Untuk menjalankan sampel, lihat konfigurasi berikut dan modifikasi sesuai kebutuhan.
File /resources/application.properties menentukan data yang diperlukan untuk mengonfigurasi Azure Cosmos DB. Nilai yang diperlukan yang dijelaskan dalam tabel berikut:
Properti | Deskripsi |
---|---|
sample.sql.host |
Nilai yang disediakan oleh Azure Cosmos DB. Pastikan Anda menggunakan URI .NET SDK, yang akan Anda temukan di bagian Gambaran Umum akun Azure Cosmos DB. |
sample.sql.key |
Anda bisa mendapatkan kunci utama atau sekunder dari bagian Kunci akun Azure Cosmos DB. |
sample.sql.database.name |
Nama database dalam akun Azure Cosmos DB untuk menjalankan sampel. Apabila database tidak ditemukan, kode sampel akan membuatnya. |
sample.sql.container.name |
Nama kontainer dalam database untuk menjalankan sampel. Jika kontainer tidak ditemukan, kode sampel akan membuatnya. |
sample.sql.partition.path |
Apabila Anda perlu membuat kontainer, gunakan nilai ini untuk menentukan jalur partitionKey . |
sample.sql.allow.throughput |
Kontainer akan diperbarui untuk menggunakan nilai throughput yang ditentukan di sini. Apabila Anda menjelajahi berbagai opsi throughput untuk memenuhi tuntutan performa, pastikan untuk mereset throughput pada kontainer setelah selesai dengan eksplorasi Anda. Ada biaya yang terkait dengan meninggalkan kontainer yang disediakan dengan throughput yang lebih tinggi. |
Jalankan
Setelah Anda memodifikasi konfigurasi sesuai dengan lingkungan Anda, jalankan perintah berikut:
mvn clean package
Untuk keamanan tambahan, Anda juga dapat menjalankan pengujian integrasi dengan mengubah nilai skipIntegrationTests
di file pom.xml menjadi false
.
Setelah berhasil menjalankan pengujian unit, Anda dapat menjalankan kode sampel:
java -jar target/azure-cosmos-graph-bulk-executor-1.0-jar-with-dependencies.jar -v 1000 -e 10 -d
Menjalankan perintah sebelumnya menjalankan sampel dengan batch kecil (1.000 simpul dan sekitar 5.000 tepi). Gunakan argumen baris perintah di bagian berikut untuk mengubah volume yang dijalankan dan versi sampel mana yang akan dijalankan.
Argumen baris perintah
Beberapa argumen baris perintah tersedia saat Anda menjalankan sampel ini, seperti yang dijelaskan dalam tabel berikut:
Argumen | Deskripsi |
---|---|
--vertexCount Aku akan menemuinya.-v |
Memberi tahu aplikasi berapa banyak simpul orang yang akan dihasilkan. |
--edgeMax Aku akan menemuinya.-e |
Memberi tahu aplikasi berapa jumlah maksimum tepi yang akan dihasilkan untuk setiap simpul. Generator secara acak memilih angka dari 1 hingga nilai yang Anda berikan. |
--domainSample Aku akan menemuinya.-d |
Memberi tahu aplikasi untuk menjalankan sampel menggunakan struktur domain orang dan hubungan alih-alih POJO GraphBulkExecutors , GremlinVertex , dan GremlinEdge . |
--createDocuments Aku akan menemuinya.-c |
Memberi tahu aplikasi untuk menggunakan operasi create . Apabila argumen tidak ada, aplikasi kembali ke default yang menggunakan operasi upsert . |
Informasi sampel terperinci
Simpul orang
Kelas orang adalah objek domain sederhana yang telah dihiasi dengan beberapa anotasi untuk membantu transformasi ke kelas GremlinVertex
, seperti yang dijelaskan dalam tabel berikut:
Anotasi kelas | Deskripsi |
---|---|
GremlinVertex |
Menggunakan parameter label opsional untuk menentukan semua simpul yang Anda buat menggunakan kelas ini. |
GremlinId |
Digunakan untuk menentukan bidang mana yang akan digunakan sebagai nilai ID . Nama bidang pada kelas orang adalah ID, tetapi ini tidak diperlukan. |
GremlinProperty |
Digunakan pada bidang email untuk mengubah nama properti saat disimpan dalam database. |
GremlinPartitionKey |
Digunakan untuk menentukan bidang mana pada kelas yang berisi kunci partisi. Nama bidang yang disediakan harus cocok dengan nilai yang ditentukan oleh jalur partisi pada kontainer. |
GremlinIgnore |
Digunakan untuk mengecualikan bidang isSpecial dari properti yang ditulis ke database. |
Kelas RelationshipEdge
Kelas RelationshipEdge
merupakan objek domain yang serbaguna. Dengan menggunakan anotasi label tingkat bidang, Anda dapat membuat kumpulan dinamis jenis tepi, seperti yang diperlihatkan dalam tabel berikut:
Anotasi kelas | Deskripsi |
---|---|
GremlinEdge |
Dekorasi GremlinEdge pada kelas menentukan nama bidang untuk kunci partisi yang ditentukan. Saat Anda membuat dokumen tepi, nilai yang ditetapkan berasal dari informasi simpul sumber. |
GremlinEdgeVertex |
Dua instans GremlinEdgeVertex ditentukan, satu untuk setiap sisi tepi (sumber dan tujuan). Sampel kami memiliki jenis data bidang yaitu GremlinEdgeVertexInfo . Informasi yang diberikan oleh kelas GremlinEdgeVertex diperlukan agar tepi dibuat dengan benar dalam database. Opsi lain adalah dengan memiliki jenis data simpul menjadi kelas yang telah dihiasi dengan anotasi GremlinVertex . |
GremlinLabel |
Sampel tepi menggunakan bidang untuk menentukan nilai label . Hal ini memungkinkan berbagai label untuk didefinisikan, karena menggunakan kelas domain dasar yang sama. |
Penjelasan output
Konsol menyelesaikan eksekusinya dengan string JSON yang menjelaskan durasi sampel. String JSON berisi informasi berikut:
String JSON | Deskripsi |
---|---|
startTime | System.nanoTime() ketika proses dimulai. |
endTime | System.nanoTime() ketika proses selesai. |
durationInNanoSeconds | Perbedaan antara nilai endTime dan startTime . |
durationInMinutes | Nilai durationInNanoSeconds , dikonversi menjadi menit. Nilai durationInMinutes direpresentasikan sebagai angka float, bukan nilai waktu. Misalnya, nilai 2,5 merepresentasikan 2 menit dan 30 detik. |
vertexCount | Volume simpul yang dihasilkan yang harus cocok dengan nilai yang diteruskan ke eksekusi baris perintah. |
edgeCount | Volume tepi yang dihasilkan yang tidak statis dan dibangun dengan elemen keacakan. |
exception | Diisi hanya jika pengecualian dilemparkan saat Anda berusaha menjalankannya. |
Array status
Array status memberikan wawasan tentang berapa lama setiap langkah dalam eksekusi berlangsung. Langkah-langkah tersebut dijelaskan dalam tabel berikut:
Langkah eksekusi | Deskripsi |
---|---|
Membangun sampel simpul | Waktu yang diperlukan untuk membuat volume objek orang yang diminta. |
Membangun sampel tepi | Waktu yang diperlukan untuk membuat objek hubungan. |
Mengonfigurasi database | Jumlah waktu yang diperlukan untuk mengonfigurasi database, berdasarkan nilai yang disediakan di application.properties . |
Menulis dokumen | Jumlah waktu yang diperlukan untuk menulis dokumen ke database. |
Setiap status berisi nilai berikut:
Nilai status | Deskripsi |
---|---|
stateName |
Nama status yang sedang dilaporkan. |
startTime |
Nilai System.nanoTime() ketika status dimulai. |
endTime |
Nilai System.nanoTime() ketika status selesai. |
durationInNanoSeconds |
Perbedaan antara nilai endTime dan startTime . |
durationInMinutes |
Nilai durationInNanoSeconds , dikonversi menjadi menit. Nilai durationInMinutes direpresentasikan sebagai angka float, bukan nilai waktu. Misalnya, nilai 2,5 merepresentasikan 2 menit dan 30 detik. |
Langkah berikutnya
- Untuk informasi selengkapnya tentang kelas dan metode yang ditentukan di namespace layanan ini, tinjau dokumentasi BulkExecutor Java sumber terbuka.
- Lihat artikel Mengimpor data secara massal ke akun Azure Cosmos DB SQL API menggunakan .NET SDK. Dokumentasi mode massal ini merupakan bagian dari .NET V3 SDK.