Masalah skalabilitas apa yang Anda temui menggunakan penyimpanan data NoSQL? [Tutup]


189

NoSQL mengacu pada penyimpanan data non-relasional yang tidak sesuai dengan riwayat basis data relasional dan jaminan ACID. Toko data NoSQL open source yang populer meliputi:

  • Cassandra (tabel, ditulis dalam Java, digunakan oleh Cisco, WebEx, Digg, Facebook, IBM, Mahalo, Rackspace, Reddit dan Twitter)
  • CouchDB (dokumen, ditulis dalam bahasa Erlang, digunakan oleh BBC dan Engine Yard)
  • Dynomite (nilai kunci, ditulis dalam bahasa Erlang, digunakan oleh Powerset)
  • HBase (nilai kunci, ditulis dalam Java, digunakan oleh Bing)
  • Hypertable (tabel, ditulis dalam C ++, digunakan oleh Baidu)
  • Kai (nilai kunci, ditulis dalam bahasa Erlang)
  • MemcacheDB (nilai kunci, ditulis dalam C, digunakan oleh Reddit)
  • MongoDB (dokumen, ditulis dalam C ++, digunakan oleh Electronic Arts, Github, NY Times dan Sourceforge)
  • Neo4j (grafik, ditulis dalam bahasa Jawa, digunakan oleh beberapa universitas Swedia)
  • Project Voldemort (nilai kunci, ditulis dalam Java, digunakan oleh LinkedIn)
  • Redis (nilai kunci, ditulis dalam C, digunakan oleh Craigslist, Engine Yard, dan Github)
  • Riak (nilai kunci, ditulis dalam bahasa Erlang, digunakan oleh Comcast dan Mochi Media)
  • Ringo (nilai kunci, ditulis dalam bahasa Erlang, digunakan oleh Nokia)
  • Scalaris (nilai kunci, ditulis dalam bahasa Erlang, digunakan oleh OnScale)
  • Terrastore (dokumen, ditulis dalam bahasa Jawa)
  • ThruDB (dokumen, ditulis dalam C ++, digunakan oleh JunkDepot.com)
  • Tokyo Cabinet / Tokyo Tyrant (nilai kunci, ditulis dalam C, digunakan oleh Mixi.jp (situs jejaring sosial Jepang))

Saya ingin tahu tentang masalah khusus Anda - pembaca SO - telah dipecahkan menggunakan penyimpanan data dan penyimpanan data NoSQL apa yang Anda gunakan.

Pertanyaan:

  • Masalah skalabilitas apa yang Anda gunakan untuk menyelesaikan penyimpanan data NoSQL?
  • Penyimpanan data NoSQL apa yang Anda gunakan?
  • Database apa yang Anda gunakan sebelum beralih ke penyimpanan data NoSQL?

Saya mencari pengalaman langsung, jadi tolong jangan menjawab kecuali Anda memilikinya.


6
bignose: Saya melihat karunia sebagai tip reputasi 550 saya yang diberikan kepada orang yang memberikan jawaban paling informatif :-)
knorv

1
Jangan lupa solusi seperti GemStone / S - toko objek Smalltalk.
Randal Schwartz

2
Jangan lewatkan OrientDB ( orientechnologies.com )
Lvca

Jawaban:


49

Saya telah mengalihkan sub proyek kecil dari MySQL ke CouchDB, untuk dapat menangani beban. Hasilnya luar biasa.

Sekitar 2 tahun yang lalu, kami telah merilis perangkat lunak yang ditulis sendiri di http://www.ubuntuusers.de/ (yang mungkin merupakan situs web komunitas Linux Jerman terbesar). Situs ini ditulis dalam Python dan kami telah menambahkan middleware WSGI yang dapat menangkap semua pengecualian dan mengirimkannya ke situs web kecil bertenaga MySQL lainnya. Situs web kecil ini menggunakan hash untuk menentukan bug yang berbeda dan menyimpan jumlah kejadian dan kejadian terakhir juga.

