Pangkalan data berorientasi dokumen

**Pangkalan data berorientasi dokumen**, atau **penyimpanan dokumen**, adalah program komputer dan sistem penyimpanan data yang dirancang untuk menyimpan, mengambil, dan mengelola informasi berorientasi dokumen, juga dikenal sebagai data semi-terstruktur.

Pangkalan data berorientasi dokumen merupakan salah satu kategori utama dalam jenis pangkalan data NoSQL. Istilah “pangkalan data berorientasi dokumen” atau dalam bahasa Inggris *document-oriented database* semakin berkembang dan populer digunakan seiring dengan penggunaan istilah NoSQL itu sendiri. Pangkalan data XML adalah subkelas pangkalan data berorientasi dokumen yang bekerja dengan optimal untuk menangani dokumen XML . Pangkalan data berorientasi dokumen memiliki kemiripan dengan pangkalan data graf, tetapi, pangkalan data graf memiliki komponen lain, yaitu *hubungan*, yang memungkinkannya menautkan dokumen sehingga dapat dilakukan penelusuran dengan cepat.

Basis data berorientasi dokumen pada hakikatnya merupakan subkelas nya pangkalan data nilai-kunci, konsep pangkalan data NoSQL lainnya. Namun pangkalan data berorientasi dokumen memiliki perbedaan pada cara data diproses; dalam basis data nilai-kunci, data hanya sekadar dipasangkan dengan kunci, tanpa analisis internal struktur data oleh basis data, sedangkan pada sistem berorientasi dokumen, struktur internal dalam *dokumen* dianalisis sehingga dari struktur dapat dapat diekstrak suatu metadata yang digunakan oleh mesin basis data untuk optimasi lebih lanjut. Meskipun perbedaannya ini tidak tampak kentara karena keterbatasan alat yang digunakan dalam sistem, secara konseptual penyimpanan dokumen dirancang untuk menawarkan fungsi yang lebih kaya untuk dipadukan dengan teknik pemrograman modern.

Pangkalan data dokumen berbeda jelas dengan pangkalan data relasional tradisional (*relational database;* RDB). Basis data relasional umumnya menyimpan data dalam *tabel-tabel* terpisah yang ditentukan oleh pemrogram, dan satu objek dapat tersebar di beberapa tabel. Basis data dokumen menyimpan semua informasi untuk objek tertentu dalam satu *contoh* tunggal yang tersimpan dalam pangkalan data, dan setiap objek yang disimpan dapat berbeda satu sama lain. Ini menghilangkan kebutuhan untuk pemetaan objek-relasional saat memuat data ke dalam pangkalan data.

## Dokumen
Gagasan utama dsri konsep pangkalan data berorientasi dokumen adalah konsepsi *dokumen* . Walau tiap perangkat lunak yang menerapkan pangkalan data berorientasi dokumen berbeda dalam rinci tertentu, secara umum, semuanya mengasumsikan dokumen merangkum (*encapsulate*) dan mengodekan (*encode*) data atau informasi dalam beberapa standar format atau pengodean. Pengodean yang digunakan meliputi XML, YAML, JSON, dan juga bentuk biner seperti BSON .

