Ulasan Amazon Neptune: Database grafik yang dapat diskalakan untuk OLTP

Database grafik, seperti Neo4j, Apache Spark GraphX, DataStax Enterprise Graph, IBM Graph, JanusGraph, TigerGraph, AnzoGraph, porsi grafik Azure Cosmos DB, dan subjek ulasan ini, Amazon Neptune, cocok untuk beberapa jenis aplikasi yang melibatkan kumpulan data yang sangat terhubung, seperti memberikan rekomendasi berdasarkan grafik sosial, melakukan deteksi penipuan, memberikan rekomendasi produk secara real-time, dan mendeteksi serangan dalam jaringan dan operasi TI. Ini adalah area di mana database relasional tradisional cenderung menjadi tidak efisien dan lambat karena kebutuhan akan gabungan SQL yang kompleks yang beroperasi pada kumpulan data yang besar.

Neptune adalah layanan database grafik terkelola sepenuhnya dengan properti ACID dan konsistensi langsung, yang pada intinya memiliki mesin database grafik berperforma tinggi yang dibuat khusus dan dioptimalkan untuk menyimpan miliaran hubungan dan membuat kueri grafik dengan latensi milidetik. Neptune mendukung dua bahasa kueri grafik sumber terbuka paling populer, Apache TinkerPop Gremlin dan W3C SPARQL. Cypher Query Language (CQL) yang populer digunakan di Neo4j dimulai dengan kepemilikan, tetapi kemudian menjadi open source.

Gremlin dan SPARQL menangani berbagai jenis database grafik. Gremlin, seperti CQL, adalah untuk database grafik properti; SPARQL adalah untuk tripel Resource Description Framework (RDF), yang dirancang untuk web. Gremlin adalah bahasa traversal grafik; SPARQL adalah bahasa kueri dengan klausa SELECT dan WHERE.

Implementasi Amazon Neptune memungkinkan bahasa Gremlin dan SPARQL dalam satu instans database, tetapi keduanya tidak dapat melihat data satu sama lain. Alasan mengizinkan keduanya adalah membiarkan pengguna baru mencari tahu mana yang bekerja lebih baik untuk kebutuhan mereka.

Dokumentasi Neptunus memiliki sampel yang menggunakan varian Gremlin Gremlin-Groovy, Gremlin-Java, dan Gremlin-Python. Neptune mengizinkan Gremlin di konsol, panggilan HTTP REST, program Java, Python, .Net, dan Node.js. Di sisi SPARQL, Neptune mendukung konsol dan meja kerja Eclipse RDF4J, panggilan HTTP REST, dan program Java.

Fitur dan keunggulan Amazon Neptune

Sebagai database grafik transaksional yang terkelola sepenuhnya sebagai layanan, Amazon Neptune tidak hanya menawarkan kebebasan dari kebutuhan untuk memelihara perangkat keras dan perangkat lunak database, ia juga menawarkan penskalaan yang mudah, ketersediaan lebih dari 99,99%, dan berbagai tingkat keamanan. Kluster database Neptune dapat memiliki penyimpanan penskalaan otomatis hingga 64 TB di enam replika data Anda di tiga zona ketersediaan, dan lebih banyak lagi jika Anda mengaktifkan ketersediaan tinggi dengan menggunakan replika baca di zona tambahan.

Lapisan penyimpanan data Neptune didukung oleh SSD, toleran terhadap kesalahan, dan pemulihan sendiri. Kegagalan disk diperbaiki di latar belakang tanpa kehilangan ketersediaan database. Neptune secara otomatis mendeteksi database crash, dan restart — biasanya dalam 30 detik atau kurang — tanpa perlu melakukan pemulihan crash atau untuk membangun kembali cache database, karena cache diisolasi dari proses database dan dapat bertahan dari restart. Jika seluruh instance utama gagal, Neptune secara otomatis akan mengalihkan ke salah satu dari hingga 15 replika baca. Cadangan terus dialirkan ke S3.

Anda dapat menskalakan klaster Amazon Neptune naik dan turun baik dengan memodifikasi instans, atau (untuk menghindari waktu henti) dengan menambahkan instans dengan ukuran yang diinginkan dan mematikan instans lama setelah salinan data dimigrasi dan Anda telah mempromosikan instans baru ke utama. Ukuran instance VM Neptune berkisar dari db.r4.large (dua vCPU dan 16 GiB RAM) hingga db.r4.16xlarge (64 vCPU dan 488 GiB RAM).

