TigerGraph: Database grafik paralel menjelaskan

Victor Lee adalah direktur manajemen produk di TigerGraph.

Database grafik unggul dalam menjawab pertanyaan kompleks tentang hubungan dalam kumpulan data yang besar. Tapi mereka menemui jalan buntu — dalam hal kinerja dan kemampuan analisis — ketika volume data bertambah sangat besar, dan ketika jawaban harus diberikan dalam waktu nyata.

Itu karena teknologi grafik yang ada mengalami masalah saat memuat data dalam jumlah besar, atau menyerap data yang datang dengan cepat, dalam waktu nyata. Mereka juga kesulitan untuk memberikan kecepatan traversal yang cepat. Sementara analitik yang lebih dalam membutuhkan traversal grafik yang lebih dalam, database grafik saat ini biasanya melambat atau waktu habis setelah dua lompatan traversal.

TigerGraph adalah platform komputasi grafik asli terdistribusi yang dirancang untuk mengatasi keterbatasan ini. Arsitektur grafik paralel asli TigerGraph dan analitik tautan dalam waktu nyata bertujuan untuk memberikan keuntungan berikut:

  • Pemuatan data lebih cepat untuk membuat grafik dengan cepat
  • Eksekusi lebih cepat dari algoritma grafik paralel
  • Kemampuan real-time untuk streaming pembaruan dan penyisipan menggunakan REST
  • Kemampuan untuk menyatukan analitik waktu nyata dengan pemrosesan data offline skala besar
  • Kemampuan untuk meningkatkan dan menskalakan aplikasi terdistribusi

Pada bagian selanjutnya, kita akan melihat sekilas cara kerja pemrosesan grafik, menjelajahi manfaat analitik tautan dalam, dan mengangkat tudung di TigerGraph untuk memahami bagaimana hal itu dapat memberikan analitik tautan dalam secara real time.  

Traversal grafik: Lebih banyak lompatan, lebih banyak wawasan

Mengapa analisis tautan dalam? Karena semakin banyak tautan yang dapat Anda lintasi (lompat) dalam grafik, semakin besar wawasan yang Anda peroleh. Pertimbangkan pengetahuan hibrida dan grafik sosial. Setiap node terhubung dengan apa yang Anda ketahui dan siapa yang Anda kenal. Tautan langsung (satu lompatan) mengungkapkan apa yang Anda ketahui. Dua lompatan mengungkapkan semua yang diketahui teman dan kenalan Anda. Tiga lompatan? Anda sedang dalam perjalanan untuk mengungkapkan apa yang diketahui semua orang .

Keuntungan grafik adalah mengetahui hubungan antara entitas data dalam kumpulan data, yang merupakan jantung dari penemuan pengetahuan, pemodelan, dan prediksi. Setiap lompatan dapat menyebabkan pertumbuhan eksponensial dalam jumlah koneksi dan, karenanya, dalam jumlah pengetahuan. Tapi di situlah letak rintangan teknologi. Hanya sistem yang melakukan lompatan secara efisien dan paralel yang dapat memberikan analitik tautan dalam waktu nyata (multi-hop).

Contoh sederhana seperti rekomendasi hasil personalisasi waktu nyata mengungkapkan nilai dan kekuatan mengikuti beberapa tautan dalam grafik:

"Pelanggan yang menyukai apa yang Anda suka juga membeli item ini."

Ini diterjemahkan menjadi kueri tiga hop:

  1. Mulai dari seseorang (Anda), identifikasi item yang Anda lihat / sukai / beli.
  2. Kedua, temukan orang lain yang telah melihat / menyukai / membeli barang tersebut.
  3. Ketiga, identifikasi barang tambahan yang dibeli oleh orang-orang itu.

Orang → produk → (orang lain) orang → produk (lainnya)

Dengan menggunakan teknologi grafik sebelumnya, Anda akan dibatasi hanya pada dua lompatan dalam kumpulan data yang lebih besar. TigerGraph dengan mudah memperluas kueri ke tiga atau lebih lompatan untuk memberikan wawasan penting dari dalam kumpulan data yang sangat besar.

Analitik tautan dalam waktu nyata TigerGraph