*Dokumen* dalam pangkalan data ini secara kasar setara dengan konsep *objek* dalam pemrograman. Suatu objek tidak diharuskan mematuhi skema standar, mereka juga tidak akan memiliki semua bagian, slot, atau kunci yang sama. Secara umum, program yang menggunakan konsep objek memiliki banyak jenis objek yang berbeda, dan objek-objek tersebut sering kali memiliki banyak bagian opsional. Setiap objek, bahkan yang memiliki kelas yang sama, dapat terlihat sangat berbeda. Pangkalan data dokumen memiliki kemiripan dalam prinsip ini, yaitu dalam hal memperbolehkan berbagai jenis dokumen tersimpan dalam satu basis data, membuka kemungkinan bahwa bagian-bagian yang opsional dan berbeda tiap dokumen, dan dalam beberapa kasus membolehkan dokumen yang akan disimpan untuk dikodekan menggunakan sistem pengodean yang berbeda. Misalnya, berikut ini adalah dokumen yang dikodekan dalam JSON:
```json
{
    "firstName": "Bob", 
    "lastName": "Smith",
    "address": {
        "type": "Home",
        "street1":"5 Oak St.",
        "city": "Boys",
        "state": "AR",
        "zip": "32225",
        "country": "US"
    },
    "hobby": "sailing",
    "phone": {
        "type": "Cell",
        "number": "(555)-123-4567"
    }
}
```
Dokumen kedua mungkin dikodekan dalam XML sebagai:
```xml
<contact>
  <firstname>Bob</firstname>
  <lastname>Smith</lastname>
  <phone type="Cell">(123) 555-0178</phone>
  <phone type="Work">(890) 555-0133</phone>
  <address>
    <type>Home</type>
    <street1>123 Back St.</street1>
    <city>Boys</city>
    <state>AR</state>
    <zip>32225</zip>
    <country>US</country>
  </address>
</contact>
```
Kedua dokumen di atas memiliki beberapa elemen struktural yang sama satu sama lain (data alamat), tetapi ada beberapa bagian yang berbeda (struktur kode pertama memiliki bagian data hobi). Struktur maupun teks serta data lain dalam suatu dokumen biasanya disebut dengan isi atau konten dokumen dan dapat dirujuk melalui metode pengambilan atau penyuntingan. Berbeda dengan pangkalan data relasional di mana setiap data/catatan berisi bagian yang sama, dengan bagian yang tidak memiliki data dibiarkan kosong; tidak ada 'bagian kosong' pada contoh dokumen di atas. Pendekatan ini memungkinkan informasi dengan jenis baru dapat ditambahkan ke beberapa dokumen tanpa mengharuskan setiap dokumen lain dalam pangkalan data menyamakan diri dengan dokumen tersebut.

Pangkalan data dokumen biasanya menyediakan metadata tambahan untuk disangkutpautkan dan disimpan bersama dengan isi dokumen. Metadata tersebut mungkin berhubungan dengan fitur atau fungsi yang disediakan oleh sistem penyimpan data untuk mengatur dokumen, menyediakan keamanan, atau fitur terapan spesifik lainnya.

### Operasi CRUD
Operasi utama yang didukung oleh pangkalan data berorientasi dokumen serupa dengan operasi yang disediakan oleh pangkalan data jenis lainnya, dan walau istilah yang digunakan tidak sepenuhnya sama, umumnya operasi tersebut dikenal dengan istilah CRUD :

* **C**REATE (tulis atau buat, serupa dengan INSERT atau sisipkan).
* **R**EAD (kueri atau pengambilan data, serupa dengan FIND atau temukan).
* **U**PDATE (pembaruan data, serupa dengan EDIT atau sunting data).
* **D**ELETE (penghapusan data).

### Kunci (penanda)
Dokumen dalam basis data diakses menggunakan *kunci unik* yang mewakili dokumen tersebut. Kunci ini merupakan penanda sederhana (pengidentifikasi atau ID), yang umumnya berjenis data untaian, *[[Uniform Resource Identifier]]* (URI), atau *[[path]]* (jalur alamat penyimpanan). Kunci ini digunakan untuk mengambil dokumen dari pangkalan data. Biasanya, basis data mempertahankan indeks pada kunci tersebut guna mempercepat proses pengambilan dokumen. Dalam beberapa penerapan, kunci ini juga menjadi persyaratan untuk membuat atau memasukkan dokumen ke dalam basis data.

### Pengambilan data
Cirikhas utama dari basis data berorientasi dokumen adalah bahwa, selain pencarian sederhana berbasis kunci-ke-dokumen (*key-to-document*) untuk mengambil dokumen, basis data ini menyediakan API atau bahasa kueri yang memungkinkan pengguna mengambil dokumen berdasarkan isi (atau metadata). Misalnya, pengguna dapat menjalankan kueri untuk mengambil semua dokumen yang memiliki nilai tertentu pada suatu bidang. Kumpulan API kueri atau fitur bahasa kueri yang tersedia, serta kinerja yang diharapkan dari pelaksanaan kueri, dapat sangat bervariasi antara penarapan. Demikian pula, pilihan pengindeksan dan konfigurasi yang tersedia juga berbeda secara kentara tergantung pada penerapan pangkalan data yang digunakan.

Di sini terletak perbedaan utama antara penyimpanan dokumen (*document store*) dan penyimpanan pasangan nilai dan kunci (*key-value store*) menjadi jelas. Dalam penyimpanan nilai kunci, nilai yang disimpan bersifat *buram*, yang berarti bahwa sistem penyimpanan tidak dapat memahami atau menganalisis struktur internal maupun nilai dari data tersebut. Data hanya diperlakukan sebagai sekumpulan bita tanpa makna khusus bagi sistem, sehingga penyimpanan nilai kunci tidak dapat membedakan apakah nilai yang disimpan merupakan teks, angka, atau format data lainnya. Meskipun beberapa penyimpanan nilai kunci mungkin menyediakan sistem pencarian yang mirip dengan penyimpanan dokumen, pemahamannya terhadap pertubuhan dan struktur isi data tetap terbatas.