Sayangnya, tak lama setelah rilis, situs web traceback-logger tidak merespons lagi. Kami memiliki beberapa masalah penguncian dengan db produksi situs utama kami yang melemparkan pengecualian hampir setiap permintaan, serta beberapa bug lainnya, yang belum kami eksplorasi selama tahap pengujian. Cluster server situs utama kami, yang disebut traceback-logger submit page beberapa k kali per detik. Dan itu terlalu banyak untuk server kecil yang meng-host traceback logger (itu sudah server lama, yang hanya digunakan untuk tujuan pengembangan).

Pada saat ini CouchDB agak populer, jadi saya memutuskan untuk mencobanya dan menulis traceback-logger kecil dengannya. Logger baru hanya terdiri dari satu file python, yang menyediakan daftar bug dengan opsi penyortiran dan filter serta halaman kirim. Dan di latar belakang saya sudah memulai proses CouchDB. Perangkat lunak baru merespons sangat cepat untuk semua permintaan dan kami dapat melihat laporan bug otomatis dalam jumlah besar.

Satu hal yang menarik adalah, bahwa solusi sebelumnya, berjalan pada server khusus yang lama, di mana situs berbasis CouchDB baru di sisi lain hanya berjalan pada instance xen bersama dengan sumber daya yang sangat terbatas. Dan saya bahkan belum menggunakan kekuatan dari penyimpanan nilai kunci untuk mengukur secara horizontal. Kemampuan CouchDB / Erlang OTP untuk menangani permintaan bersamaan tanpa mengunci apa pun sudah cukup untuk melayani kebutuhan.

Sekarang, logger CouchDB-traceback yang ditulis dengan cepat masih berjalan dan merupakan cara yang bermanfaat untuk menjelajahi bug di situs web utama. Bagaimanapun, sekitar sebulan sekali database menjadi terlalu besar dan proses CouchDB terbunuh. Tapi kemudian, perintah compact-db dari CouchDB mengurangi ukuran dari beberapa GB menjadi beberapa KB lagi dan basis data sudah naik dan berjalan kembali (mungkin saya harus mempertimbangkan untuk menambahkan cronjob di sana ... 0o).

Dalam ringkasan, CouchDB jelas merupakan pilihan terbaik (atau setidaknya pilihan yang lebih baik daripada MySQL) untuk sub proyek ini dan melakukan tugasnya dengan baik.


Saya pikir saya membaca di suatu tempat bahwa Anda dapat membuat couchdb melakukan kompresi secara otomatis ketika data yang tidak terkompresi mencapai tingkat tertentu ...
Ztyx

50

Proyek saya saat ini sebenarnya.

Menyimpan 18.000 objek dalam struktur yang dinormalisasi: 90.000 baris di 8 tabel berbeda. Butuh waktu 1 menit untuk mengambil dan memetakannya ke model objek Java kami, semuanya sudah diindeks dengan benar, dll.

Menyimpannya sebagai pasangan kunci / nilai menggunakan representasi teks ringan: 1 tabel, 18.000 baris, 3 detik untuk mengambil semuanya dan merekonstruksi objek Java.

Dalam istilah bisnis: opsi pertama tidak layak. Opsi kedua berarti aplikasi kami berfungsi.

Detail teknologi: berjalan di MySQL untuk SQL dan NoSQL! Tetap menggunakan MySQL untuk mendukung transaksi yang baik, kinerja, dan rekam jejak yang terbukti untuk tidak merusak data, penskalaan yang cukup baik, dukungan untuk pengelompokan dll.

Model data kami di MySQL sekarang hanya bidang kunci (bilangan bulat) dan bidang "nilai" besar: pada dasarnya hanya bidang TEKS besar.

Kami tidak mengikuti salah satu pemain baru (CouchDB, Cassandra, MongoDB, dll) karena meskipun mereka masing-masing menawarkan fitur / kinerja hebat dalam hak mereka sendiri, selalu ada kekurangan untuk keadaan kita (mis. Dukungan Java yang hilang / belum matang).