TigerGraph mendukung tiga hingga lebih dari 10 lompatan traversal melintasi grafik besar, bersama dengan kecepatan traversal grafik yang cepat dan pembaruan data. Kombinasi kecepatan, traversal dalam, dan skalabilitas ini menawarkan keuntungan besar untuk beberapa kasus penggunaan.

Salah satu kasus penggunaan adalah pencegahan penipuan. Salah satu cara bisnis mendeteksi potensi penipuan adalah menemukan koneksi ke transaksi buruk yang diketahui. Misalnya, berawal dari transaksi kartu kredit yang masuk, berikut salah satu jalur menuju transaksi buruk:

Transaksi baru → kartu kredit → pemegang kartu → kartu kredit (lainnya) → transaksi buruk (lainnya)

Sebagai kueri grafik, pola ini menggunakan empat lompatan untuk menemukan koneksi yang hanya berjarak satu kartu dari transaksi masuk. Penipu hari ini mencoba untuk menyamarkan aktivitas mereka melalui hubungan berputar-putar antara mereka dan aktivitas buruk atau aktor jahat yang diketahui. Untuk mendeteksi penipuan secara akurat, Anda perlu menjelajahi beberapa pola yang mungkin dan menyusun pandangan yang lebih holistik.

Dengan kemampuan untuk mengungkap banyak koneksi tersembunyi, TigerGraph mampu meminimalkan penipuan kartu kredit. Pola traversal ini berlaku untuk banyak kasus penggunaan lainnya — di mana Anda dapat dengan mudah mengganti transaksi kartu kredit dengan aktivitas klik web, catatan panggilan telepon, atau transfer uang.

Gambaran umum sistem TigerGraph

Kemampuan untuk menarik koneksi mendalam antara entitas data secara real time membutuhkan teknologi baru yang dirancang untuk skala dan kinerja. Ada banyak keputusan desain yang bekerja sama untuk mencapai kecepatan terobosan dan skalabilitas TigerGraph. Di bawah ini kita akan melihat fitur-fitur desain ini dan membahas bagaimana mereka bekerja sama.

Grafik asli

TigerGraph adalah database grafik murni, dari awal. Penyimpanan datanya menyimpan node, tautan, dan atributnya, titik. Beberapa produk database grafik di pasaran sebenarnya adalah pembungkus yang dibangun di atas penyimpanan data NoSQL yang lebih umum. Strategi grafik virtual ini memiliki penalti ganda dalam hal kinerja. Pertama, terjemahan dari operasi grafik virtual ke operasi penyimpanan fisik memperkenalkan beberapa pekerjaan tambahan. Kedua, struktur dasar tidak dioptimalkan untuk operasi grafik.

Penyimpanan kompak dengan akses cepat

Kami tidak mendeskripsikan TigerGraph sebagai database dalam memori, karena memiliki data dalam memori adalah preferensi tetapi bukan persyaratan. Pengguna dapat mengatur parameter yang menentukan berapa banyak memori yang tersedia yang dapat digunakan untuk menyimpan grafik. Jika grafik penuh tidak muat di memori, maka kelebihannya disimpan di disk. Performa terbaik dicapai jika grafik lengkap sesuai dengan memori, tentunya. 

Nilai data disimpan dalam format yang dikodekan yang secara efektif memampatkan data. Faktor kompresi bervariasi dengan struktur grafik dan data, tetapi faktor kompresi umumnya antara 2x dan 10x. Kompresi memiliki dua keuntungan: Pertama, jumlah data grafik yang lebih besar dapat masuk ke dalam memori dan cache. Kompresi seperti itu tidak hanya mengurangi jejak memori, tetapi juga cache CPU yang hilang, mempercepat kinerja kueri secara keseluruhan. Kedua, untuk pengguna dengan grafik yang sangat besar, biaya perangkat keras berkurang. Misalnya, jika faktor kompresinya 4x, maka organisasi mungkin dapat memasukkan semua datanya dalam satu mesin, bukan empat.

