Catatan: motivasi kemunculan NoSQL, ACID vs BASE, Teorema CAP, klasifikasi dasar NoSQL (key-value, column-family, document, graph), serta MapReduce sudah dibahas di 11_NoSQL (dari materi kuliah instance sebelumnya) — isinya masih relevan dan tidak diulang di sini. Catatan ini fokus pada bagian yang belum dibahas di sana: riwayat standar SQL, alasan detail keterbatasan basis data relasional, contoh produk konkret tiap kategori NoSQL, serta pembahasan lebih dalam untuk column store dan graph database (karena keduanya tidak punya topik dedicated tersendiri, berbeda dengan Key-Value dan Document yang dibahas mendalam di Key-Value Database dan Document Database).
Riwayat Singkat Standar SQL (ISO/IEC 9075)
| Tahun | Perkembangan |
|---|---|
| 1987 | Standar ISO/IEC awal |
| 1989 | Referential integrity |
| 1992 | SQL2 |
| 1995 | SQL/CLI (ODBC) |
| 1996 | SQL/PSM — ekstensi bahasa prosedural |
| 1999 | User-defined types |
| 2003 | SQL/XML |
| 2008 | Ekspansi dan koreksi |
| 2011/2012 | System-versioned dan application time period tables (dukungan data temporal) |
Karakteristik Basis Data Relasional (Recap)
- Data disimpan dalam relasi (tabel) dan atribut (kolom); relasi antar-data direpresentasikan lewat foreign key reference.
- SQL menyediakan DML (select/insert/update/delete) dan DDL (create table, constraint seperti primary/foreign key, trigger, stored module, alter, drop, security & access control) — lihat detail di Relational Data Model.
- Transaksi dijamin lewat properti ACID: Atomic (seluruh pekerjaan transaksi selesai/commit atau tidak sama sekali), Consistent (transaksi memindahkan basis data dari satu state konsisten ke state konsisten lain, sesuai constraint), Isolated (perubahan selama transaksi tidak terlihat sebelum transaksi commit), Durable (hasil transaksi yang sudah commit bertahan meski terjadi failure).
- Abstraksi dari lapisan fisik: aplikasi menyatakan what (apa yang diinginkan), bukan how (bagaimana caranya) — ada query optimization engine yang menentukan cara pengambilan data terbaik. Lapisan fisik bisa berubah (mis. menambah index, memakai in-memory database) tanpa perlu mengubah kode aplikasi.
- Contoh implementasi komersial: IBM DB2, Oracle RDBMS, Microsoft SQL Server, Sybase SQL Anywhere. Contoh open source (dengan opsi komersial): MySQL, PostgreSQL. Sebagian besar ekonomi dunia bertumpu pada basis data relasional.
Keterbatasan Basis Data Relasional
Basis data relasional berhasil mengatasi banyak keterbatasan flat-file data store, hierarchical, dan network database. Namun, perusahaan menemukan bahwa mendukung jumlah user besar di Web sangat berbeda dari mendukung jumlah user bisnis yang jauh lebih kecil pada satu aplikasi basis data. Aplikasi Web butuh: volume operasi baca/tulis yang sangat besar, waktu respons low latency, dan high availability.
Kebutuhan tersebut sulit dipenuhi memakai basis data relasional konvensional karena:
- Teknik lama tidak bekerja pada skala operasi, user, dan data yang sekarang dituntut bisnis.
- Upgrade CPU, tambah memori, storage lebih cepat → hanya efektif sampai titik tertentu (scaling vertikal ada batasnya).
- Redesain skema/denormalisasi → dengan risiko mengorbankan konsistensi data.
- Multiple server dengan basis data relasional → operasionalnya kompleks.
Kesadaran inilah yang melahirkan gerakan NoSQL (“Not Only SQL”) — pendekatan desain basis data yang memungkinkan penyimpanan dan query data di luar struktur tradisional basis data relasional (definisi IBM). NoSQL tetap bisa menyimpan data yang sama seperti RDBMS, hanya berbeda cara penyimpanannya; keputusan memakai relational vs non-relational sangat bergantung konteks/use case.
Karakteristik Pembeda NoSQL
- Volume data besar (big data).
- Replikasi dan distribusi yang skalabel — berpotensi ribuan mesin, tersebar secara global.
- Query harus mengembalikan jawaban cepat; mayoritas beban adalah query, sedikit update; insert & update bersifat asynchronous.
- Schema-less.
- Properti transaksi ACID tidak selalu dibutuhkan — dipakai BASE sebagai gantinya (lihat 11_NoSQL untuk detail BASE dan CAP Theorem).
- Pengembangan berbasis open source.
Produk/Proyek Non-Relasional (Contoh)
Beberapa nama besar per kategori (klasifikasi kategorinya sudah dibahas di 11_NoSQL):
- Key-Value: Redis, DynamoDB, Project Voldemort, Riak — dibahas mendalam di Key-Value Database.
- Document: MongoDB, CouchDB, Cloud Firestore — dibahas mendalam di Document Database.
- Column-family / wide-column: Google Bigtable, Apache HBase (dibangun di atas Hadoop), Apache Cassandra.
- Graph: Neo4j, ArangoDB.
- Lainnya: StupidDB, dsb.
Column Store — Pembahasan Lebih Dalam
Pada column store, setiap blok penyimpanan hanya berisi data dari satu kolom — berbeda dari basis data relasional konvensional yang menyimpan data per baris (row-oriented: semua kolom dari satu baris disimpan bersebelahan di disk).
| Row-oriented | Column-oriented | |
|---|---|---|
| Unit penyimpanan per blok | Seluruh kolom dari satu baris | Seluruh nilai dari satu kolom |
| Contoh | {id:1, username:'John', email:'john@foo.com', dept:'Sales'} per baris | Kolom id: [1,2,3]; kolom username: ['John','Mary','Yoda']; dst., masing-masing disimpan terpisah |
Column store memakai struktur sparse, distributed, multi-dimensional sorted map untuk menyimpan data. Column store lebih efisien dibanding row/document store ketika:
- Banyak baris/record/dokumen di-insert secara bersamaan, sehingga update pada blok kolom dapat diagregasi.
- Query hanya mengakses sebagian kolom dari suatu baris/record/dokumen (tidak perlu membaca seluruh baris hanya untuk mengambil satu-dua kolom).
Contoh sistem: Hadoop/HBase (open-source, dimodelkan mengikuti Google Bigtable; dipakai Yahoo, Facebook), Apache Cassandra (wide-column distributed database open source), Actian Vector (dahulu Vector/VectorWise — column store yang terintegrasi dengan basis data SQL).
Graph Database — Pembahasan Lebih Dalam
Graph database memodelkan data sebagai node (dengan properti, termasuk ID) dan edge (dapat berlabel/berperan, umumnya berarah) — berdasarkan teori graf.
graph LR A["ID:1 Name:Amy Grade:9"] -->|Likes| B["ID:2 Name:Ben Grade:9"] A <-->|Friend| C["ID:3 Name:Carol Grade:10"] B -->|Likes| C
Karakteristik graph database:
- Skala vertikal (menambah kapasitas satu mesin), bukan horizontal lewat clustering — berbeda dari kebanyakan NoSQL lain yang justru didesain untuk scale-out.
- Mendukung eksekusi algoritma graf secara natural (mis. shortest path, traversal relasi berantai).
- Berguna khususnya saat relasi adalah inti dari aplikasi, mis. jejaring sosial.
Contoh sistem: Neo4j (graph database native — model graf diimplementasikan sampai level storage), ArangoDB (basis data multi-model native yang menyatukan graph, dokumen JSON, dan key-value dalam satu core basis data).
Tipe Non-SQL Database Lainnya
Selain empat kategori utama (key-value, column, document, graph), ada beberapa tipe lain yang lebih jarang dibahas:
- XML Database — sudah dibahas di 10_XML_Databases.
- Codasyl Database — tipe basis data berbasis network data model, didefinisikan secara formal oleh CODASYL Database Task Group (pendahulu historis dari basis data relasional/NoSQL modern).
- Object-Oriented Database.
- Time-series database.
Memilih Model Data yang Tepat
Tidak ada satu model data yang cocok untuk semua use case — pemilihan basis data relasional vs berbagai tipe NoSQL bergantung pada karakteristik data (terstruktur vs semi-terstruktur), pola akses (butuh join kompleks vs lookup by key), kebutuhan konsistensi (ACID vs BASE), dan skala (vertikal vs horizontal). Detail kriteria pemilihan tiap model data dibahas lebih lanjut per topik: Key-Value Database dan Document Database.
Sumber
- K. W. Hare (JCC Consulting, Inc.): “A Comparison of SQL and NoSQL Database”, Convenor ISO/IEC JTC1 SC32 WG3.
- F. Atagun: “NoSQL Theory, Implementations: An Introduction”.
- P. Hoekstra (Perficient, Inc.): “NoSQL”.
- Materi kuliah IF4040 Advanced Data Modeling, topik Introduction to NoSQL DB.
Flashcard
flashcards Sebutkan tiga alasan basis data relasional sulit memenuhi kebutuhan skala aplikasi Web modern :: Teknik lama tidak bekerja pada skala operasi/user/data yang dituntut; upgrade CPU/memori/storage hanya efektif sampai titik tertentu (scaling vertikal terbatas); redesain skema/denormalisasi berisiko mengorbankan konsistensi; multiple server dengan RDBMS operasionalnya kompleks. Apa perbedaan penyimpanan row-oriented dan column-oriented? :: Row-oriented menyimpan seluruh kolom dari satu baris bersebelahan di disk; column-oriented menyimpan seluruh nilai dari satu kolom bersama-sama, terpisah dari kolom lain. Kapan column store lebih efisien dibanding row/document store? :: Saat banyak baris di-insert bersamaan (update blok kolom bisa diagregasi), dan saat query hanya mengakses sebagian kolom dari suatu baris/record. Sebutkan dua contoh sistem column store dan asal-usulnya :: Hadoop/HBase (dimodelkan mengikuti Google Bigtable, dipakai Yahoo/Facebook) dan Apache Cassandra (wide-column distributed database open source). Bagaimana graph database berskala, dan kenapa berbeda dari NoSQL lain? :: Graph database umumnya berskala vertikal (menambah kapasitas satu mesin), bukan horizontal lewat clustering seperti kebanyakan NoSQL lain yang didesain untuk scale-out. Apa itu ArangoDB dan apa yang membuatnya berbeda dari graph database murni seperti Neo4j? :: ArangoDB adalah basis data multi-model native yang menyatukan graph, dokumen JSON, dan key-value dalam satu core, sedangkan Neo4j adalah graph database native yang mengimplementasikan model graf sampai level storage. Sebutkan empat tipe non-SQL database di luar key-value, document, column, dan graph :: XML database, Codasyl database (berbasis network data model), object-oriented database, dan time-series database.