Manfaat ekstra dari (ab) menggunakan MySQL - bit dari model kami yang melakukan pekerjaan secara relasional dapat dengan mudah dihubungkan ke data penyimpanan kunci / nilai kami.

Pembaruan: inilah contoh bagaimana kami merepresentasikan konten teks, bukan domain bisnis kami yang sebenarnya (kami tidak bekerja dengan "produk") karena bos saya akan menembak saya, tetapi menyampaikan gagasannya, termasuk aspek rekursif (satu entitas, disini suatu produk, "mengandung" orang lain). Mudah-mudahan sudah jelas bagaimana dalam struktur yang dinormalisasi ini bisa menjadi beberapa tabel, misalnya bergabung dengan produk dengan berbagai rasa, yang terkandung produk lain, dll

Name=An Example Product
Type=CategoryAProduct
Colour=Blue
Size=Large
Flavours={nice,lovely,unpleasant,foul}
Contains=[
Name=Product2
Type=CategoryBProduct
Size=medium
Flavours={yuck}
------
Name=Product3
Type=CategoryCProduct
Size=Small
Flavours={sublime}
]

2
Apa di mana dua database yang dimaksud (sql dan NoSQL)?
mavnn

Keduanya adalah MySQL (saya sudah mengedit respons saya untuk memberikan info ini, saya lupa awalnya). DB yang sama, hasil kinerja yang sangat berbeda dari pendekatan SQL dan NoSQL. Sangat senang dengan pendekatan kunci / nilai dengan MySQL.
Brian

5
Hai Brian, mungkinkah untuk memberikan contoh skema skema Anda yang dinormalisasi dan contoh pasangan "nilai" kunci-nilai? Kami juga menghadapi masalah kinerja dengan struktur yang dinormalisasi dan saat ini sedang mempertimbangkan dua opsi: baik mendenormalisasi tabel kami atau bergerak menuju penyimpanan data NoSQL. Karena biaya lisensi dan pemeliharaan yang sudah kami bayarkan, kami ingin memanfaatkan tumpukan Oracle kami saat ini dan karena itu, condong ke arah solusi RDBMS yang dinormalisasi. Contohnya akan menarik!
tth

@Brian: Karena 4 dari contoh ditulis DI java, fitur dukungan Java apa yang hilang atau belum dewasa? Saya tidak punya pengalaman di bidang ini, tapi itu agak mengejutkan bagi saya.
Jimmy

tthong - tidak yakin bagaimana memasukkan skema normalisasi secara ringkas tetapi saya telah menambahkan contoh bagaimana kami menyimpan konten kami dalam satu bidang teks. Ini sedikit dibuat-buat, saya tidak bisa memasukkan contoh nyata sebagai bos saya pergi balistik sehingga "masalah" dengan "model data" ini kemungkinan besar karena alasan itu. Saya akan menyarankan benchmarking baik Oracle dan beberapa solusi lainnya, tetapi jika organisasi Anda memiliki keahlian Oracle yang baik, DBA, cadangan, dll, itu bisa menjadi pilihan yang sangat baik untuk dipertimbangkan
Brian

22

Highscalability.com Todd Hoff memiliki banyak cakupan NoSQL, termasuk beberapa studi kasus.

DBMS kolom Vertica komersial mungkin sesuai dengan tujuan Anda (meskipun mendukung SQL): sangat cepat dibandingkan dengan DBMS relasional tradisional untuk kueri analitik. Lihat Stonebraker, kertas CACM baru - baru ini membandingkan Vertica dengan pengurangan peta.

Pembaruan: Dan Cassandra yang dipilih Twitter atas beberapa yang lain, termasuk HBase, Voldemort, MongoDB, MemcacheDB, Redis, dan HyperTable.

Pembaruan 2: Rick Cattell baru saja menerbitkan perbandingan beberapa sistem NoSQL di Toko Data Kinerja Tinggi . Dan highscalability.com mengambil kertas Rick ada di sini .


3
Anda juga harus membaca cacm.acm.org/magazine/2010/1/…
a'r

