Apakah SSD mengurangi kegunaan Basis Data

28

Saya hanya mendengar tentang Robert Martin hari ini, dan sepertinya dia adalah tokoh terkemuka di dunia perangkat lunak, jadi saya tidak bermaksud judul saya muncul seolah-olah itu adalah umpan klik atau saya meletakkan kata-kata di mulutnya, tetapi ini hanya bagaimana saya menafsirkan apa yang saya dengar darinya dengan pengalaman dan pemahaman saya yang terbatas.

Saya menonton video hari ini (pada arsitektur perangkat lunak), pada ceramah oleh Robert C. Martin, dan pada paruh kedua video, topik basis data adalah fokus utama.

Dari pemahaman saya tentang apa yang dia katakan, sepertinya dia mengatakan bahwa SSD akan mengurangi kegunaan database ( jauh ).

Untuk menjelaskan bagaimana saya sampai pada interpretasi ini:

Dia membahas bagaimana dengan HDD / disk berputar, pengambilan data lambat. Namun, hari ini kami menggunakan SSD, katanya. Dia mulai dengan "RAM akan datang" dan kemudian melanjutkan dengan menyebutkan disk RAM, tetapi kemudian mengatakan dia tidak bisa menyebutnya RAM disk, jadi resor hanya mengatakan RAM. Jadi dengan RAM, kita tidak perlu indeks, karena setiap byte membutuhkan waktu yang sama untuk mendapatkannya. ( paragraf ini diparafrasekan oleh saya )

Jadi, dia menyarankan RAM (seperti dalam memori komputer) sebagai pengganti DB (seperti yang saya tafsirkan pernyataannya) tidak masuk akal karena itu seperti mengatakan semua catatan dalam memori diproses dalam masa aplikasi ( kecuali Anda menarik dari file disk sesuai permintaan)

Jadi, saya terpaksa berpikir dengan RAM, maksudnya SSD. Jadi, dalam hal ini, dia mengatakan SSD mengurangi kegunaan dari basis data. Dia bahkan mengatakan, "Jika saya adalah Oracle, saya akan takut. Dasar mengapa saya ada adalah menguap."

Dari sedikit pemahaman saya tentang SSD, tidak seperti HDD, yang O(n)mencari waktu (menurut saya), SSD sudah dekat O(1), atau hampir acak. Jadi, sarannya menarik bagi saya, karena saya tidak pernah memikirkannya seperti itu. Pertama kali saya diperkenalkan ke database beberapa tahun yang lalu, ketika seorang profesor menggambarkan manfaat dari sistem file biasa, saya menyimpulkan bahwa peran utama dari suatu database pada dasarnya adalah sistem file yang sangat terindeks (juga optimasi, caching, akses bersamaan, dll), dengan demikian, jika indeks tidak diperlukan di SSD, jenis ini membuat basis data kurang berguna.

Terlepas dari itu, dengan menganggap bahwa saya seorang pemula, saya merasa sulit untuk percaya bahwa mereka menjadi kurang berguna, karena semua orang masih menggunakan DB sebagai titik utama aplikasi mereka, bukan sistem file murni, dan merasa seolah-olah dia terlalu menyederhanakan peran basis data.

Catatan : Saya menonton sampai akhir untuk memastikan dia tidak mengatakan sesuatu yang berbeda.

Sebagai referensi: 42:22 adalah ketika seluruh topik basis data muncul, 43:52 adalah ketika ia memulai dengan "Mengapa kita bahkan memiliki basis data"

Jawaban ini memang mengatakan SSD mempercepat DB secara signifikan. Pertanyaan ini menanyakan tentang bagaimana optimasi diubah.

Untuk TL; DR pertanyaan saya, apakah munculnya penggunaan SSD yang tersebar luas di pasar server (apakah akan datang atau sudah terjadi) mengurangi kegunaan basis data?

Sepertinya apa yang ingin disampaikan oleh presenter adalah bahwa dengan SSD, seseorang dapat menyimpan data pada disk, dan tidak perlu khawatir tentang lambatnya mengambilnya seperti pada HDD lama, seperti pada SSD, mencari waktu sudah dekat O(1)(Kupikir). Jadi, jika itu benar, secara hipotetis akan kehilangan salah satu keuntungan yang dimilikinya: pengindeksan, karena keuntungan memiliki indeks untuk waktu pencarian yang lebih cepat hilang.

Abdul
sumber

Jawaban:

59