Dekompresi / dekode sangat cepat dan transparan bagi pengguna akhir, sehingga manfaat kompresi lebih besar daripada penundaan waktu yang kecil untuk kompresi / dekompresi. Secara umum, dekompresi diperlukan hanya untuk menampilkan data. Ketika nilai-nilai digunakan secara internal, seringkali mereka tetap dikodekan dan dikompresi.

Indeks hash digunakan untuk mereferensikan node dan tautan. Dalam istilah Big-O, waktu akses rata-rata kami adalah O (1) dan waktu pembaruan indeks rata-rata kami juga O (1). Terjemahan: mengakses node atau tautan tertentu dalam grafik sangat cepat, dan tetap cepat bahkan saat grafik bertambah besar. Selain itu, mempertahankan indeks saat node dan tautan baru ditambahkan ke grafik juga sangat cepat.

Paralelisme dan nilai bersama

Ketika kecepatan adalah tujuan Anda, Anda memiliki dua rute dasar: Melakukan setiap tugas lebih cepat, atau melakukan banyak tugas sekaligus. Jalan terakhir adalah paralelisme. Sambil berusaha untuk melakukan setiap tugas dengan cepat, TigerGraph juga unggul dalam paralelisme. Mesin grafiknya menggunakan beberapa utas eksekusi untuk melintasi grafik.

Sifat kueri grafik adalah "ikuti tautan". Mulai dari satu atau lebih node. Lihat koneksi yang tersedia dari node tersebut dan ikuti koneksi tersebut ke beberapa atau semua node tetangga. Kami mengatakan Anda baru saja "melintasi" satu "lompatan". Ulangi proses itu untuk pergi ke tetangga tetangga node asli, dan Anda telah melintasi dua lompatan. Karena setiap node dapat memiliki banyak koneksi, traversal dua hop ini melibatkan banyak jalur untuk berpindah dari node awal ke node tujuan. Grafik secara alami cocok untuk eksekusi paralel dan multithread.

Sebuah query tentu saja harus melakukan lebih dari sekedar mengunjungi sebuah node. Dalam kasus sederhana, kita dapat menghitung jumlah tetangga dua hop unik atau membuat daftar ID mereka. Bagaimana seseorang menghitung jumlah total, ketika Anda memiliki beberapa penghitung paralel? Prosesnya mirip dengan apa yang akan Anda lakukan di dunia nyata: Minta setiap penghitung untuk melakukan bagiannya di dunia, dan kemudian gabungkan hasilnya pada akhirnya.

Ingatlah bahwa kueri meminta jumlah node unik . Ada kemungkinan node yang sama telah dihitung oleh dua counter yang berbeda, karena terdapat lebih dari satu jalur untuk mencapai tujuan tersebut. Masalah ini dapat terjadi bahkan dengan desain single-threaded. Solusi standar adalah menetapkan variabel sementara ke setiap node. Variabel diinisialisasi ke False. Ketika satu penghitung mengunjungi sebuah node, variabel node tersebut disetel ke True, sehingga penghitung lain tahu untuk tidak menghitungnya.

Mesin penyimpanan dan pemrosesan yang ditulis dalam C ++

Pilihan bahasa juga mempengaruhi kinerja. Mesin penyimpanan grafik dan mesin pemroses TigerGraph diimplementasikan dalam C ++. Dalam keluarga bahasa prosedural tujuan umum, C dan C ++ dianggap tingkat yang lebih rendah dibandingkan dengan bahasa lain seperti Java. Artinya, pemrogram yang memahami bagaimana perangkat keras komputer menjalankan perintah perangkat lunak mereka dapat membuat pilihan yang tepat untuk mengoptimalkan kinerja. TigerGraph telah dirancang dengan cermat untuk menggunakan memori secara efisien dan untuk melepaskan memori yang tidak digunakan. Manajemen memori yang cermat berkontribusi pada kemampuan TigerGraph untuk melintasi banyak tautan, baik dari segi kedalaman maupun luasnya, dalam satu kueri.

Banyak produk database grafik lainnya yang ditulis di Java, yang memiliki pro dan kontra. Program Java dijalankan di dalam Java Virtual Machine (JVM). JVM menangani manajemen memori dan pengumpulan sampah (mengosongkan memori yang tidak lagi diperlukan). Meskipun ini nyaman, sulit bagi programmer untuk mengoptimalkan penggunaan memori atau untuk mengontrol kapan memori yang tidak terpakai tersedia.

