Apa itu ukuran maksimum realistis, dunia nyata, maksimum untuk database SQLite?


33

Menurut artikel ini tentang Penggunaan yang Sesuai Untuk SQLite dikatakan bahwa, sementara SQLite terbatas hingga 140 terabyte , RDBMS klien / server dapat bekerja lebih baik:

Database SQLite terbatas dalam ukuran hingga 140 terabyte (2 47 byte, 128 tibibytes). Dan bahkan jika itu bisa menangani database yang lebih besar, SQLite menyimpan seluruh database dalam file disk tunggal dan banyak sistem file membatasi ukuran maksimum file untuk sesuatu yang kurang dari ini. Jadi jika Anda merenungkan basis data sebesar ini, sebaiknya Anda mempertimbangkan untuk menggunakan mesin basis data klien / server yang menyebar kontennya ke beberapa file disk, dan mungkin di beberapa volume.

Secara umum, saya setuju dengan ini, tetapi saya terkejut mengetahui bahwa batas maksimum SQLite sangat tinggi! Dalam pengalaman saya, saya telah menggunakan beberapa database SQL Server dalam ukuran ~ 30-100GB. Saya juga telah bekerja secara tidak langsung dengan database yang jauh lebih besar menggunakan Oracle, Postgres, atau Cassandra. Dari mereka, setidaknya setahu saya, tidak ada yang mendekati 140TB. Saya bukan DBA, jadi ini yang saya anggap "besar" dari pengalaman langsung saya.

Saya hanya mempertimbangkan SQLite untuk situasi di mana basis data akan menjadi kecil; lusinan megabita paling banyak.

Setelah membaca artikel ini, saya masih belum yakin untuk mempertimbangkan SQLite untuk apa pun yang mungkin membutuhkan ratusan gigabytes. Tapi saya bertanya-tanya apakah saya telah meremehkan kemampuannya. Apa batas maksimum ukuran maks untuk database SQLite yang digunakan di dunia nyata?


3
Saya hanya berpikir kita biasanya harus mempertimbangkan jumlah koneksi bersamaan karena kumpulan data besar sering diasumsikan untuk dikonsumsi oleh banyak pengguna. Ada cara bagi Anda untuk menguji ini pada sistem Anda sendiri, bukan?
JeffO

3
Untuk sesuatu seperti database transaksi yang diarsipkan yang tidak perlu diakses, SQLite mungkin merupakan pilihan yang bagus, dan hanya akan ada satu pengguna pada satu waktu (jika ada), dan Anda tidak harus memiliki keseluruhan Setup server DB untuk mendukungnya. Jika Anda memiliki beberapa pengguna secara bersamaan, di sisi lain, Anda dapat dengan mudah mengalami masalah dengan penguncian menghalangi jauh sebelum Anda mendapatkan bahkan ke database beberapa-pertunjukan.
Michael Kohne


2
@Pacerier - ya, untuk menginstal perangkat lunak. Kemudian Anda harus menetapkan peran DB, mencari tahu bagaimana mengintegrasikan ke dalam sistem cadangan Anda, pastikan bahwa sistem cadangan menempatkan server DB ke keadaan yang tepat di awal dan akhir cadangan, dll, dll. Ada jauh lebih banyak untuk menyiapkan server db dari sekadar menginstal perangkat lunak. Lebih jauh, ini adalah satu lagi layanan yang harus Anda khawatirkan dari sudut pandang keamanan jaringan, dan satu hal lagi yang harus Anda ikuti dengan perbaikan. Jika Anda MEMBUTUHKAN layanan db, tentu saja lakukan untuk itu, tetapi Anda tidak membutuhkannya, SQLite memiliki heck overhead yang jauh lebih sedikit.
Michael Kohne

1
@ leeand00 - Atau Anda bisa menyewa ruang selama sebulan.
JeffO

Jawaban:


26

Batas realistis (dari ukuran beberapa basis data Sqlite) sama dengan batas realistis untuk file data. Dan batas itu sangat tergantung pada komputer & sistem Anda. Pada desktop Linux saya saat ini, saya tidak mampu membeli file berukuran lebih besar dari 350Gbyte (karena pada dasarnya saya menghindari satu file tunggal yang memakan lebih dari setengah partisi disk). BTW, batas praktis itu juga berdampak pada RDBMS SQL lainnya seperti PostGreSQL atau MariaDB (tetapi sebagian besar menyimpan data dalam beberapa file, yang mungkin Anda simpan pada sistem file yang berbeda, dan beberapa di antaranya mampu mengelola data terdistribusi pada mesin jarak jauh .. .)

Setelah membaca artikel ini, saya masih belum yakin untuk mempertimbangkan SQLite untuk apa pun yang mungkin membutuhkan ratusan gigabyte

Anda benar dan salah.

Anda benar, karena pada komputer saat ini (laptop & desktop, bukan superkomputer atau server pusat data), seratus gigabyte masih merupakan ruang disk yang cukup besar. Jadi dalam praktiknya, jika Anda memikirkan basis data yang begitu besar, lebih baik Anda membayangkan server SQL yang nyata (à la PostGreSQL) khususnya karena Anda mungkin menginginkan akses jarak jauh, akses bersamaan yang efektif dan mungkin data & tabel yang didistribusikan.