@ar: Terima kasih, itu tautan yang bagus. Orang-orang Vertica telah menghasilkan banyak kontroversi.
Jim Ferrans

8

Kami memindahkan sebagian data kami dari mysql ke mongodb, bukan untuk skalabilitas tetapi lebih karena lebih cocok untuk file dan data non-tabular.

Dalam produksi kami saat ini menyimpan:

  • 25 ribu file (60GB)
  • 130 juta "dokumen" lainnya (350GB)

dengan omset harian sekitar 10GB.

Basis data ditempatkan dalam konfigurasi "berpasangan" pada dua node (6x450GB sas raid10) dengan klien apache / wsgi / python menggunakan mongodb python api (pymongo). Pengaturan disk mungkin berlebihan tetapi itulah yang kami gunakan untuk mysql.

Terlepas dari beberapa masalah dengan pymongo threadpools dan sifat pemblokiran server mongodb, ini merupakan pengalaman yang baik.


Bisakah Anda menguraikan sedikit tentang masalah yang Anda sebutkan?
felixfbecker

5

Saya minta maaf karena melanggar teks tebal Anda, karena saya tidak memiliki pengalaman langsung, tetapi serangkaian posting blog ini adalah contoh yang baik untuk menyelesaikan masalah dengan CouchDB.

CouchDB: Studi Kasus

Pada dasarnya, aplikasi textme menggunakan CouchDB untuk menangani masalah data yang meledak. Mereka menemukan bahwa SQL terlalu lambat untuk menangani sejumlah besar data arsip, dan memindahkannya ke CouchDB. Ini adalah bacaan yang sangat baik, dan ia membahas seluruh proses mencari tahu masalah apa yang bisa diselesaikan CouchDB dan bagaimana mereka akhirnya menyelesaikannya.


5

Kami telah memindahkan beberapa data yang kami gunakan untuk menyimpan di Postgresql dan Memcached ke Redis . Toko nilai utama jauh lebih cocok untuk menyimpan data objek hierarkis. Anda dapat menyimpan data gumpalan jauh lebih cepat dan dengan waktu dan usaha pengembangan yang jauh lebih sedikit daripada menggunakan ORM untuk memetakan gumpalan Anda ke RDBMS.

Saya memiliki klien open source c # redis yang memungkinkan Anda menyimpan dan mengambil objek POCO dengan 1 baris:

var customers = redis.Lists["customers"]; //Implements IList<Customer>
customers.Add(new Customer { Name = "Mr Customer" });

Toko nilai utama juga jauh lebih mudah untuk 'ditingkatkan' karena Anda dapat menambahkan server baru dan kemudian mempartisi beban Anda secara merata untuk memasukkan server baru. Yang penting, tidak ada server pusat yang akan membatasi skalabilitas Anda. (meskipun Anda masih memerlukan strategi untuk hashing yang konsisten untuk mendistribusikan permintaan Anda).

Saya menganggap Redis sebagai 'file teks terkelola' pada steroid yang menyediakan akses cepat, konkuren dan atom untuk banyak klien, jadi apa pun yang saya gunakan untuk menggunakan file teks atau basis data tertanam untuk saya sekarang menggunakan Redis. mis. Untuk mendapatkan log kesalahan bergulir gabungan waktu-nyata untuk semua layanan kami (yang terkenal merupakan tugas yang sulit bagi kami), sekarang diselesaikan dengan hanya beberapa baris dengan hanya menunggu kesalahan di daftar sisi server Redis dan kemudian memangkas daftar sehingga hanya 1000 yang terakhir disimpan, misalnya:

var errors = redis.List["combined:errors"];
errors.Insert(0, new Error { Name = ex.GetType().Name, Message = ex.Message, StackTrace = ex.StackTrace});
redis.TrimList(errors, 1000);

4

Saya tidak punya pengalaman langsung, tetapi saya menemukan entri blog ini cukup menarik.


3