Ada beberapa hal dalam database yang harus di -tweak saat Anda menggunakan SSD. Misalnya, berbicara untuk PostgreSQL Anda dapat menyesuaikan effective_io_concurrency, dan random_page_cost. Namun, membaca lebih cepat dan akses acak lebih cepat bukan apa yang dilakukan database. Itu memastikan

Dia salah tentang indeks. Jika seluruh tabel dapat dibaca menjadi ram, indeks masih berguna. Tidak percaya padaku Mari kita lakukan eksperimen pemikiran,

  • Bayangkan Anda memiliki tabel dengan satu kolom yang diindeks.

    CREATE TABLE foobar ( id text PRIMARY KEY );
  • Bayangkan ada 500 juta baris dalam tabel itu.

  • Bayangkan semua 500 juta baris disatukan menjadi satu file.

Apa yang lebih cepat,

  1. grep 'keyword' file
  2. SELECT * FROM foobar WHERE id = 'keyword'

Ini bukan hanya tentang di mana data berada, ini tentang bagaimana Anda memesannya dan operasi apa yang dapat Anda lakukan. PostgreSQL mendukung indeks B-tree, Hash, GiST, SP-GiST, GIN dan BRIN (dan Bloom melalui ekstensi). Anda akan bodoh berpikir bahwa semua matematika dan fungsionalitas itu hilang karena Anda memiliki akses acak yang lebih cepat.

Evan Carroll
sumber
31
Hanya sebuah tambahan - OP harus berhati-hati untuk tidak mengacaukan "akses acak" dengan "akses konten-addressable". Seperti yang dicatat OP, "akses acak" berarti mendapatkan setiap byte memori adalah O (1). Namun, MENCARI data dalam "memori akses-acak" itu masih membutuhkan pencarian secara berurutan; yaitu, Anda tidak dapat meminta memori "menemukan saya data yang terlihat seperti ini " dan secara ajaib menyerahkannya kepada Anda.
Bob Jarvis - Reinstate Monica
2
@ BobJarvis Anda benar. Komentar Anda membantu menjernihkan lebih banyak lagi contoh "Apa yang lebih cepat" dari @ EvanCarroll tentang mengapa pengindeksan dan bahkan pengindeksan materi, dan hanya menerima O(1)tidak cukup untuk kasus penggunaan yang disediakan DB
Abdul
12

Berdasarkan posting Anda, tampaknya pesan yang jelas adalah bahwa optimasi waktu pencarian RDBMS sedang diganti dengan perangkat keras yang membuat waktu IO dapat diabaikan.

Ini mutlak benar. SSD pada server basis data dikombinasikan dengan RAM tinggi (aktual) membuat IO menunggu jauh lebih singkat. Namun, pengindeksan dan caching RDBMS masih bernilai karena bahkan sistem dengan anugerah IO yang sangat besar ini dapat dan akan memiliki hambatan IO dari kueri yang berkinerja buruk yang disebabkan oleh pengindeksan yang buruk. Ini biasanya hanya ditemukan di bawah aplikasi beban kerja tinggi atau aplikasi yang ditulis dengan buruk.

Nilai kunci untuk sistem RDBMS secara umum adalah konsistensi data, ketersediaan data, dan agregasi data. Memanfaatkan spreadsheet excel, file csv, atau metode lain untuk menjaga "basis data" tidak menghasilkan jaminan.

SSD tidak melindungi Anda dari server utama Anda menjadi tidak tersedia karena alasan apa pun (jaringan, kerusakan sistem operasi, kehilangan daya). SSD tidak melindungi Anda dari modifikasi data yang buruk. SSD tidak membuatnya lebih cepat untuk menjalankan analitik dibandingkan dengan "hanya memilikinya".

Josh Bonello
sumber
Meskipun saya telah memperoleh wawasan yang lebih baik, saya bertanya dalam konteks penyimpanan data SSD mentah vs penyimpanan data pada DB w / HDD, dan jawaban Anda adalah dalam konteks DB pada SSD (karena frase pertanyaan yang buruk dari saya)
Abdul
4
@Abdul Perbandingan itu adalah jembatan apel-ke-suspensi. Perangkat mentah memberi Anda ruang penyimpanan yang luas; database memberi Anda cara untuk mengatur dan mengakses penyimpanan itu sesuai dengan model data. Maksud Josh di sini adalah bahwa jika Anda masuk ke ini dengan gagasan bermata berbintang bahwa SSD mentah adalah hal yang indah karena "cepat" dan bahwa Anda hanya akan menulis kode untuk melakukan semua penyimpanan data Anda pada volume mentah itu , Anda pada akhirnya akan menulis database.
Blrfl
8

