SQLite pada server produksi? [Tutup]


9

Saya sudah tahu tentang SQLite untuk waktu yang lama dan saya tahu ini sangat cepat, tetapi saya belum pernah mencobanya di server produksi. Saya tidak pernah dapat menemukan perkiraan yang solid tentang seberapa banyak lalu lintas yang bisa ditangani sebelum gagal.

Adakah yang punya angka atau artikel tentang ini?


2
Peringatan: Pertanyaan dan beberapa Jawaban berisi kesalahpahaman, kesalahpahaman, dan informasi yang sudah usang!
Chris S

Kami telah mengevaluasi SQLite sebagai solusi caching dalam produksi: uri.agassi.co.il/2014/10/using-sqlite-for-production.html
Uri Agassi

Jawaban:


4

Sayangnya, saya belum mendapatkan angka untuk Anda tentang kemampuan memuat, tetapi beberapa komentar tentang beberapa faktor yang membatasi kinerja:

  • Kecepatan SQLite dipengaruhi oleh kecepatan disk yang aktif dan apakah ada banyak sisipan / pembaruan yang terjadi (yaitu akses tulis). Kunci-tulis dibatasi oleh kecepatan putaran disk

  • Transaksi dimulai secara default, tetapi Anda mendapatkan kinerja yang lebih baik jika Anda memulai dan melakukan transaksi. Saya memiliki sisipan massa yang sangat cepat ketika menangani transaksi secara terprogram

  • Jika pada umumnya Anda hanya membaca data maka Anda mendapatkan kinerja yang baik dalam pengalaman saya. Jadi, SQLite dapat digunakan sebagai sistem caching untuk menyimpan bacaan server database, khususnya yang jauh atau permintaan kompleks.

  • Ini menggunakan lebih sedikit sumber daya daripada server database, jadi ini dapat mempengaruhi kinerja situs karena membebaskan lebih banyak sumber daya untuk server Web dan kode aplikasi

  • Jika Anda memerlukan sejumlah penulisan bersamaan untuk dimungkinkan, maka server basis data (mis. MySQL, Postgres) mungkin dapat membantu Anda dengan lebih baik

Seperti yang dikatakan Devrim , situs SQLite menyatakan sekitar 100rb pengguna / hari harus baik-baik saja. Sistem Trac membutuhkan penulisan, sehingga kinerja mungkin akan lebih lambat dalam kasus itu


Terima kasih untuk respones, jadi pada dasarnya Anda hanya dapat menulis ke database 1 saja? Tetapi Anda masih dapat memiliki banyak orang membaca dari database tanpa terkunci? Jika demikian, saya baru saja mendapatkan beberapa ide untuk sistem caching.
Dr Hydralisk

Angka "100K" yang digunakan tidak berguna. Dokumen berbunyi "Secara umum, situs apa pun yang mendapat kurang dari 100 ribu hit / hari harus berfungsi baik dengan SQLite." "Hit" biasanya didefinisikan sebagai permintaan HTTP. Ini termasuk permintaan untuk setiap .js, .css, dan gambar pada klik. Apa hubungannya ini dengan kinerja DB? Menganggap penulis berarti "tampilan halaman", itu masih tidak berguna. Berapa banyak kueri per tampilan halaman? Rasio baca terhadap menulis? Perangkat keras macam apa yang dijalankan oleh DB? Ini bukan ide yang baik untuk menggunakan SQLite untuk situs web ketika ada setidaknya selusin alat lain yang lebih baik untuk pekerjaan itu.
jamieb

@ Dr Hydralisk Ya, membaca dapat terjadi secara paralel .. sama seperti file
Cez

@jamieb Poin tentang "hit" adalah adil. Tidak ada yang menyebutkan perangkat keras atau sumber daya server apa yang tersedia, jadi itu bisa menjadi server virtual kecil untuk semua yang kita tahu. Melibatkan database SQLite dalam sistem caching, atau terutama tabel read-only dapat memberikan manfaat kinerja, terutama ketika server database adalah yang jauh. Cache memori + Cache SQLite dari query Database akan mengalahkan permintaan database saja.
Cez