Saya menemukan upaya untuk memetakan objek domain perangkat lunak (misalnya aSalesOrder, aCustomer ...) ke basis data relasional dua dimensi (baris dan kolom) membutuhkan banyak kode untuk menyimpan / memperbarui dan kemudian lagi untuk membuat instance objek domain dari beberapa tabel . Belum lagi hit kinerja memiliki semua bergabung, semua disk membaca ... hanya untuk melihat / memanipulasi objek domain seperti pesanan penjualan atau catatan pelanggan.

Kami telah beralih ke Object Database Management Systems (ODBMS). Mereka berada di luar kemampuan sistem noSQL yang terdaftar. The GemStone / S (untuk Smalltalk) adalah contoh seperti itu. Ada solusi ODBMS lain yang memiliki driver untuk banyak bahasa. Manfaat utama bagi pengembang, hierarki kelas Anda secara otomatis adalah skema basis data, subkelas, dan semuanya. Cukup gunakan bahasa berorientasi objek Anda untuk membuat objek bertahan ke database. Sistem ODBMS memberikan integritas transaksi tingkat ACID, sehingga itu juga akan berfungsi dalam sistem keuangan.


3

Saya beralih dari MySQL (InnoDB) ke cassandra untuk sistem M2M, yang pada dasarnya menyimpan sensor rangkaian waktu untuk setiap perangkat. Setiap data diindeks oleh (device_id, date) dan (device_id, type_of_sensor, date). Versi MySQL berisi 20 juta baris.

MySQL:

  • Pengaturan dalam sinkronisasi master-master. Beberapa masalah muncul di sekitar hilangnya sinkronisasi . Itu menegangkan dan terutama pada awalnya bisa memakan waktu berjam-jam untuk memperbaikinya.
  • Waktu penyisipan bukan masalah, tetapi kueri membutuhkan lebih banyak memori saat data bertambah. Masalahnya adalah indeks dianggap sebagai keseluruhan. Dalam kasus saya, saya hanya menggunakan bagian indeks yang sangat tipis yang perlu dimuat dalam memori (hanya beberapa persen dari perangkat yang sering dipantau dan itu pada data terbaru).
  • Itu sulit untuk cadangan . Rsync tidak dapat melakukan backup cepat pada file tabel InnoDB besar.
  • Dengan cepat menjadi jelas bahwa tidak mungkin untuk memperbarui skema tabel berat , karena butuh terlalu banyak waktu (jam).
  • Mengimpor data memakan waktu berjam-jam (bahkan ketika pengindeksan dilakukan pada akhirnya). Rencana penyelamatan terbaik adalah untuk selalu menyimpan beberapa salinan dari basis data (file data + log).
  • Pindah dari satu perusahaan hosting ke yang lain benar-benar masalah besar . Replikasi harus ditangani dengan sangat hati-hati.

Cassandra:

  • Bahkan lebih mudah untuk menginstal daripada MySQL.
  • Membutuhkan banyak RAM. Sebuah instance 2GB tidak dapat membuatnya berjalan di versi pertama, sekarang ia dapat bekerja pada instance 1GB tapi itu bukan ide (terlalu banyak data memerah). Memberikannya 8GB sudah cukup dalam kasus kami.
  • Setelah Anda memahami bagaimana Anda mengatur data Anda, menyimpan itu mudah. Meminta sedikit lebih rumit. Tapi begitu Anda menyiasatinya, itu sangat cepat (Anda tidak bisa melakukan kesalahan kecuali Anda benar-benar mau).
  • Jika langkah sebelumnya dilakukan dengan benar, itu dan tetap super cepat.
  • Sepertinya data disusun untuk di-backup. Setiap data baru ditambahkan sebagai file baru. Saya pribadi, tetapi itu bukan hal yang baik, siram data setiap malam dan sebelum setiap shutdown (biasanya untuk upgrade) sehingga memulihkan membutuhkan waktu lebih sedikit, karena kami memiliki lebih sedikit log untuk dibaca. Itu tidak membuat banyak file mereka dipadatkan.
  • Mengimpor data sangat cepat. Dan semakin banyak host yang Anda miliki semakin cepat. Mengekspor dan mengimpor gigabyte data bukan masalah lagi.
  • Tidak memiliki skema adalah hal yang sangat menarik karena Anda dapat membuat data Anda berevolusi untuk mengikuti kebutuhan Anda. Yang mungkin berarti memiliki versi data Anda yang berbeda pada saat yang sama pada keluarga kolom yang sama.
  • Menambahkan host itu mudah (tidak cepat), tetapi saya belum melakukannya pada pengaturan multi-pusat data.

