Saya melakukan pemrograman basis data menggunakan Java dengan SQLite.
Saya telah menemukan bahwa hanya satu koneksi pada basis data yang memiliki kemampuan menulis, sementara banyak koneksi sekaligus memiliki kemampuan membaca.
Mengapa arsitektur SQLite dirancang seperti ini? Selama dua hal yang sedang ditulis tidak ditulis ke tempat yang sama dalam database, mengapa tidak bisa dua tulisan terjadi sekaligus?
database
concurrency
sqlite
SteelToe
sumber
sumber
Jawaban:
Karena "multiple menulis bersamaan" jauh lebih sulit untuk dicapai dalam mesin basis data inti daripada penulis tunggal, pembaca banyak. Ini di luar parameter desain SQLite, dan termasuk kemungkinan akan menumbangkan ukuran kecil dan kesederhanaan SQLite.
Mendukung konkurensi penulisan tingkat tinggi adalah ciri khas mesin basis data besar seperti DB2, Oracle, SQL Server, MySQL, PostgreSQL, NonStop SQL, dan Sybase. Tetapi secara teknis sulit untuk dicapai, membutuhkan kontrol konkurensi yang luas dan strategi optimasi seperti basis data, tabel, dan penguncian baris atau, dalam implementasi yang lebih modern, kontrol konkurensi multi-versi . Penelitian tentang masalah / persyaratan ini sangat banyak dan telah berlangsung puluhan tahun .
SQLite memiliki filosofi desain yang sangat berbeda dari kebanyakan DBMS server-sentris yang mendukung banyak penulis. Ini dirancang untuk membawa kekuatan SQL dan model relasional ke aplikasi individual, dan memang bisa disematkan dalam setiap aplikasi. Tujuan itu membutuhkan pengorbanan yang signifikan. Tidak menambahkan infrastruktur dan overhead signifikan yang diperlukan untuk menangani beberapa penulis bersamaan adalah salah satunya.
Filosofi dapat diringkas dengan pernyataan pada halaman penggunaan yang sesuai SQLite :
sumber
fopen()
, jadi pertimbangkan semua hairiness yang datang dengan penulisan bersamaan ke file teks biasa.Karena tidak ada server yang dapat menentukan apakah sesuatu akan ditulis ke tempat yang sama atau tidak. Hanya ada dua proses yang mencoba menulis ke file.
Seperti yang ditunjukkan dalam komentar, penulisan bersamaan juga dapat didukung oleh utas internal. Tidak yakin seberapa baik ini akan bekerja (tidak terlalu memikirkannya). Lagi pula, inilah mengapa SQLite tidak menggunakan utas: Dr Hipp berpikir bahwa utas itu jahat.
Fakta bahwa DR Hipp berpikir bahwa utas adalah kejahatan didokumentasikan dalam FAQ SQLite .
sumber