Paman Bob mungkin sedang berbicara tentang database dalam memori seperti Redis atau Gemfire . Dalam database ini, semua yang ada di database benar-benar terkandung dalam RAM. Basis data dapat mulai kosong dan diajukan dengan data yang berumur pendek (digunakan sebagai cache) atau mulai dengan memuat semuanya dari disk dan secara berkala memeriksa perubahan pos ke disk.

Ini menjadi lebih dan lebih populer karena RAM semakin murah, dan menjadi layak untuk memiliki satu terabyte data yang disimpan dalam database cluster in-memory. Ada banyak kasus penggunaan di mana kecepatan dari memiliki akses instan ke hal-hal membuatnya berharga untuk dimasukkan ke dalam RAM daripada bahkan disk cepat seperti SSD. Anda bahkan dapat terus menggunakan SQL untuk beberapa di antaranya jika masuk akal.

Mengapa ini harus mengkhawatirkan Oracle? Data tumbuh dan tidak mungkin RDBMSes akan hilang. Namun, banyak waktu rekayasa Oracle selama bertahun-tahun telah dilakukan untuk membuat pengambilan data pada disk yang berputar sangat cepat. Oracle perlu beradaptasi dengan tingkat penyimpanan yang sama sekali berbeda. Yaitu, dengan Oracle Database In Memory , tetapi mereka terpapar pada kompetisi yang berbeda dari sebelumnya. Pikirkan berapa banyak waktu yang telah dihabiskan untuk memastikan optimizer kueri memilih strategi yang tepat berdasarkan tata letak hal-hal pada disk ....

Alan Shutko
sumber
Ah. Saya tidak pernah tahu ada hal-hal seperti di dalam memori database
Abdul
1
Sebagai contoh lain, SQLite dapat dijalankan dalam memori sehingga tidak perlu menggunakan database yang berbeda
user151019
8

Posting Wiki Komunitas mengumpulkan jawaban yang awalnya dibiarkan sebagai komentar pertanyaan


Saya akan mengatakan sebaliknya. Karena kecepatan baca / tulis sangat cepat, sekarang Anda bisa mendapatkan basis data berakselerasi GPU (mis. BlazingDB atau Alenka ) untuk membuat angka lebih cepat. Sekarang Anda dapat membuat kueri yang lebih kompleks berjalan lebih cepat. Sekarang pertanyaan yang bahkan orang tidak anggap berlari bisa dijalankan dengan kecepatan yang masuk akal. Semakin kompleks, dan semakin banyak data semakin baik Anda - cybernard

Sementara Bob Martin telah ada sejak lama dan pendapatnya umumnya layak untuk didengarkan (jika tidak setuju dengan :-), dalam hal ini saya pikir dia menyelam ke kerumunan "The Death Of Relational Databases Is Upon Us" (yang Saya anggota asosiasi :-). Untuk beberapa hal dalam keadaan terbatas argumen yang agak meyakinkan dapat dibuat bahwa teknologi database non-relasional dapat memberikan keunggulan. Yang telah dikatakan, bagaimanapun, IMO model relasional, cacat dalam berbagai dan beragam cara yang mungkin, masih memberikan model database tujuan umum terbaik yang tersedia saat ini. YMMV. - Bob Jarvis

Alasan utama kami menggunakan basis data bukan karena disk lambat (memang, awalnya, yang dikutip sebagai alasan untuk tidak menggunakan basis data), melainkan karena data rumit . Tujuan utama dari suatu database adalah untuk memungkinkan beberapa aplikasi / pengguna dapat menemukannya data yang benar dan bahkan untuk dapat mengubahnya secara bersamaan dengan cara yang terkontrol. Melakukannya dengan cepat hanyalah tujuan sekunder dari database. - RBarryYoung

RDBMS tidak akan pergi dalam waktu dekat; mereka adalah pilihan terbaik untuk beberapa jenis aplikasi, dan NoSQL (Mongo, dll.) adalah pilihan terbaik untuk yang lain. Kuda untuk kursus. - sh1rts

Basis data membantu mengatur data. Itu tidak benar-benar dirancang untuk akses cepat data di tempat pertama. - JI Xiang

Paul White
sumber