Catatan: Saya juga menggunakan elasticsearch (berorientasi pada dokumen berdasarkan lucene) dan saya pikir itu harus dianggap sebagai basis data NoSQL. Ini didistribusikan, dapat diandalkan dan seringkali cepat (beberapa permintaan kompleks dapat berkinerja sangat buruk).


2

Bukan saya. Saya ingin menggunakan toko nilai kunci sederhana dan gratis yang dapat saya hubungi dalam proses tetapi hal seperti itu tidak ada afaik pada platform Windows. Sekarang saya menggunakan Sqlite tetapi saya ingin menggunakan sesuatu seperti Kabinet Tokyo. BerkeleyDB memiliki lisensi "masalah".

Namun jika Anda ingin menggunakan OS Windows pilihan Anda dari database NoSQL terbatas. Dan tidak selalu ada penyedia C #

Saya memang mencoba MongoDB dan itu 40 kali lebih cepat dari Sqlite, jadi mungkin saya harus menggunakannya. Tapi saya masih berharap untuk solusi proses yang sederhana.


3
Penyedia AC # sebagian besar tidak relevan, karena sistem ini TIDAK memiliki antarmuka yang terlihat seperti database konvensional (karenanya "NoSQL") sehingga antarmuka ADO.NET akan menjadi pasak bundar ke dalam lubang persegi.
MarkR

2
Memang Anda tidak membutuhkan penyedia yang mengimplementasikan antarmuka ADO.NET tetapi Anda masih membutuhkan beberapa jenis driver / penyedia untuk memasangkan antara db dan .NET. Ada satu untuk MongoDB tetapi belum sempurna. Penanganan pengecualian misalnya perlu ditingkatkan.
Theo

Saya memiliki open source c # client untuk redis @ code.google.com/p/servicestack/wiki/ServiceStackRedis memungkinkan Anda untuk menyimpan 'mengetik POCO' sebagai gumpalan teks 'dan menyediakan antarmuka IList <T> dan ICollection <T> untuk server redis daftar dan set di samping, dll.
mythz

2

Saya menggunakan redis untuk menyimpan pesan logging di mesin. Itu sangat mudah diimplementasikan, dan sangat berguna. Redis benar-benar batu


2

Kami mengganti database postgres dengan database dokumen CouchDB karena tidak memiliki skema tetap adalah keuntungan yang kuat bagi kami. Setiap dokumen memiliki sejumlah variabel indeks yang digunakan untuk mengakses dokumen itu.


1

Saya telah menggunakan Couchbase di masa lalu dan kami menemui masalah penyeimbangan dan sejumlah masalah lainnya. Saat ini saya menggunakan Redis di beberapa proyek produksi. Saya menggunakan redislabs.com yang merupakan layanan terkelola untuk Redis yang menangani penskalaan kluster Redis Anda. Saya telah menerbitkan video tentang kegigihan objek di blog saya di http://thomasjaeger.wordpress.com yang menunjukkan cara menggunakan Redis dalam model penyedia dan cara menyimpan objek C # ke Redis. Lihatlah.


Saya tahu ini sudah lama, tetapi masalah apa dalam menyeimbangkan yang Anda miliki secara khusus?
Pelihat

1

