Bir üretim sunucusunda SQLite? [kapalı]


9

SQLite'yi uzun zamandır tanıyorum ve hızlı bir şekilde yanıp söndüğünü biliyorum, ama hiç bir üretim sunucusunda denemedim. Başarısız olmadan önce ne kadar trafik tutabileceğine dair sağlam bir tahmin bulamadım.

Bu konuda herhangi bir sayı veya makale olan var mı?


2
Uyarı: Soru ve Yanıtların bazıları yanlış anlama, yanlış anlama ve güncel olmayan bilgiler içeriyor!
Chris S

SQLite'ı üretimde bir önbellekleme çözümü olarak değerlendiriyoruz: uri.agassi.co.il/2014/10/using-sqlite-for-production.html
Uri Agassi

Yanıtlar:


4

Ne yazık ki, yük yetenekleri hakkında sizin için herhangi bir rakamım yok, ancak bazı performans kısıtlayıcı faktörler hakkında birkaç yorum var:

  • SQLite hızı, üzerinde bulunduğu diskin hızından ve devam eden çok sayıda ek / güncelleme olup olmadığından (yazma erişimi) etkilenir. Yazma kilidi disk sıkma hızı ile sınırlıdır

  • İşlemler varsayılan olarak başlatılır, ancak işlemi başlatır ve gerçekleştirirseniz daha iyi performans elde edersiniz . İşlemi programlı olarak yürütürken çok hızlı kitlesel kesici uçlar aldım

  • Genellikle sadece veri okuyorsanız, o zaman deneyimimde iyi bir performans elde edersiniz. Bu nedenle, SQLite veritabanı sunucusu okumalarını, özellikle uzak olanları veya karmaşık sorguları saklamak için bir önbellek sistemi olarak kullanılabilir.

  • Bir veritabanı sunucusundan daha az kaynak kullanır.

  • Birden fazla eşzamanlı yazma işlemine ihtiyacınız varsa, bir veritabanı sunucusu (örneğin MySQL, Postgres) size daha iyi hizmet verebilir

As Devrim 100k kullanıcıları etrafında SQLite sitesi durumlarını ifade / gün iyi olmalı. Bir Trac sistemi yazma gerektirir, bu nedenle bu durumda performans muhtemelen daha yavaş olur


Solunumlar için teşekkürler, bu yüzden temelde bir kerede sadece 1 veritabanına yazabilirsiniz? Ama yine de birden fazla kişinin kilitlenmeden veritabanından okumasını sağlayabilirsiniz. Öyleyse, önbellekleme sistemi için birkaç fikir edindim.
Dr Hydralisk

Etrafa atılan "100K" numarası işe yaramaz. Dokümanlar "Genel olarak konuşursak, günde 100 bin isabetten az alan herhangi bir site SQLite ile iyi çalışmalıdır." "İsabet" genellikle HTTP isteği olarak tanımlanır. Bu, isabet halindeki her .js, .css ve resim için bir istek içerir. Bunun DB performansı ile ne ilgisi var? Yazarların "sayfa görüntüleme" anlamına geldiği varsayılırsa, yine de işe yaramaz. Sayfa görüntüleme başına kaç sorgu var? Okumaların yazımlara oranı? DB ne tür bir donanım üzerinde çalışıyor? İş için en az bir düzine başka daha iyi araç olduğunda, bir web sitesi için SQLite kullanmak iyi bir fikir değildir.
jamieb

@Dr Hydralisk Evet, okumalar paralel olarak oluşabilir .. tıpkı bir dosya gibi
Cez

@jamieb "İsabet" ile ilgili nokta adil. Kimse hangi donanım veya sunucu kaynaklarının mevcut olduğunu söylemedi, bu yüzden bildiğimiz her şey için küçük bir sanal sunucu olabilir. SQLite veritabanlarını bir önbellek sistemine veya öncelikle salt okunur tablolara dahil etmek , özellikle veritabanı sunucusu uzak bir veritabanı olduğunda performans avantajları sağlayabilir. Bellek önbelleği + Veritabanı sorgularının SQLite önbelleği, pantolonları yalnızca veritabanı sorgularından yener.
Cez