Amazon Neptune menerapkan keamanan dengan menjalankan mesin di jaringan VPC (virtual private cloud) dan secara opsional mengenkripsi data saat istirahat menggunakan AWS Key Management Service. Selain mengenkripsi penyimpanan yang mendasarinya, Neptune juga mengenkripsi cadangan, snapshot, dan replika. Neptune memenuhi syarat untuk digunakan dalam aplikasi HIPAA. Neptune tidak mengharuskan Anda membuat indeks tertentu untuk mencapai kinerja kueri yang baik, yang merupakan perubahan yang disambut baik dari menyeimbangkan kinerja kueri dan tulis dengan menyelaraskan indeks dengan cermat.

Amazon Neptune tidak mendukung algoritme kueri analitik, seperti PageRank, yang ditampilkan di beberapa database grafik lain, seperti Neo4j, TigerGraph, dan AnzoGraph. Neptune dimaksudkan sebagai database grafik transaksional latensi rendah (OLTP) untuk kumpulan data yang besar, bukan database analitik (OLAP), dan tidak dioptimalkan untuk kasus penggunaan analitik atau kueri yang melibatkan lebih dari tiga lompatan — dan PageRank menyentuh setiap item di database.

Amazon Neptune mendukung agregat, sehingga dapat melakukan sedikit analisis, tetapi tidak banyak. Seperti Neptunus, Neo4j juga awalnya dimaksudkan untuk digunakan untuk OLTP, tetapi menambahkan pustaka kueri analitik pada tahun 2017. Fakta bahwa kemampuan analisis terbatas di Neptunus belum tentu menjadi alasan untuk mengesampingkannya, sebagai basis data grafik OLTP latensi rendah dengan replika baca yang terdistribusi secara global dan kemampuan untuk menangani 64 TB data sangatlah penting.

Mulailah dengan Amazon Neptune

Anda dapat meluncurkan klaster Amazon Neptune dengan dua cara: langsung dari konsol Amazon Neptune, atau dengan menggunakan templat AWS CloudFormation untuk membuat tumpukan Neptune. Perhatikan bahwa template CloudFormation yang disediakan tidak sesuai untuk produksi, karena tidak terlalu aman — ini dimaksudkan sebagai dasar untuk tutorial.

Anda dapat memulai dari yang kecil dan menambahkan kapasitas — VM yang lebih besar, atau lebih banyak replika baca — kapan pun aplikasi Anda membutuhkannya. Penyimpanan tumbuh secara otomatis, dan Anda hanya membayar untuk penyimpanan yang Anda gunakan.

Di screenshot berikut, saya menunjukkan beberapa siklus hidup gambar Neptune yang dibuat dari konsol Neptune. Saya mulai dengan pembuatan cluster.

Apakah Anda ingin ketersediaan tinggi untuk cluster Anda? Tidak sulit sama sekali.

Di pengaturan lanjutan, ada beberapa panel. Untungnya, sebagian besar default harus memenuhi kebutuhan Anda.

Terakhir, Anda akan melihat peringatan sebelum Anda menekan tombol untuk meluncurkan database. Jika Anda benar-benar perlu melihat penjelasannya, klik kanan pada link tersebut dan tampilkan di tab lain. (Saya berharap bug ini akan diperbaiki.)

Setelah Anda memiliki cluster kerja, Anda dapat melakukan beberapa tindakan pada instance.

Di tingkat cluster, Anda dapat menampilkan ringkasan.

Di tingkat instance, Anda dapat melihat grafik kinerja.

Memuat data ke Amazon Neptune

Untuk memuat data ke Amazon Neptune, pertama-tama Anda memuat file ke Amazon S3 dalam salah satu format yang benar: CSV untuk Gremlin, dan tripel, paha depan, RDF / XML, atau Turtle untuk RDF. Loader mendukung kompresi gzip file tunggal.

Anda harus membuat peran IAM dan titik akhir VPC S3 untuk memberikan izin kepada Neptune untuk mengakses bucket S3 Anda kecuali mereka sudah dibuat, misalnya dengan template CloudFormation. Ada API pemuat Neptune yang dapat dipanggil melalui titik akhir REST (mis. Dari perintah curl) yang dapat mengambil peran IAM dan memuat data secara massal ke dalam klaster Anda. Ada juga konverter untuk GraphML ke CSV di GitHub. Panduan pemuatan data adalah untuk semua format data yang didukung.

Kueri Amazon Neptune dengan Gremlin

Anda dapat menggunakan konsol Gremlin dan titik akhir REST untuk menghubungkan dan membuat kueri instans Amazon Neptune Anda di Gremlin dari VM EC2 di VPC yang sama dengan database. Lebih berguna untuk aplikasi, Anda bisa meminta Neptune menggunakan Gremlin di Java, Python, .Net, dan Node.js.