Bahasa kueri grafik GSQL

TigerGraph juga memiliki kueri grafik dan bahasa pembaruannya sendiri, GSQL. Meskipun ada banyak detail bagus tentang GSQL, saya akan fokus pada dua aspek yang merupakan kunci untuk mendukung komputasi paralel yang efisien: klausa ACCUM dan variabel akumulator.

Inti dari sebagian besar kueri GSQL adalah pernyataan SELECT, yang dimodelkan secara dekat setelah pernyataan SELECT di SQL. Klausa SELECT, FROM, dan WHERE digunakan untuk memilih dan memfilter sekumpulan tautan atau node. Setelah pemilihan ini, klausa ACCUM opsional dapat digunakan untuk menentukan serangkaian tindakan yang akan dilakukan oleh setiap tautan atau node yang berdekatan. Saya mengatakan "perform by" daripada "perform on" karena secara konseptual, setiap objek grafik adalah unit komputasi independen. Struktur grafik bertindak seperti jaring komputasi paralel masif. Grafik bukan hanya penyimpanan data Anda; itu juga mesin kueri atau analitik Anda.

Klausa ACCUM mungkin berisi banyak tindakan atau pernyataan berbeda. Pernyataan ini dapat membaca nilai dari objek grafik, melakukan komputasi lokal, menerapkan pernyataan bersyarat, dan menjadwalkan pembaruan grafik. (Pembaruan tidak berlangsung sampai kueri selesai.)

Untuk mendukung komputasi terdistribusi dalam kueri ini, bahasa GSQL menyediakan variabel akumulator. Akumulator datang dalam berbagai bentuk, tetapi semuanya bersifat sementara (hanya ada selama eksekusi kueri), dibagikan (tersedia untuk salah satu utas eksekusi), dan saling eksklusif (hanya satu utas yang dapat memperbaruinya dalam satu waktu). Misalnya, akumulator penjumlahan sederhana akan digunakan untuk melakukan penghitungan semua tetangga tetangga yang disebutkan di atas. Akumulator kumpulan akan digunakan untuk mencatat ID dari semua tetangga tetangga tersebut. Akumulator tersedia dalam dua cakupan: global dan per node. Dalam contoh kueri sebelumnya, kami menyebutkan kebutuhan untuk menandai setiap node sebagai dikunjungi atau tidak. Di sini, akumulator per node akan digunakan.

Model komputasi MPP

Untuk mengulangi apa yang telah kami ungkapkan di atas, grafik TigerGraph adalah model penyimpanan dan model komputasi. Setiap node dan link dapat dikaitkan dengan fungsi komputasi. Oleh karena itu, TigerGraph bertindak sebagai unit penyimpanan dan komputasi paralel secara bersamaan. Ini tidak akan bisa dicapai menggunakan penyimpanan data NoSQL generik atau tanpa menggunakan akumulator.

Partisi otomatis

Di dunia big data saat ini, perusahaan memerlukan solusi database mereka agar dapat berkembang ke beberapa mesin, karena data mereka mungkin bertambah besar untuk disimpan secara ekonomis di satu server. TigerGraph dirancang untuk secara otomatis mempartisi data grafik di seluruh cluster server, dan masih bekerja dengan cepat. Indeks hash digunakan untuk menentukan tidak hanya lokasi data di dalam server tetapi juga server mana. Semua link yang terhubung keluar dari node tertentu disimpan di server yang sama. Teori ilmu komputer memberi tahu kita bahwa menemukan keseluruhan pemartisian grafik yang terbaik, bahkan jika kita dapat mendefinisikan "terbaik", biasanya sangat lambat, jadi kami tidak mencobanya. Mode default kami adalah menggunakan hashing acak, yang berfungsi sangat baik dalam banyak kasus. Sistem TigerGraph juga mendukung partisi yang diarahkan pengguna untuk pengguna yang memiliki skema partisi tertentu.

Mode komputasi terdistribusi