Anda (pada prinsipnya, saya tidak pernah mencoba) salah karena sangat mungkin SQLite mampu (dan kadang-kadang diuji) untuk berurusan dengan database beberapa ratus gigabyte, dengan asumsi Anda memiliki sistem file yang mampu menangani file sebesar itu (dan mungkin dua dari setidaknya mereka).

Saya pasti akan (kadang-kadang) mempertimbangkan SQLite untuk database beberapa lusin gigabytes (dan saya memang pernah mencoba .sqlitefile sebesar itu , IIRC sebesar 40Gbytes). Pada komputer saat ini (non-superkomputer), saya akan ragu memiliki ratusan gigabytes basis data SQLite, hanya karena file seperti itu cukup besar oleh praktik saat ini.

IIRC beberapa vendor perangkat keras yang menjual mesin sistem file khusus memang pernah berbicara kepada saya tentang aplikasi sqlite terabyte (tapi saya bisa saja salah).

Tentu saja kinerja SQLite tergantung (seperti semua database SQL) banyak dari jumlah dan lebar tabel, indeks mereka, query SQL yang terlibat. Dan Anda tidak ingin memiliki akses simultan (dengan banyak proses berbeda), dan Anda harus menggunakan transaksi (berdasarkan pengalaman, bahkan pada basis data SQLITE kecil beberapa megabyte, Anda benar-benar ingin membungkus mis. Ribuan permintaan penyisipan Anda dengan BEGIN TRANSACTION& END TRANSACTION, tidak melakukan itu memperlambat Sqlite dengan faktor besar -lebih dari 10x-).

Dan berdasarkan pengalaman pribadi, dengan konfigurasi dan pengaturan yang sesuai, SQLite mampu mengelola basis data yang lebih besar dari RAM yang tersedia (jadi 30Gbytes bukan masalah) - tetapi Anda mungkin menginginkan indeks sesuai dengan RAM!

Jika Anda kebetulan membuat kode untuk "superkomputer" atau workstation yang mahal (misalnya, misalnya 512Gbytes RAM dan 8Tbytes disk dan 512Gbyte SSD), Anda tentu dapat memiliki database Sqlite terabyte. Tetapi Anda ingin melakukannya mungkin hanya jika satu (atau sangat sedikit) proses mengakses database itu. Jika Anda memiliki selusin proses mengakses bersamaan database yang sama, lebih baik instal RDBMS SQL nyata (à la MariaDB atau PostGreSQL)

Juga perhatikan bahwa sementara format (biner) dari .sqlitefile database didokumentasikan sebagai "portable", saya lebih suka untuk membuat cadangan database dalam format tekstual SQL (menggunakan sqlite3 mydb.sqlite .dump > mydb.sql). Kemudian, saya juga memerlukan beberapa ruang disk tambahan untuk dump teks (dan yang menurunkan batas realistis).

Biasanya Sqlite bukanlah hambatannya. Tetapi disk mungkin.

PS. Alasan yang sama bisa diterapkan pada file besar yang diindeks menggunakan GDBM .

PPS. Di cabang expjs saya (sept.2016) dari monitor MELT saya (perangkat lunak bebas GPLv3, di github) saya bertahan seluruh aplikasi menumpuk di JSON di dalam database Sqlite yang baru. Saya telah menjalankan eksperimen kecil dengan jutaan objek (cukup "besar") tanpa kejutan buruk. YMMV.


7
Anda bisa berhenti menulis setelah paragraf keempat. Tapi +1 tetap.
Robert Harvey

3
Mungkin, tetapi saya sangat terkejut ketika menyadari bahwa bahkan pada basis data sqlite baru yang hanya beberapa megabyte, transaksi sangat penting dalam praktiknya (dengan hanya satu proses mengakses, menulis, file baru itu).
Basile Starynkevitch

3
Itu tentu benar untuk menulis. Dalam praktiknya, sulit untuk membayangkan database SQLite dengan ukuran seperti yang dijelaskan OP. Postgresql mungkin akan menjadi pilihan yang lebih baik, bukan karena kemampuan ukurannya, tetapi untuk konkurensi kekuatan industri yang tidak dimiliki SQLite.
Robert Harvey

5
Ada banyak situasi yang sah di mana Anda bisa memiliki database SQLite dengan ukuran file yang besar. Dari pengembang SQLite sendiri: anggap itu kurang sebagai pengganti MySql, dan lebih sebagai pengganti fopen. Menulis beberapa perangkat lunak cad 3D, dan menggunakan database SQLite untuk menyimpan data tentang objek, bisa sangat masuk akal.
whatsisname

2
@Pacerier: File film dan gumpalan biner serupa biasanya tidak disimpan dalam database. Mereka disimpan dalam sistem file, dan tautan ke mereka disimpan dalam database.
Robert Harvey
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.