Sebaliknya, penyimpanan dokumen memanfaatkan *metadata* dalam dokumen untuk melakukan klasifikasi terhadap isi, memungkinkan sistem memahami bahwa suatu deretan angka adalah nomor telepon, sementara deretan lainnya adalah kode pos. Hal ini memungkinkan pencarian berbasis jenis data, misalnya mencari semua nomor telepon yang mengandung "555", tanpa secara keliru menyertakan kode pos "55555" dalam hasil pencarian.

### Penyuntingan
Basis data dokumen biasanya menyediakan beberapa mekanisme untuk memperbarui atau menyunting isi (atau metadata) suatu dokumen, baik dengan memungkinkan perubahan pada keseluruhan dokumen, atau pada bagian struktural individual dari dokumen.

### Pertubuhan
Penrapan pangkalan data dokumen menawarkan berbagai fungsi untuk mengatur dokumen, termasuk:

* *Collections*/Koleksi: kelompok dokumen, yang tergantung pada penerapannya, suatu dokumen dapat disimpan pada satu koleksi, atau dapat dibiarkan tanpa termasuk dalam koleksi,
* Tag dan metadata yang tidak terlihat: data tambahan di luar konten dokumen
* Hierarki direktori: kelompok dokumen yang disusun dalam struktur seperti pohon, biasanya berdasarkan jalur atau URI

Kadang kala gagasan pertubuhan ini bervariasi dalam hal seberapa besar penyajiannya yang logis dan fisik (misalnya pada cakram atau memori).

## Hubungan dengan pangkalan data lain

### Hubungan dengan penyimpanan nilai-kunci
Pangkalan data berorientasi dokumen adalah penyimpanan nilai-kunci yang bersifat khusus, yang termasuk dalam kategori basis data NoSQL. Dalam sistem penyimpanan nilai-kunci sederhana, isi dokumen tidak ditafsirkan oleh sistem, atau bersifat *buram*. Pangkalan data berorientasi dokumen menyediakan API atau bahasa kueri/pembaruan yang memperlihatkan kemampuan untuk melakukan kueri atau pembaruan berdasarkan struktur internal dalam *dokumen*. Perbedaan ini mungkin tidak terasa penting bagi pengguna yang tidak memerlukan API untuk kueri, pengambilan, atau penyuntingan yang lebih kaya, yang biasanya disediakan oleh basis data dokumen. Penyimpanan nilai kunci modern sering kali menyertakan fitur untuk bekerja dengan metadata, sehingga mengaburkan batasan antara penyimpanan nilai-kunci dan pangkalan data berbasis dokumen.

### Hubungan dengan mesin pencari
Beberapa sistem mesin pencari (alias sistem temu balik informasi) seperti Apache Solr dan Elasticsearch menyediakan cukup banyak operasi inti pada dokumen agar sesuai dengan pengertian pangkalan data berorientasi dokumen.

### Hubungan dengan pangkalan data relasional
Dalam pangkalan data relasional, data pertama-tama dikategorikan ke dalam sejumlah jenis data yang telah ditetapkan sebelumnya, dan tabel dibuat untuk menampung entri individual, atau rekaman, dari setiap tipe. Setiap tabel memiliki sejumlah bagian bidang, yang menentukan jenis data yang akan disimpan dalam setiap rekaman, sehingga semua rekaman dalam tabel memiliki struktur yang seragam. Pengurus pangkalan data menetapkan hubungan antara tabel dan memilih bidang tertentu yang diperkirakan akan sering digunakan dalam pencarian, lalu membuat indeks pada bidang tersebut guna meningkatkan efisiensi kueri.

Konsep utama dalam rancangan pangkalan data relasional adalah bahwa data yang mungkin berulang umumnya ditempatkan dalam tabelnya sendiri. Jika rekaman dalam tabel-tabel tersebut memiliki keterkaitan, maka sebuah kolom dipilih sebagai kunci asing untuk menghubungkan data di antara tabel yang memiliki hubungan. Pendekatan ini dikenal sebagai normalisasi pangkalan data.