Ada seluruh buku tentang Gremlin, Practical Gremlin: An Apache TinkerPop Tutorial , oleh Kelvin Lawrence. Buku ini menggunakan TinkerGraph untuk database-nya, tetapi sintaks Gremlin yang sama berfungsi untuk Neptune dengan pengecualian kecil yang didokumentasikan oleh Amazon.

Kueri GREMLIN mendeskripsikan cara menavigasi simpul dan tepi grafik. Contoh database rute udara yang dibahas dalam buku ini menemukan semua cara untuk terbang dari Austin, Texas (kode bandara AUS) ke Agra, India (kode bandara AGR) dengan dua perhentian:

gV (). memiliki ('code', 'AUS']. repeat (out ()). times (3) .has ('code', 'AGR'). path (). by ('code')

Jika Anda ingin mencoba contoh di buku di Amazon Neptune, Anda harus menyalin file CSV edge dan node ke bucket S3 menggunakan perintah AWS CLI cp terlebih dahulu, dan memuat data dari sana ke Neptune.

Buat kueri Amazon Neptune dengan SPARQL

Anda dapat menggunakan konsol RDF4J, meja kerja RDF4J, dan titik akhir REST untuk menyambungkan dan meminta instans Amazon Neptune Anda di SPARQL dari VM EC2 di VPC yang sama dengan database. Lebih berguna untuk aplikasi, Anda bisa meminta Neptune menggunakan SPARQL di Java. Spesifikasi Bahasa Kueri SPARQL 1.1 menentukan cara membuat kueri. Jika Anda mencari web untuk "tutorial sparql" Anda akan menemukan sejumlah tutorial tertulis dan video gratis tentang subjek tersebut. Ini semua harus bekerja dengan Neptune setelah Anda memuat data.

SPARQL terlihat kurang seperti kode fungsional daripada GREMLIN, dan lebih mirip SQL. Sebagai contoh:

PILIH? Buku? Siapa

DI MANA {? Book dc: creator? Who}

Kinerja dan penskalaan Amazon Neptune

Amazon Neptune dirancang untuk kueri grafik latensi rendah hingga tiga lompatan pada database yang besar (hingga 64 TB). Ini mendukung hingga 15 replika baca latensi rendah di tiga zona ketersediaan untuk menskalakan kapasitas baca dan, menurut Amazon, dapat mengeksekusi lebih dari 100.000 kueri grafik per detik.

Ukuran instansinya berubah dari dua menjadi 64 vCPU dengan RAM 15 GiB hingga 488 GiB, kira-kira menggandakan keduanya di setiap langkah. Paling banyak, Neptune dapat menggunakan 64 vCPU dikali 16 instans dengan total 1.024 vCPU, dan 488 GiB RAM dikalikan 16 instans dengan total RAM 7808 GiB. Itu adalah kemungkinan pertumbuhan penskalaan keseluruhan 512x, dengan mempertimbangkan ukuran instance dan jumlah replika baca. Biaya melacak penskalaan sumber daya dengan tepat.

Jika Anda mencari database grafik transaksional sebagai layanan, Amazon Neptune adalah pilihan yang tepat. Mengingat bahwa Neptune mendukung bahasa kueri Gremlin dan SPARQL, Anda seharusnya dapat menemukan pengembang untuk membangun aplikasi melawannya. Di sisi lain, kurangnya dukungan Cypher Neptune dapat membuat pengguna Neo4j yang ada, dan kurangnya OLAP dan dukungan algoritma grafik akan membuat orang-orang yang menginginkan database grafik tunggal untuk transaksi dan analisis.

Berbagai macam kapasitas Amazon Neptune (hingga ukuran 16x dan 16 instans), tingkat transaksi maksimum yang tinggi (100.000 kueri per detik), dan harga bayar sesuai pemakaian harus sesuai dengan sebagian besar persyaratan bisnis. Namun, kurangnya opsi on-premise dapat menghalangi penggunaannya di perusahaan yang memiliki kebijakan untuk tidak memasukkan data sensitif mereka di cloud dan perusahaan yang lebih suka mengeluarkan dan menuliskan biaya modal daripada biaya operasional yang berkelanjutan.

-

Biaya: $ 0,348 hingga $ 5,568 per Jam Instans tergantung pada ukuran instans, $ 0,10 per GB-bulan untuk penyimpanan, $ 0,20 per juta permintaan I / O, $ 0,023 per GB-bulan untuk penyimpanan cadangan, $ 0,12 per GB untuk transfer data keluar; berbagai jeda harga berlaku. 

Platform: Layanan Web Amazon; mendukung kueri Apache TinkerPop Gremlin atau SPARQL; akses melalui konsol AWS, HTTP REST, dan Java, serta RDF4J Workbench (SPARQL) dan Python, .Net, dan Node.js (Gremlin).