3

Bu iyi cevaplara eklemek için bazı puanlarım var.

SQLite'ın geçerli sürümü WAL (İleri Okuma Yazma) özelliğine sahiptir, böylece okuma ve yazma aynı anda devam edebilir. Dolayısıyla, önceki cevaplarda bahsedilen geleneksel tek yazar sınırlaması artık mevcut değildir. WAL'ı henüz üretimde görmedim, bu yüzden ne kadar iyi ölçeklendiğini yorumlayamıyorum.

WAL kullanarak veya kullanmazsanız, SQLite veritabanınız salt okunursa (veya toplu olarak güncellenirse) ve RAM'e sığarsa (işletim sisteminizde arabelleklerde tutmak için yeterli yedek RAM vardır) bir üretim web uygulamasında çok iyi ölçeklenebilir. Kişisel olarak performansı, ölçeklenebilirliği ve sağlamlığı konusunda çok şüpheliydim, ancak dokuz aylık üretimden sonra sistemin en karmaşık parçalarını bile çok iyi çalıştırdığını kanıtladı .


1

Sqlite, uygulamalara gömmek için mükemmeldir ve bunun için tasarlanmıştır, ancak kesinlikle "inanılmaz derecede hızlı" değildir. Tamamen çalışan bir uygulama vermek için sadece başka bir makineye kopyalanabilen iki dosyaya sahip olmanın rahatlığı için kendi uygulamalarımın birçoğu için kullanıyorum. Aynı yapı, dizinler, vb. Kullanılarak MySQL'e karşı yapılan testler, Sqlite'ın küçük veritabanları için bile oldukça yavaş olduğunu gösterir. Ben sadece 100MB daha az veritabanları ile kullandığım gibi kesin olarak söyleyemem rağmen, veritabanı boyutu büyüdükçe performans farkı büyümesini beklenir.


PRAGMA, veritabanını zaman zaman bozma pahasına artan performansa göre ayarlanabilir (yine de veri kaybetmez). Deneyimlerime göre, SQLite, eski bir WindowsXP makinesinde yaklaşık 250-300rps'de kesici uçlar alabilirim.
djangofan

-1, çünkü katılmıyorum. Ben birkaç GB büyüklüğünde SQLite veritabanları inşa ve sorguladı ve asla aynı miktarda sorgu örneğin MySQL kullanarak (aynı donanım türü) saniyede aynı miktarda olsun. Doğru şekilde masaj yapmayı biliyorsanız, SQLite kolayca saniyede 120k yazma sorgusu yapabilir .
Alix Axel

0

Ben sqlite sadece bir metin / xml dosyadan daha hızlı olduğunu düşünüyorum (eğer denediyseniz sürpriz olabilir). Ve eğer intranet için insanların çalışma saatlerini kaydettikleri veya trac biletlerini kullandıkları bir site oluşturmak istiyorsanız, eşzamanlılığı desteklemez. Bunun dışında kaçınılmalı ve mysql veya couchdb ile değiştirilmelidir.

sqlite web sitesi 100k kullanıcı / gün iyi olmalı ama basit bir trac projesi 10 ppl ofis kullanımı ile çok sıkışmış çünkü çok şüpheliyim diyor.


0

Sqlite geleneksel bir istemci / sunucu DB uygulaması değil. Temelde başka bir uygulamanın içine yerleştirilmiş bir kütüphane. Tek kullanıcılı masaüstü uygulamaları için tasarlanmıştır. Kesinlikle çok kullanıcılı bir ortamda bir tür bağımsız MySQL / PostgreSQL / MS-SQL değiştirme olarak kullanmayı denemek istemiyorsunuz çünkü tüm DB yazma kilitli. Performansı yok edecek hafif bir yükte bile çekişme sorunları ile uğraşacaksınız.


WAL'de yalnızca eşzamanlı yazarlar engellenir. Ayrıca varsayılan MySQL motoru (MyISAM), bir yazma sorgusu olduğunda tam tabloları da kilitler.
Alix Axel

1
@AlixAxel Bu cevap WAL'ın kullanıma sunulmasından altı ay önce yazıldı.
jamieb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.