Sebagai contoh, sebuah aplikasi buku alamat umumnya perlu menyimpan nama kontak, gambar pilihan, satu atau lebih nomor telepon, satu atau lebih alamat surat-menyurat, serta satu atau lebih alamat surel. Dalam pangkalan data relasional yang *kanonik*, tabel akan dibuat untuk masing-masing jenis data ini dengan bidang yang telah ditentukan sebelumnya. Misalnya, tabel **CONTACT** dapat mencakup kolom **FIRST_NAME**, **LAST_NAME**, dan **IMAGE**, sementara tabel **PHONE_NUMBER** dapat memiliki kolom **COUNTRY_CODE**, **AREA_CODE**, **PHONE_NUMBER**, dan **TYPE** (misalnya, rumah, kantor, dll.).

Tabel **PHONE_NUMBER** juga memiliki kolom kunci asing, yaitu **CONTACT_ID**, yang menyimpan ID unik yang diberikan kepada kontak saat pertama kali dibuat. Untuk mereka ulang data kontak secara lengkap, mesin pangkalan data menggunakan kunci asing untuk mencari butir terkait di antara tabel-tabel tersebut dan menyusun kembali informasi asli kontak.

Sebaliknya, dalam pangkalan data berorientasi dokumen, mungkin tidak ada struktur internal yang secara langsung sesuai dengan konsep tabel, dan bidang serta hubungan antardata yang umumnya tidak ditentukan sebelumnya. Sebagai gantinya, semua data yang terkait dengan suatu objek disimpan dalam satu dokumen dan dimasukkan ke dalam basis data sebagai satu entri.

Dalam contoh buku alamat, dokumen akan berisi nama kontak, gambar, serta seluruh informasi kontak dalam satu rekaman. Entri ini diakses menggunakan *kunci unik*, yang memungkinkan basis data mengambil dan mengembalikan dokumen tersebut ke aplikasi. Tidak diperlukan pengolahan tambahan untuk mengambil data terkait, karena seluruh informasi dikembalikan dalam satu objek sekaligus.

Perbedaan utama antara model berorientasi dokumen dan model relasional adalah bahwa dalam basis data dokumen, format data tidak ditentukan sebelumnya. Dalam banyak kasus, dokumen apa pun dapat disimpan dalam pangkalan data tanpa batasan format tertentu, dan struktur dokumen tersebut dapat berubah kapan pun. Jika, misalnya, seseorang ingin menambahkan **COUNTRY_FLAG** ke dalam data **CONTACT**, field ini dapat langsung ditambahkan ke dokumen baru saat dimasukkan ke dalam pangkalan data, tanpa memengaruhi pangkalan data itu sendiri atau dokumen yang sudah ada sebelumnya.

Untuk mempermudah pengambilan informasi, sistem berpangkalkan dokumen umumnya memungkinkan pengurus memberikan petunjuk kepada pangkalan data untuk mencari jenis informasi tertentu, yang bekerja serupa dengan indeks dalam pangkalan data relasional. Sebagian besar sistem juga menyediakan kemampuan untuk menambahkan metadata tambahan di luar isi dokumen itu sendiri. Misalnya, entri dapat diberi *tag* sebagai bagian dari buku alamat, sehingga memungkinkan pengembang mengambil semua data terkait, seperti "seluruh entri dalam buku alamat". Pendekatan ini menawarkan fungsi yang mirip dengan tabel dalam pangkalan data relasional, tetapi memisahkan konsep kategori data dari penerapan fisiknya dalam bentuk tabel.

Dalam model relasional yang ternormalisasi secara klasik, objek dalam basis data diwakili sebagai baris data terpisah tanpa struktur bawaan, selain yang diberikan saat data diambil. Pendekatan ini dapat menimbulkan masalah ketika mencoba menerjemahkan objek dalam pemrograman ke dalam baris pangkalan data dan sebaliknya, yang dikenal dengan istilah *object-relational impedance mismatch*.

Sebaliknya, penyimpan dokumen lebih selaras—atau dalam beberapa kasus, langsung sesuai—dengan cara objek dalam pemrograman diwakili dalam penyimpanan. Oleh karena itu, sistem ini sering dipasarkan dengan istilah NoSQL.

## Catatan kaki

## Lihat juga

* Analisis data
* Protokol Akses Pesan Internet (IMAP)
* Bahasa pemrograman NoSQL
* Pangkalan data daring
* Basis data relasional
* Sistem manajemen konten

## Referensi


## Bacaan lebih lanjut

* Assaf Arkin. (2007, September 20). Read Consistency: Dumb Databases, Smart Services.