Jawaban:
Basis data berorientasi kolom (= penyimpanan data kolom) menyimpan data kolom tabel per kolom pada disk, sedangkan basis data berorientasi baris menyimpan data baris tabel demi baris.
Ada dua keuntungan utama menggunakan database berorientasi kolom dibandingkan dengan database berorientasi baris. Keuntungan pertama berkaitan dengan jumlah data yang perlu dibaca seseorang jika kita melakukan operasi hanya pada beberapa fitur. Pertimbangkan permintaan sederhana:
SELECT correlation(feature2, feature5)
FROM records
Seorang pelaksana tradisional akan membaca seluruh tabel (yaitu semua fitur):
Sebagai gantinya, menggunakan pendekatan berbasis kolom kami, kami hanya perlu membaca kolom yang tertarik:
Keuntungan kedua, yang juga sangat penting untuk database besar, adalah bahwa penyimpanan berbasis kolom memungkinkan kompresi yang lebih baik, karena data dalam satu kolom tertentu memang homogen daripada di semua kolom.
Kelemahan utama dari pendekatan berorientasi kolom adalah bahwa memanipulasi (mencari, memperbarui atau menghapus) seluruh baris yang diberikan tidak efisien. Namun situasi ini harus jarang terjadi dalam database untuk analitik ("pergudangan"), yang berarti sebagian besar operasi hanya-baca, jarang membaca banyak atribut dalam tabel yang sama dan menulis hanya ditambahkan.
Beberapa RDMS menawarkan opsi mesin penyimpanan berorientasi kolom. Sebagai contoh, PostgreSQL secara native tidak memiliki opsi untuk menyimpan tabel dengan cara berbasis kolom, tetapi Greenplum telah membuat sumber tertutup (DBMS2, 2009). Menariknya, Greenplum juga berada di belakang perpustakaan open-source untuk analisis in-database yang dapat diukur, MADlib (Hellerstein et al., 2012), yang bukan kebetulan. Baru-baru ini, CitusDB, sebuah startup yang bekerja pada database analitik berkecepatan tinggi, merilis ekstensi toko kolumnar open-source mereka sendiri untuk PostgreSQL, CSTORE (Miller, 2014). Sistem Google untuk pembelajaran mesin skala besar Sibyl juga menggunakan format data berorientasi kolom (Chandra et al., 2010). Tren ini mencerminkan meningkatnya minat terhadap penyimpanan berorientasi kolom untuk analitik skala besar. Stonebraker et al. (2005) lebih lanjut membahas kelebihan DBMS berorientasi kolom.
Dua kasus penggunaan konkret: Bagaimana kebanyakan dataset untuk pembelajaran mesin skala besar disimpan?
(sebagian besar jawabannya berasal dari Lampiran C dari: BeatDB: Sebuah pendekatan ujung ke ujung untuk mengungkap arti-penting dari kumpulan data sinyal besar-besaran. Franck Dernoncourt, SM, tesis, MIT Dept of EECS )
Itu tergantung pada apa yang Anda lakukan.
Toko kolom memiliki dua manfaat utama:
Namun mereka juga memiliki kekurangan:
Penyimpanan kolom sangat populer untuk OLAP alias "analytics bodoh" (Michael Stonebraker) dan tentu saja untuk preprocessing di mana Anda mungkin memang tertarik untuk membuang seluruh kolom (tetapi Anda harus memiliki data terstruktur terlebih dahulu - Anda tidak menyimpan JSON di kolom kolom) format). Karena tata letak kolom sangat bagus untuk misalnya menghitung berapa banyak apel yang telah Anda jual minggu lalu.
Untuk sebagian besar kasus penggunaan ilmiah / data sains, basis data array tampaknya merupakan cara yang harus dilakukan (ditambah, tentu saja, data input tidak terstruktur). Misalnya SciDB dan RasDaMan.
Dalam banyak kasus (misalnya pembelajaran mendalam), matriks dan array adalah tipe data yang Anda butuhkan, bukan kolom. MapReduce dll masih dapat berguna dalam preprocessing, tentu saja. Mungkin bahkan data kolom (tetapi basis data array biasanya mendukung kompresi seperti kolom juga).
Saya belum pernah menggunakan basis data kolom, tapi saya sudah menggunakan format file sumber terbuka berbentuk kolom yang disebut Parket, dan saya pikir manfaatnya mungkin sama - pemrosesan data lebih cepat ketika Anda hanya perlu meminta sebagian kecil dari besar jumlah kolom. Saya memiliki kueri yang berjalan pada sekitar 50 terabyte file Avro (format file berorientasi baris) dengan 673 kolom yang memakan waktu sekitar satu setengah jam pada 140 node Hadoop cluster. Dengan Parket, permintaan yang sama membutuhkan waktu 22 menit karena saya hanya membutuhkan 5 kolom.
Jika Anda memiliki sejumlah kecil kolom atau menggunakan sebagian besar kolom Anda, saya tidak berpikir database kolom akan membuat banyak perbedaan vs berorientasi baris karena pada dasarnya Anda masih harus memindai semua data Anda. Saya percaya basis data kolom menyimpan kolom secara terpisah sedangkan basis data berorientasi baris menyimpan baris secara terpisah. Permintaan Anda akan lebih cepat setiap kali Anda dapat membaca lebih sedikit data dari disk.
Tautan ini menjelaskan lebih detail.
Catatan: Ini pertanyaan saya, dan saya sangat berterima kasih atas jawaban yang bagus di sini, yang membantu saya memahami konsepnya.
Jadi, saya akan menjelaskan konsep dengan cara yang saya mengerti:
Secara umum, data dalam database disimpan dalam memori dalam format berikut:
Pertimbangkan datum ini:
X1 X2
1 0.7091409 -1.4061361
2 -1.1334614 -0.1973846
3 2.3343391 -0.4385071
Di toko berbasis baris relasional, disimpan seperti ini:
1, 0.7091409, -1.4061361, 2, -1.1334614, -0.1973846, 3, 2.3343391, -0.4385071
dalam bentuk baris.
Di toko kolom, itu akan disimpan seperti ini:
1, 2, 3, 0.7091409 ,-1.1334614, 2.3343391, -1.4061361, -0.1973846, -0.4385071
dalam bentuk kolom.
Jadi, apa artinya ini?
Ini berarti bahwa penyisipan (dan pembaruan) dan penghapusan cepat di penyimpanan kolom berbasis baris karena itu hanya menghilangkan beberapa nilai terakhir atau beberapa nilai pertama. Namun, ini bukan kasus di toko kolom karena nilai di setiap toko blok perlu dihapus.
Namun, ketika ada kebutuhan untuk agregat kolom dan operasi, toko-toko kolom memiliki keunggulan atas rekan-rekan mereka yang berbasis baris, karena mereka disimpan berdasarkan kolom, dan sebagai hasilnya, mengakses masing-masing kolom sangat mudah.