Son zamanlarda SQLite vs MySQL hakkında bu soruyu okudum ve cevap SQLite iyi ölçeklenmediğini ve resmi web sitesi sıralama bunu doğruladı dikkat çekti .
SQLite ne kadar ölçeklenebilir ve en üst sınırları nelerdir?
Son zamanlarda SQLite vs MySQL hakkında bu soruyu okudum ve cevap SQLite iyi ölçeklenmediğini ve resmi web sitesi sıralama bunu doğruladı dikkat çekti .
SQLite ne kadar ölçeklenebilir ve en üst sınırları nelerdir?
Yanıtlar:
Dün küçük bir site yayınladım *tüm ziyaretçiler için paylaşılan bir SQLite veritabanı kullanan temsilcinizi izlemek için. Ne yazık ki, benim ev sahibi koymak mütevazı yük ile bile oldukça yavaş koştu. Bunun nedeni, birisinin sayfayı her görüntülediğinde tüm veritabanının kilitlenmiş olmasıdır, çünkü güncellemeler / ekler içerir. Yakında MySQL'e geçtim ve test etmek için fazla zamanım olmasa da, SQLite'den çok daha ölçeklenebilir görünüyor. Sadece yavaş sayfa yükleri ve zaman zaman sqlite kabuk sorguları yürütmeye çalışırken bir veritabanı kilitli hata almak hatırlıyorum. Yani, SQLite başka bir site çalıştırıyorum dedi. Aradaki fark, sitenin statik olmasıdır (yani veritabanını değiştirebilecek tek kişi benim) ve eşzamanlı okumalar için gayet iyi çalışıyor. Hikayeden çıkarılacak ders:
edit : Ben sadece SQLite adil olmayabilir fark ettim - Ben bir web sayfasından sunarken SQLite veritabanında herhangi bir sütun indeks vermedi. Bu kısmen yaşadığım yavaşlamaya neden oldu. Ancak, veritabanı kilitleme standlarının gözlemlenmesi - özellikle zahmetli güncellemeleriniz varsa, SQLite performansı MySQL veya Postgres ile eşleşmez.
başka bir düzenleme: Bunu neredeyse 3 ay önce gönderdiğimden beri SQLite'nin ölçeklenebilirliğini yakından inceleme fırsatım oldu ve birkaç hile ile oldukça ölçeklenebilir olabilir. İlk düzenlememde de belirttiğim gibi, veritabanı dizinleri sorgu süresini önemli ölçüde azaltır, ancak bu veritabanları hakkında SQLite'den daha genel bir gözlemdir. Ancak, SQLite: işlemleri hızlandırmak için kullanabileceğiniz başka bir hile var . Birden çok veritabanı yazımı yapmanız gerektiğinde, bunları bir işleme koyun. Yazma sorgusu her verildiğinde dosyaya yazmak (ve kilitlemek) yerine, yazma işlemi tamamlandığında yalnızca bir kez gerçekleşir.
İlk paragrafta yayınladığım bahsettiğim site SQLite'ye geri döndü ve birkaç yerde kodumu ayarladıktan sonra sorunsuz çalışıyor.
* site artık mevcut değil
Sqlite tek kullanıcı açısından ölçeklenebilir, çok iyi performans gösteren çoklu gigabayt veritabanına sahibim ve onunla çok fazla sorunum olmadı.
Ama olan bu tür ölçekleme size bahsettiğini bağlıdır, böylece tek kullanıcı.
Yorumlara yanıt olarak. Not önler çok kullanıcılı bir ortamda bir SQLite veritabanı kullanarak hiçbir şeyin, ama her işlemin bir kilit alır (değiştirir veritabanı o aslında, her SQL deyimi) olduğu dosyadan veritabanına diğer kullanıcıların erişmesini engelleyecek, en hepsi .
Veritabanında çok fazla değişiklik yaptıysanız, ölçekleme sorunlarına çok hızlı bir şekilde ulaşacaksınız. Öte yandan, yazma erişimine kıyasla çok fazla okuma erişiminiz varsa, o kadar da kötü olmayabilir.
Ama SQLite ders olacak fonksiyonu çok kullanıcılı bir ortamda, ancak olmaz gerçekleştirmek de.
SQLite sqlite.org web sitesini ve çok fazla trafiğe sahip olanları yönlendirir. Günde 100.000'den az isabete sahipseniz , SQLite'nin iyi çalışması gerektiğini önerirler . Bu da "Writeahead Logging" özelliğini yazmadan önce yazılmıştı.
SQLite ile işleri hızlandırmak istiyorsanız, aşağıdakileri yapın:
YouTube'da " İleri Yazma Günlüğü ile SQLite Performansını İyileştirme " adlı videoma bir göz atmak için önceden yazma günlüğünü nasıl kullanacağınızı ve yazma işlemleri için 5 kat daha hızlı bir gelişme gösterebilirsiniz .
Sqlite bir masaüstü veya işlem içi veritabanıdır. SQL Server, MySQL, Oracle ve kardeşleri sunuculardır .
Masaüstü veritabanları, doğası gereği veri deposuna eşzamanlı yazma erişimini desteklemesi gereken herhangi bir uygulama için iyi bir seçenek değildir . Bu, bir düzeyde, şimdiye kadar oluşturulan çoğu web sitesini içerir. Herhangi bir şey için giriş yapmanız gerekiyorsa, büyük olasılıkla DB'ye yazma erişiminiz olması gerekir.
Bu SQLite belgelerini okudunuz mu - http://www.sqlite.org/whentouse.html ?
SQLite genellikle düşük ve orta trafikli web siteleri için veritabanı motoru olarak harika çalışır (yani, tüm web sitelerinin% 99,9'u). SQLite'nin işleyebileceği web trafiği miktarı, elbette, web sitesinin veritabanını ne kadar yoğun kullandığına bağlıdır. Genel olarak konuşursak, günde 100 bin isabetten az alan her site SQLite ile iyi çalışmalıdır. 100K isabet / gün rakamı, sabit bir üst sınır değil, muhafazakar bir tahmindir. SQLite'nin bu trafik miktarının 10 katıyla çalıştığı gösterilmiştir.
SQLite ölçeklenebilirliği büyük ölçüde kullanılan verilere ve bunların biçimine bağlıdır. Ekstra uzun tablolar (GPS kayıtları, saniyede bir kayıt) ile bazı zor bir deneyim yaşadım. Deneyimler, SQLite'nin aşamalı olarak yavaşlayacağını gösterdi, kısmen endeksleri tutan büyüyen ikili ağaçların sürekli yeniden dengelenmesi nedeniyle (ve zaman damgalı endekslerle, ağacın çok yeniden dengeleneceğini biliyorsunuz , ancak aramalar). Sonuçta yaklaşık 1GB (çok ballpark, biliyorum), sorgular benim durumumda durgunlaşıyor. Kilometreniz değişecektir.
Hatırlamanız gereken bir şey, tüm övünmeye rağmen, SQLite veri ambarı için DEĞİLDİR. SQLite için tavsiye edilmeyen çeşitli kullanımlar vardır . SQLite'nin arkasındaki iyi insanlar bunu kendileri söylüyor:
SQLite'a bakmanın bir başka yolu şudur: SQLite, Oracle'ın yerini almak üzere tasarlanmamıştır. Fopen () yerine kullanılmak üzere tasarlanmıştır.
Ve bu, ana argümana (nicel değil, üzgünüm, ancak nitel değil) yol açar, SQLite tüm kullanımlar için değildir, oysa MySQL ideal olmasa bile birçok farklı kullanımı kapsayabilir. Örneğin, MySQL'in Firefox çerezlerini (SQLite yerine) depolamasını sağlayabilirsiniz, ancak bu hizmetin sürekli çalışması gerekir. Öte yandan, MySQL yerine SQLite (birçok kişi gibi) üzerinde çalışan işlemsel bir web siteniz olabilir, ancak çok fazla kesinti süresi bekleyebilirsiniz.
ATTACH DATABASE
tüm tablolarla sanal bir veritabanı bağlantısı oluşturmak için kullanmanıza izin verir (ancak 62 veritabanıyla sınırlıdır).
Ben (sayı 1) bir web sunucusu istemcinin hunderts hizmet veritabanına tek bir bağlantı ile arka uç üzerinde göründüğünü düşünüyorum, değil mi?
Bu nedenle veritabanında eşzamanlı erişim yoktur ve bu nedenle veritabanının 'tek kullanıcı modunda' çalıştığını söyleyebiliriz. Böyle bir durumda çok kullanıcılı erişimi diskuss için bir anlam ifade etmez ve bu nedenle SQLite ve diğer sunucu tabanlı veritabanlarının yanı sıra çalışır.
Bu şekilde düşün. Birisi her kullandığında SQL Lite kilitlenecektir (SQLite okumaya kilitlenmez). Dolayısıyla, bir web sayfasını veya birden fazla eşzamanlı kullanıcısı olan bir uygulamayı sunuyorsanız, SQLLite ile aynı anda yalnızca bir uygulamanızı kullanabilirsiniz. Yani bir ölçeklendirme sorunu var. Onun bir kişi uygulaması yüzlerce başlık, derecelendirme, bilgi, kullanım, çalma, çalma süresi tutan bir Müzik Kütüphanesi söylüyorsa, SQL Lite milyonlarca kayıt olmasa bile binlerce güzel tutan ölçeklendirir (Sabit disk istekli)
MySQL ise her yerde insanların aynı anda kullanacağı sunucular uygulamaları için iyi çalışıyor. Kilitlenmez ve oldukça büyüktür. Müzik kitaplığınız için MySql, sadece bir kişinin göreceği gibi öldürülecekti, UNLESS, binlerce kişinin eklediği veya güncellediği paylaşılan bir müzik kütüphanesi. O zaman MYSQL kullanacaktı.
Teoride MySQL, Sqllite'den daha iyi ölçeklendirir, çünkü birden fazla kullanıcıyı işleyebilir, ancak tek bir kullanıcı uygulaması için aşırıya kaçar.
SQLite'nin web sitesi (başvuruda bulunduğunuz bölüm), bunun çeşitli çok kullanıcılı durumlar için kullanılabileceğini belirtir.
Biraz işleyebileceğini söyleyebilirim. Deneyimlerime göre her zaman çok hızlı oldu. Tabii ki, tablolarınızı endekslemeniz ve buna kod yazarken, parameritlenmiş sorgular ve benzeri kullandığınızdan emin olmanız gerekir. Temelde performansı artırmak için herhangi bir veritabanı ile aynı şeyler.
SQLite üzerine kurulmuş bir veritabanı sunucusu olan REAL SQL Server'ı kontrol etmeye değer olabilir .