Outline
- Pendahuluan teknologi Big Data dan Data Science
- Big Database
- Teknologi komputasi
- Bahasa Pemrograman
- Cloud Computing
- Teknologi Pendukung Lain.
Video DSBD-05
Pendahuluan Teknologi di Big Data dan Data Science
Tidak nampak sebelumnya dalam sejarah perkembangan ilmu data dimana teknologi, metode, dan aplikasi berkembang begitu pesat dan tersinkronisasi seperti pada saat revolusi industri 4.0 yang sedang berlangsung saat ini. Teknologi komputasi menggunakan GPU (Graphical Processing Unit) memungkinkan model dengan data tidak terstruktur seperti image dengan ribuan atau bahkan puluhan ribu kategori berbeda dapat dilakukan dan diaplikasikan pada sebuah mobil nirawak. Dengan teknologi yang sama, aplikasi deteksi masker wajah dan social distancing dapat dilakukan secara real-time dan membantu pemerintah dalam membuat berbagai kebijakan di suatu daerah tertentu. Berbagai aplikasi image classification ini juga dapat diaplikasikan ke emotion detection dan digunakan dalam bidang Human Resources Analytics dalam menentukan kebijakan optimal untuk meningkatkan produktivitas pekerja.
Tidak hanya terkait gambar, teknologi terkait bahasa juga nampak dalam keseharian kita lewat interaksi komputer dan manusia yang semakin baik. Sebut saja Apple Siri, Microsoft Cortana, Amazon Alexa, Samsung Bixby, atau Google voice assisstant. Walau tidak kasat mata berbagai metode dan teknologi juga disematkan di cukup banyak solusi yang ditawarkan para perusahaan startup eknologi, baik di bidang marketplace, online travel, online transportation, dan lain sebagainya. Seperti yang ditunjukkan di Gambar 2, Spektrum ilmu data sebenarnya tidak hanya metode dan aplikasi, tapi juga Aplikasi dan aspek sosial. Namun, pada kesempatan kali ini kita akan membahas aspek teknologi terkait ilmu data.
Ada beberapa cara diajukan untuk mengkategorikan pembahasan terkait teknologi big data dan data science. Sebagai contoh Gambar 3 menjelaskan pembahasan teknologi data menggunakan alur pengolahan data mulai dari penyimpanan hingga visualisasi. Namun kategorisasi ini luput untuk membahas beberapa poin penting pada perkembangan teknologi, terutama terkait teknologi hardware dan cloud. Tentu saja karena begitu luas dan kompleksnya teknologi terkait data saat ini, maka hampir tidak memungkinkan untuk membahas semuanya pada satu pokok bahasan seperti module/lesson ini. Kita mulai diskusi kita dengan membahas Perkembangan teknologi basis data.
(Big) Databases
Akhir-akhir ini istilah NoSQL (e.g. MongoDB) semakin jamak ditelinga, terutama pada pembahasan mengenai data yang besar (Big Data).
Pertanyaan/diskusi yang paling sering muncul saat pertama kali mempelajari topik ini adalah:
- Apakah NoSQL adalah pengganti (lebih baik dari) database relational (e.g. MySQL) ?
- Apakah database relasional benar-benar tidak bisa digunakan saat ukuran datanya besar ?
- lalu apa kelebihan & kekurangan masing-masing?
Mari kita mulai dengan definisi umum/penjelasan sederhana (non-formal) apa yang dimaksud dengan database relasional & NoSQL.
- Database relasional adalah koleksi data terstruktur yang disajikan lewat tabel², dimana tabel² tersebut dapat saling berhubungan (relasi). Tipe ini adalah bentuk basis data yang konvensional. Saat seseorang menyebut kata database, kemungkinan besar orang umum akan membayangkan database relasional (sekumpulan tabel²). contohnya MySQL, PostGreSQL, SqlLite, Microsoft Sql Server, dll.
RDBMS (Relasional Database Management System) fokus pada konsep ACID:
1. Atomicity: Suatu proses selesai secara menyeluruh/tidak.
2. Consistency: Semua proses (transaction) yang terjadi di database harus memiliki state yang jelas. Setiap data yang disimpan harus memenuhi semua constraint, Cascades, dan triggers.
3. Isolation: Sebuah proses tidak boleh mempengaruhi proses lain.
4. Durability: Proses yang telah selesai harus bersifat permanen, walau aplikasinya di restart. - Sedangkan NoSQL adalah tipe penyimpanan data selain yang berwujud tabular (tabel²), NoSQL tidak mengikuti prinsip (ACID) RDBMS sepenuhnya. Lalu kalau bukan ACID, apakah prinsip utama NoSQL ?
NoSQL, menurut Eric Brewer menganut prinsip BASE:
1. Basic Availability: Setiap request sekedar mendapat garansi “response”: Sukses/Gagal.
2. Soft State: State NoSQL bisa berubah secara dinamis tanpa input manual untuk meyakinkan eventual consistency.
3. Eventual Consistency: Untuk “sementara” waktu NoSQL mungkin tidak konsisten (Akan diabahas kemudian maksud & contohnya).
NoSQL bukan berarti “No SQL” atau “bukan SQL”/tidak mendukung bahasa Query, tapi “Not-Only SQL”. Masudnya database NoSQL tetap memiliki (support) ‘semacam’ bahasa Query, namun dalam bentuk (terminology yang berbeda). Beberapa literature bahkan tidak menggolongkan NoSQL sebagai suatu bentuk database. NoSQL bisa berupa Document (e.g. MongoDB), Key-Value (e.g. CouchDB), Graph (e.g. Neo4J), dsb.
Berikut beberapa perbedaan terminologi dan padanannya:
Sejarah ?
Banyak yang tidak menyukai pelajaran sejarah, namun sebagian orang mungkin tertarik sejarah awal lahirnya teknologi NoSQL. Ada beberapa istilah yang muncul pada tahun 2003-2006 ketika Google terkendala dengan data yang semakin membesar. Istilah² yang dijelaskan dalam artikel ilmiah ini terkait dengan perkembangan NoSQL saat ini.
Artikel/paper² tersebut kemudian memicu perkembangan beberapa project Open Source untuk data besar:
- Lucene: Java-based indexing dan search engine,
- Hadoop: Untuk Reliable (terpercaya), scalable (Untuk data besar), distributed computing (data yang tidak terpusat),
- Cassandra: Scalable, multi-master database with no single point of failure,
- ZooKeeper: High performance coordination service for distributed applications,
- Pig: High level dataflow language and execution framework for parallel computation.
Bilamana kita membutuhkan NoSQL (e.g. MongoDB) ketimbang database relasional (e.g. MySQL) dan sebaliknya ?
Pada saat apakah penggunaan NoSQL lebih cocok ketimbang database relasional ?
- Saat kita membutuhkan penyimpanan data yang “relatif” besar, namun terdapat keterbatasan resources (komputer/server). Mengapa saya tambahkan syarat “keterbatasan resources”? Karena sebenarnya relational database scalable untuk data besar bahkan untuk skala >PetaByte (e.g. Facebook menggunakan MySQL). Namun demikian butuh resources yang sangat besar untuk membuat database relasional memiliki performa yang baik bila datanya besar.
- Data tidak terstruktur (Misal Dokumen) atau biasa disebut sebagai Schemaless Data Representation. Bayangkan data yang masuk ke database terkadang hanya memiliki 4 kolom, tapi dilain waktu memiliki jumlah kolom yang berbeda lagi. Di Database relasional kejadian seperti ini akan memaksa kita mengubah struktur DB (schema) yang biasanya sangat fatal, terutama apabila datanya besar. Perubahan schema adalah bencana besar bagi sistem IT. Karena aplikasi harus direvisi mengikuti perubahan tersebut. Pada terminologi Big Data, ini terkait dengan “Variety”, yaitu semakin beragamnya tipe/struktur/format data yang masuk ke database.
- NoSQL (MongoDB) sangat cocok dengan aplikasi yang berorientasi objek. Dengan tidak adanya Join di NoSQL dan query yang rumit, NoSQL terkenal mempercepat para developer dalam membangun sebuah aplikasi.
- NoSQL sangat cocok bila aplikasi/system membutuhkan proses Write/Insertdalam jumlah yang sangat besar dan dalam waktu yang singkat. Dikaitkan dengan terminology di Big Data, NoSQL sangat cocok jika sistem kita memiliki Velocity data yang besar.
- Data anda mengandung informasi lokasi (e.g. Latitude/Longitude).
- Data complexity – data disimpan (& manage) tersebar di berbagai lokasi (data centres) yang berbeda (distributed).
- Berikut beberapa contoh aplikasi/Web besar/terkenal yang menggunakan MongoDB sebagai gambaran untuk aplikasi seperti apakah ia cocok untuk digunakan: FourSquare, SourceForge, CraigList, BitLy, Forbes, Bosch, dll.
Bilamana NoSQL secara umum kurang cocok untuk digunakan:
- Saat data yang diinput memiliki nilai yang sangat berharga (misal transaksi pemabayaran/transfer uang). NoSQL cepat dalam melakukan input namun tradeoff-nya ia tidak se-reliable tipe database lain.
- Analytic: walau memiliki implementasi map reduce-nya sendiri, NoSQL bukan pengganti Hadoop atau analytic engine lainnya. Ia sifatnya komplementari (membantu) analytic engine.
- Multi-Object Transactions: NoSQL (MongoDB) tidak mendukung input beberapa hal ke satu atau lebih “table”. Misal, MongoDB hanya support untuk penyimpanan ke sebuah dokumen.
- Complex Query: Jika aplikasi yang dibangun membutuhkan query yang rumit (complex), biasanya NoSQL kurang cocok. Walau NoSQL memiliki querynya sendiri, namun lebih terbatas ketimbang database konvensional.
- ‘Nature’ dari datanya memang relasional (A==>nB, B==>nA).
Beberapa catatan penting lain :
- NoSQL (e.g. MongoDB) bukanlah pengganti analytic engine seperti hadoop. (Penting untuk ditekankan 2x :) )
- NoSQL “umumnya” memerlukan memory lebih besar (beware).
- Record yang dihapus di collection (noSQL) tidak langsung mengurangi ukuran file (Penjelasan lebih Lanjut).
- Diagram berikut ini menjelaskan lebih detail tentang berbagai tipe database yang ada saat ini:
Beberapa catatan penting:
- NoSQL dan SQL database memiliki +/- masing².
- Keduanya saling melengkapi dan bukannya menggantikan.
- NoSQL lebih cocok untuk data yang memiliki volume & velocity besar serta variety yang beragam.
- NoSQL secara umum bukanlah analytic engine seperti Hadoop.
- Perpaduan penggunaan database NoSQL dan SQL yang tepat tidak hanya akan meningkatkan performa, namun juga meng-optimalkan biaya (cost) infrastruktur.
FAQ:1. Mengapa NoSQL tidak disarankan untuk transaksi berharga (Misal perbankan) ? [toggle] Bisa, tapi sebaiknya untuk data yang tidak crucial (Selain transaksi dengan nilai besar). Mengapa ? NoSQL (misal MongoDB) cepat, karena mengorbankan feature yg biasanya ada di database SQL. MongoDB hanya ACID compliance pada level document:
Setiap update pada sebuah dokumen:
- Atomic: Selesai secara menyeluruh/tidak.
- Consistent: Tidak ada user yang akan melihat data yang ter-update sebagian.
- Isolated: Tidak akan ada user yang mendapatkan data yg noisy/dirty.
- Durable: Nah ini agak tricky kalau di NoSQL, tapi masih doable.
Tapi MongoDB tidak mendukung transactions — yaitu multiple update yg bisa di cancel (rolled back) dan ACID compliance.
Untuk meningkatkan performa insert, MongoDB tidak langsung write ke disk, ia simpan dulu di (virtual) memory (hence butuh more memory). Bayangkan user insert/update data, lalu ada pesan “insert/update success” , tapi kemudian ada failure (misal mati listrik/meledak smile emoticon ). maka data yang baru saja dimasukkan sebenarnya belum tersimpan di disk (hence durable issue). Tapi tentu saja ada NoSQL yg respect ACID transactions (misal CouchDB). Semua ada +/-nya masing². Jadi sebagai developer harus benar² memperhatikan kebutuhan.
All in All, trend teknologi Database kalau “menurut saya” beralih dari general purpose ke adhoc (specific).
Nantikan tulisan terkait berikutnya tentang* (tergantung waktu luang :) ):
- Contoh kasus development SQL VS NoSQL,
- Pendahuluan/dasar² MongoDB, CouchDB, HBase, Hypertable, Cassandra, Redis, & Berkeley DB, serta
- Pembahasan lanjut tentang MongoDB.
Big Data Computing
Perkembangan teknologi terkait dengan pengolahan data tidak akan luput dari peran komputer yang kemudian membantu melakukan berbagai perhitungan dari data, baik dalam membentuk model terbaik (optimal), maupun dalam melakukan prediksi atau peramalan dari model tersebut. Berdasarkan bagaimana data masuk dan diolah, CPU (central Processing Unit) komputer terbagi menjadi 4 macam (Gambar 6): sebuah proses dan sumber data (SISD), Sebuah proses dan beberapa data (SIMD), beberapa proses dan sebuah sumber data (MISD), dan beberapa proses komputasi dan data (MIMD) seperti kebanyakan komputer modern saat ini. Keterangan lebih lanjut tentang hal ini dapat dibaca di link ini.
Namun demikian, terkait dengan pengolahan data, maka perkembangan teknologi komputasi lebih terjadi akibat bagaimana data dan komputasi dilakukan pada sebuah sistem. Pada era Statistika Tradisional komputasi dan data berada di satu tempat, biasa disebut sebagai CDCC-Centralized Data and Centralized Computation. Secara umum (hampir) semua model Statistika tradisional memiliki asumsi implisit ini, yaitu data berada di satu tepat. Bayangkan data dalam format Table diolah dengan software Statistika klasik seperti SPSS, Minitab, SAS, Splus, dsb. Di era 90-an berbagai permasalahan mulai meningkat kompleksitasnya, terutama di bidang Fisika, Klimatologi, BioInformatika, dsb. Pada aplikasi-aplikasi ini sebenarnya ukuran data tidak terlalu besar, namun model dan algoritma yang digunakan sangat kompleks, sehingga komputasi dijalankan secara parallel. Teknologi yang biasa digunakan pada kondisi ini adalah arsitektur CDDC-Centralized Data-Distributed Computing. Data dikirimkan ke Super Komputer/High Performance Komputer (HPC) untuk kemudian diolah secara simultan menggunakan arsitektur komputer dengan memory terdistribusi (library MPI) atau terpusat (library OpenMP).
Seiring dengan berkembangnya ukuran data, teknologi database-pun semakin berkembang (sebut saja data warehouse dan Data Lake). Data tidak lagi dapat disimpan dalam sebuah node komputer, melainkan harus disimpan dalam sebuah cluster database dimana data disebar ke beberapa mesin komputer yang saling terhubung. Salah satu analisa data sederhana dari database ini adalah berbagai statistik dasar (misal rata-rata dan keseragaman data) maupun visualisasi trend perubahan data seiring berjalannya waktu. Dengan kata lain, berbanding terbalik dengan arsitektur sebelumnya (CDDC), DDCC (Distributed Data-Centralized Computing) ini mengolah data yang besar, namun model yang digunakan cenderung lebih sederhana.
Di era Industri 4.0 kita berada pada fase dimana tidak hanya datanya yang besar, namun juga kemudian berbagai aplikasi modern terkait data membutuhkan model yang cukup kompleks. Pada keadaan dimana ukuran data besar dan model yang digunakan cukup kompleks, maka arsitektur DDDC (Distributed Data-Distributed Computing) menjadi solusi paling optimal saat ini untuk menangani permalsahan di Big Data. Dengan menggunakan arsitektur DDDC ini, maka data tidak perlu ditransfer ke komputasi seperti CDDC, namun langsung diolah dimasing-masing Node. Sehingga keseluruhan proses menjadi jauh lebih efisien. Salah satu teknologi yang dapat digunakan pada arsitektur ini yang sangat populer adalah Hadoop atau Spark.
Perlu diingat bahwa penggunaan arsitektur komputer (teknologi) tertentu akan merubah bagaimana model terbaik (optimal) di-hitung/dapatkan (rumus dan algoritmanya berubah). Sehinga Big Data bukanlah sekedar masalah kebutuhan akan teknologi/komputasi yang lebih canggih karena data yang besar, namun juga teori yang juga harus mengikuti teknologi yang digunakan.
Bahasa Pemrograman
Setelah Database dan Komputer (komputasi), perkembangan teknologi terkait data tidak bisa lepas dari perkembangan tenologi perangkat lunaknya (software). Ketika komputer pertama kali digunakan, instruksi ke komputer dilakukan dengan bahasa yang mendekatai bahasa mesin (sebut saja Assembler). Paradigma pemrograman ini kemudian berkembang ke penggunaan fungsi dan kumpulan fungsi (procedure), yang biasa dibut sebagai teknik pemrograman terstruktur/Procedural. Paradigma pemrograman yang paling populer saat ini adalah Pemrograman Berorientasi Objek dimana suatu objek (class) kemudian memiliki fungsi dan atribut/properties yang melekat dengannya (baca lebih lanjut disini). Dikarenakan penggunaan arsitektur DDDC di Big Data yang telah dijelaskan sebelumnya, maka paradigma pemrograman ini kemudian berkembang ke teknik Functional Programming (Map-Reduce) yang sangat cocok untuk diterapkan di arsitektur komputer DDDC.
Tidak semua model/algoritma di Statistika/Machine Learning/Data Science Optimal di jalankan di suatu arsitektur komputer tertentu. Walaupun DDDC sekalipun.
Paradigma pemrograman Functional Programming (FP) tidak dapat dijalankan di sembarang bahasa pemrograman (hanya dapat dilakukan pada bahasa pemrograman tertentu). Di Big Data biasanya Java dan Python digunakan untuk melakukan hal ini. Python akhir-akhir ini semakin meningkat popularitasnya karena kemudahan dalam penggunaannya. Gambar 10 mengilustrasikan bagaimana Map-Reduce (fungsi di FP) dapat dilakukan dengan sangat mudah di Python. Task yang sama dikerjakan di bahasa pemrograman lain (misal Java) akan membutuhkan kompleksitas program yang jauh lebih tinggi.
Terkait dengan hubungan paradigma pemrograman dan bahasa pemrograman yang mendukung pendekatan pemrogaraman tersebut secara lengkap diberikan di Gambar 11. Sebagai contoh Bahasa pemrograman C++ biasanya digunakan di paradigma pemrograman OOP lewat struktur data Class-nya. Ada satu hal yang menarik dimana Python mendukung berbagai paradigma pemrograman sekaligus (procedural, OOP, dan FP).
Paradigma pemrograman (hence bahasa pemrograman juga) dipilih bergantung aplikasi yang akan dibuat. Tidak ada sebuah bahasa pemrograman yang kemudian paling optimal untuk semua (macam) aplikasi.
Python saat ini menjadi bahasa pemrograman yang paling populer untuk data science, machine learning, dan kecerdasan buatan (Gambar 12). Selain karena hal-hal yang telah dijelaskan sebelumnya, Python juga memuat banyak fungsi yang memudahkan dalam pengolahan data, memiliki fungsi untuk menghubungan ke berbagai teknologi Big Data (misal NoSQL dan support IoT devices), juga dapat memiliki performa yang sangat tinggi ketika programnya di kompilasi. Sebuah kelebihan yang tidak dimiliki bahsa pemrograman lainnya (interpreter, Just-In-Time compiler, dan compiler sekaligus).
Dalam sebuah Big Data Framework (ekosistem komponen teknologi terkait Big Data). Penggunaan spesifik teknologi perangkat lunak di Big Data selanjutnya yang paling populer adalah Hadoop untuk batch processing data (tidak bisa realtime) dan Apache Spark untuk process realtime. Pembeda utama dari ke-2 teknologi ini adalah, di Hadoop data di simpan dalam storage permanen (harddisk), sedangkan di Spark data disimpan dalam (volatile) memory seperti RAM (Gambar 13). Teknologi ini biasanya hanya perlu dikuasai oleh apra Data Scientist senior yang menangani data dalam jumlah yang sanat besar. Dan ditemukan biasanya hanya pada perusahaan-perusahaan berskala besar.
Cloud Computing
Sebagaimana yang telah dijelaskan sebelumnya, misal seorang Data Scientist (DS) ingin mengolah data yang besar di sebuah arsitektur DDDC secara real-time. Maka ia dapat menggunakan Apache Spark yang memiliki performa tinggi karena data disimpan di memori komputer yang kecepatannya jauh lebih tinggi ketimbang hard disk. Namun sang data scientist memerlukan beberapa komputer untuk melakukannya, ia juga harus menghubunga komputer-komputer tersebut dalam sebuah jaringan komputer. Tidak itu saja sang DS juga harus menyiapkan "precaution" seandainya terjadi power failure (mati listrik), sehingga ia harus menyiapkan UPS/Genset cadangan. Lebih jauh lagi ia juga perlu menyiapkan backup data di harddisk berperforma tinggi untuk antisipasi suatu Force Majeur seperti bencana alam atau kebakaran. Sampai disini sudah terbayangkan betapa rumitnya mempersiapkan sebuah arsitektur Big Data yang paling sederhana sekalipun. Hal tersbut bukanlah perkara mudah dan juga bukan perkara yang murah.
Solusi dari permasalahan diatas adalah dengan menggunakan pelayanan komputer awan (cloud computing). Penjelasan paling sederhana dari cloud computing adalah "penyewaan berbagai resources komputasi lewat koneksi internet. Atau dengan kata lain CC meruapakan pemanfaatan teknologi komputer ('komputasi') dan pengembangan berbasis Internet ('awan'). Cloud ini bisa diakses public, private hanya kalangan internal perusahaan/instansi, atau on-premise yang berarti hardware berada dimana institusinya berada (Gambar 14).
Biasanya ada tiga buah pelayanan utama dari cloud computing, yaitu penggunaan software (SAAS), penggunaan platform dimana seorang DS dapat mengembangkan suatu solusi (aplikasi) berdasarkan data. Atau IaaS dimana suatu kesatuan utuh infrastruktur dapat digunakan secara leluasa. Penjelasan lebih detail tentang hal ini diberikan di video yang disertakan di module pelajaranan DSBD-05 ini. Gambar 16 memberikan informasi berbagai contoh penyedia jasa CC yang ternama beserta contoh biaya yang harus dikeluarkan DS per service yang digunakan.
Teknologi Pendukung Lain
Gambar 17 melukiskan dengan lebih lengkap berbagai teknologi terkait Big Data yang ada saat ini. Apa yang sudah dipaparkan sebelumnya hanyalah sebagian kecil dari "Rimba" teknologi yang ada terkait Big Data atau Data Science saat ini. Seorang DS tidak perlu menguasai seluruh teknologi yang ada. Namun demikian ia harus dapat memberikan masukan ke perusahaan terkait teknologi yang sebaiknya digunakan perusahaan untuk mengatasi permasalahan yang sedang dihadapi perusahaan saat ini. Perkembangan teknologi ini akan terus berjalan 9dengan cepat), itulah mengapa di DSBD-02 kita telah membahas bahwa salah satu kompetensi yang sangat penting dimiliki oleh seorang data scientist adalah "Long Life Learner".
Gambar 18 berisi beberapa contoh teknologi penting lain terkait data yang belum dibahas di penjelasan diatas. Penjelasan singkat tentang teknologi-teknologi tersebut diberikan di video DSBD-05 ini.
Tidak ada komentar:
Posting Komentar
Relevant & Respectful Comments Only.