Saya akan mendorong siapa pun yang membaca ini untuk mencoba Couchbase sekali lagi sekarang 3.0 sudah di luar pintu. Ada lebih dari 200 fitur baru untuk pemula. Kinerja, ketersediaan, skalabilitas, dan fitur manajemen yang mudah dari Couchbase Server menjadikannya basis data yang sangat fleksibel dan sangat tersedia. UI manajemen adalah bawaan dan API secara otomatis menemukan node cluster sehingga tidak perlu penyeimbang beban dari aplikasi ke DB. Meskipun kami tidak memiliki layanan terkelola saat ini, Anda dapat menjalankan couchbase pada hal-hal seperti AWS, RedHat Gears, Cloudera, Rackspace, Wadah Docker seperti CloudSoft, dan banyak lagi. Mengenai penyeimbangan kembali itu tergantung pada apa yang Anda maksud secara spesifik tetapi Couchbase tidak secara otomatis menyeimbangkan kembali setelah kegagalan simpul, seperti yang dirancang, tetapi seorang administrator dapat mengatur failover otomatis untuk kegagalan simpul pertama dan menggunakan API kami, Anda juga dapat memperoleh akses ke vbuckets replika untuk membaca sebelum membuatnya aktif atau menggunakan RestAPI, Anda dapat menerapkan failover dengan alat pemantauan. Ini adalah kasus khusus tetapi mungkin dilakukan.

Kita cenderung untuk tidak menyeimbangkan kembali dalam hampir semua mode apa pun kecuali node benar-benar offline dan tidak pernah kembali atau node baru siap untuk diseimbangkan secara otomatis. Berikut adalah beberapa panduan untuk membantu siapa saja yang tertarik melihat apa salah satu dari database NoSQL yang paling berkinerja tinggi.

  1. Couchbase Server 3.0
  2. Panduan Administrasi
  3. API SISA
  4. Panduan Pengembang

Terakhir, saya juga mendorong Anda untuk memeriksa N1QL untuk kueri terdistribusi:

  1. Tutorial N1QL
  2. Panduan N1QL

Terima kasih telah membaca dan beri tahu saya atau orang lain jika Anda membutuhkan lebih banyak bantuan!

Austin


0

Saya telah menggunakan Vertica di masa lalu. Ini bergantung pada kompresi kolom & mempercepat disk membaca dan menurunkan kebutuhan penyimpanan untuk memaksimalkan perangkat keras Anda. Pemuatan data yang lebih cepat dan konkurensi yang lebih tinggi memungkinkan Anda menyajikan data analitik kepada lebih banyak pengguna dengan latensi minimum.

Sebelumnya, kami meminta database Oracle yang memiliki milyaran catatan & kinerjanya sangat tidak optimal. Permintaan membutuhkan 8 hingga 12 untuk dijalankan, bahkan setelah dioptimalkan dengan SSD. Karenanya, kami merasa perlu menggunakan basis data analitik yang dioptimalkan untuk membaca yang lebih cepat. Dengan Vertica Clusters di belakang lapisan lean service, kami dapat menjalankan API dengan kinerja sub-detik.

Vertica menyimpan data dalam proyeksi dalam format yang mengoptimalkan eksekusi query. Mirip dengan pandangan terwujud, proyeksi menyimpan set hasil pada disk atau SSD daripada menghitungnya setiap kali digunakan dalam kueri. Proyeksi memberikan manfaat berikut:

  1. Kompres dan enkode data untuk mengurangi ruang penyimpanan.
  2. Sederhanakan distribusi di seluruh kluster basis data.
  3. Memberikan ketersediaan dan pemulihan tinggi.

Vertica mengoptimalkan database dengan mendistribusikan data lintas cluster menggunakan Segmentasi.

  1. Segmentasi menempatkan sebagian data pada sebuah node.
  2. Ini mendistribusikan data secara merata pada semua node. Dengan demikian, setiap node melakukan bagian dari proses kueri.
  3. Kueri berjalan di cluster dan setiap node menerima rencana kueri.
  4. Hasil kueri dikumpulkan dan digunakan untuk membuat output.

Untuk lebih lanjut, silakan merujuk ke dokumentasi Vertica @ https://www.vertica.com/knowledgebase/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.