3

Saya punya beberapa poin untuk ditambahkan ke jawaban yang baik ini.

Versi SQLite saat ini memiliki WAL (Write-Ahead Logging) sehingga membaca dan menulis dapat dilanjutkan secara bersamaan. Jadi keterbatasan penulis tunggal tradisional yang disebutkan dalam jawaban sebelumnya tidak ada lagi. Saya belum melihat WAL dalam produksi, jadi saya tidak bisa berkomentar seberapa bagusnya.

Menggunakan WAL atau tidak, jika basis data SQLite Anda hanya baca (atau batch diperbarui) dan cocok dengan RAM (OS Anda memiliki RAM cadangan yang cukup untuk menyimpannya dalam buffer) ia dapat menskala dengan sangat baik pada aplikasi web produksi. Saya pribadi sangat skeptis tentang kinerja, skalabilitas, dan kekokohannya, tetapi sekarang setelah sembilan bulan dalam produksi, ia telah terbukti menjalankan bahkan bagian paling rumit dari sistem dengan sangat baik.


1

Sqlite sangat bagus untuk disematkan dalam aplikasi, dan itulah yang dirancang untuk itu, tetapi tentu saja tidak "sangat cepat". Saya menggunakannya untuk beberapa aplikasi saya sendiri, semata-mata untuk kenyamanan hanya memiliki dua file yang dapat disalin ke komputer lain untuk memberikan aplikasi yang berfungsi penuh. Pengujian terhadap MySQL, menggunakan struktur yang sama, indeks, dll., Menunjukkan Sqlite menjadi jauh lebih lambat, bahkan untuk database kecil. Saya akan mengharapkan perbedaan kinerja untuk tumbuh sebagai ukuran basis data tumbuh, meskipun saya tidak bisa mengatakan dengan pasti karena saya hanya menggunakannya dengan database kurang dari 100MB.


PRAGMA dapat disesuaikan untuk peningkatan kinerja dengan mengorbankan potensi database yang sesekali rusak (tidak kehilangan data). Dalam pengalaman saya, saya bisa mendapatkan SQLite untuk memasukkan sisipan sekitar 250-300rps pada mesin WindowsXP lama.
djangofan

-1, karena saya tidak setuju. Saya telah membangun dan menanyakan database SQLite dengan ukuran beberapa GB dan saya tidak akan pernah mendapatkan jumlah query yang sama per detik menggunakan MySQL misalnya (dalam jenis perangkat keras yang sama). SQLite dapat dengan mudah melakukan permintaan penulisan 120r per detik jika Anda tahu cara memijatnya dengan benar .
Alix Axel

0

Saya pikir sqlite hanya lebih cepat daripada file teks / xml (Anda mungkin terkejut jika Anda mencobanya). Dan itu tidak mendukung konkurensi, jika Anda ingin membuat situs untuk intranet di mana orang-orang mendaftarkan jam kerja mereka atau menggunakan tiket trac mungkin bermanfaat. Selain itu harus dihindari dan diganti dengan mysql atau couchdb.

Situs sqlite mengatakan 100k pengguna / hari harus baik-baik saja tetapi saya sangat meragukannya, karena proyek trac yang sederhana sering macet dengan penggunaan kantor 10 ppl.


0

Sqlite bukan aplikasi DB klien / server tradisional. Ini pada dasarnya perpustakaan yang tertanam dalam aplikasi lain. Ini dirancang untuk aplikasi desktop pengguna tunggal. Anda benar-benar tidak ingin mencoba menggunakannya sebagai pengganti MySQL / PostgreSQL / MS-SQL mandiri dalam lingkungan multiuser karena seluruh DB dikunci pada penulisan. Anda akan berhadapan dengan masalah pertikaian bahkan pada beban ringan yang akan merusak kinerja.


Di WAL, hanya penulis konkuren yang diblokir. Ditambah mesin MySQL default (MyISAM) juga mengunci tabel penuh setiap kali ada permintaan tulis.
Alix Axel

1
@AlixAxel Jawaban ini ditulis enam bulan sebelum WAL tersedia.
jamieb
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.