Dahili kullanım web siteleri: SQLite'a karşı zorlayıcı bir durum var mı?


23

Flask veya Django gibi birçok web çerçevesi, SQLite'ı varsayılan veritabanı olarak kullanır . SQLite , python içerisine girdiği için zorlayıcı ve yönetim yükü oldukça düşük.

Ancak, trafik yoğunluğunun yüksek olduğu kamu üretim tesislerinin çoğu daha ağır bir veritabanı kullanarak kapanmaktadır: mySQL, Oracle veya postgresql.

Sorular :

varsayalım:

  • Site trafiği orta düzeyde ve veritabanına eşzamanlı okuma / yazma erişimi gerçekleşecek
  • SQLAlchemy'yi SQLite yazma kilitleriyle birlikte kullanacağız ( bu yorum beni biraz tedirgin etse de )
  • Veritabanı belki 60.000 kayıt içerecek
  • Veri yapıları, daha ağır veritabanlarında bulunan gelişmiş özellikler gerektirmez

Hiç trafikten uzak iç kurumsal araçlar olarak hizmet veren web siteleri için SQLite eşzamanlılığına karşı zorlayıcı bir durum var mı ? Öyleyse, hangi koşullar SQLite'ın eşzamanlılık sorunları yaşamalarına neden olur ?

Genel korku / doğrulanmamış parmakla işaretleme yerine bilinen belirli kök nedenleri arıyorum.


Sqllite, replikasyon vb. Gibi özelliklerin yedeklemeler vb. İçin faydalı olabilecek özelliklerine nasıl sahiptir? SQLlite'de uygulamanın db'ye sahip olduğu izlenimini edindim. Uygulamanız devam ederken yönetici komut dosyaları vb. Çalıştırabilir misiniz?
Doug T.

1
SQLite ve eşzamanlılık hakkında bazı fıkralar (çoğunlukla olumlu): sqlite3 eşzamanlı erişim
Daniel B

1
Dahili bir web sitesi söz konusu olduğunda, SQLite için zorunlu neden nedir? RDBMS kurulumu ile ilgili herhangi bir kısıtlama var mı?
JeffO,

Bireysel geliştiricilerin dizüstü bilgisayarlarındaki geliştirme ortamını basitleştirmek dışında bir neden yoktur. Elbette ki sorun, geliştirme ve üretim ortamını makul derecede basitleştirip basitleştiremeyeceğimizdir
Mike Pennington

Yanıtlar:


23

Sorunuzun resmi yanıtını, SQLite İçin Uygun Kullanımlar bölümünü okumanızı tavsiye ederim . Özellikle, SQLite yönünde uyarıda da bulunuluyor "Başka RDBMS Mayıs Çalışma Daha İyi Durumlar" değil eşzamanlı yazma destekler:

SQLite sınırsız sayıda eşzamanlı okuyucuyu destekler, ancak herhangi bir anda yalnızca bir yazara izin verir. Birçok durumda, bu bir sorun değildir. Her uygulama veri tabanı hızlı bir şekilde çalışıyor ve devam ediyor ve birkaç düzine milisaniyeden fazla kilit sürmüyor. Ancak daha fazla eşzamanlılık gerektiren bazı uygulamalar vardır ve bu uygulamaların farklı bir çözüm araması gerekebilir.

Uygunluk açısından SQLite'yi SQL sorgularını destekleyen çok karmaşık bir dosya formatı olarak görme eğilimindeyim. Veritabanımı web uygulamamdan ayırmak isteseydim, bu durum için optimize edilmediği için SQLite'tan kaçınma eğilimindeydim. Kısacası, SQLite bazı senaryolarda kullanım için yeterince ölçeklenemez, bu nedenle bir gün popüler olmayı ümit eden web sitelerini işleten insanlar, SQLite’e gidip daha sonra geçiş yapmak zorunda kalmak yerine, ölçeklenebilir bir şeyden başlamaktan daha iyi olabilir.

Söylenenlerin hepsi, SQLite çoğu iç web sitesi için muhtemelen iyidir; genellikle dahili web siteleri aynı düzeyde eşzamanlılık ve ölçeklenebilirlik gerektirmez.


Çoğu dış web sitesi de yok. PostGres muhtemelen daha iyi bir seçim olsa da, EF gibi bir şey kullanılırsa veritabanı motoru değiştirilebilir.
Robert Harvey,

@RobertHarvey EF nedir?
Mike Pennington

@MikePennington: Varlık Çerçevesi. Ayrıca veritabanı saydamlığına sahip başka ORM'ler olduğunu veya en azından sürücüleri değiştirebileceğini hayal ediyorum.
Robert Harvey,

1
Pythonic eşdeğeri, SQL Alchemy gibi bir şey olurdu
Wyatt Barnett

“SQLite'ı, SQL sorgularını destekleyen çok karmaşık bir dosya formatı olarak görme eğilimindeyim.” Mükemmel tanım
Joker

4

BT Müdür şapkamı takarken burada birkaç tane gevşeme göremiyorum:

  • Veri bozulması riski. Belki de gerçeklerden daha fazla algılanan, ancak günün sonunda, son zamanlarda yedeklenip desteklenmediğini sormanın yanı sıra, kötü yazarlara herhangi bir ricada bulunacak çok fazla olmayan işlemsel olmayan bir dosya tipi DB'dir. Bundan bahsetmişken. . .
  • Bu şeyi nasıl yedeklerim? Bildiğim şekilde iyi bir kopyasını aldım. Tercihen uygulamayı çevrimdışı almadan.
  • DB'ye erişimi nasıl güvenli hale getirebilirim? Benim genel anlayışım, SQL lite'ın iyi bir başlangıç ​​ama hepsinden öte, hepsi değil, dosya sistemi erişimi dışında hiçbirine sahip olmadığıdır. Özellikle DBA ya da hiçbir şeyden daha fazla mezun izin almak isteyebileceğiniz web uygulamaları için.

Geliştirici bakış açısına göre, neden SqlLite'in varsayılan olduğunu bilmenin önemli olduğunu düşünüyorum - bunun kolay olması ve iyi şekilde gösterilmesidir. Yeni geliştiricilere bir platform "satıyorsanız", çalışan bir web uygulamasını en az kargaşa ile ateşleyebilmek çok önemlidir. Bir veritabanı sunucusunun ayağa kalkması ve uygun şekilde yapılandırılması, kaçınılması gereken çok büyük bir engel olacaktır.


1
Eh, yedekleme SQLite Yedekleme API üzerinden yapılabilir . Hizmet odaklı sistemlerin aksine, SQLite istemcileri veritabanı dosyasıyla daha doğrudan konuştuğundan, SQLite'ın varsayılan olarak güvenli olamayacağını kabul edeceğim. Bununla birlikte, SQLite sistem arızalarına karşı koruma sağlamak için bir günlük kullanır ve ana bilgisayar işletim sistemi SQLite'ın kullandığı kilitleme ilkelerini uygun şekilde destekliyorsa güvenilir olmalıdır (ağ diski I / O kullanmaz). Resmi site, bozuk bir SQLite veritabanına yol açacak birkaç senaryo listeler .
Brian

SQLite işlemseldir . Çevrimiçi yedekleme yapmak için Yedekleme API'sini kullanın veya MediaWiki'nin yedekleme komut dosyasını uyarlayın . SQLite'ın güvenlik modeli hakkındaki genel anlayışınız doğrudur. Resmi güvenlik danışma 'sağduyulu': insanlar veritabanı dosyasına erişmek ve buna göre web uygulaması tasarımı nasıl düşünün.
Iain Samuel McLean Elder

@Brian - "Bu veritabanının nasıl bozulabildiğine" adanmış bütün bir sayfaya sahip başka bir DB düşünmeye zorlanırdım. Sql lite projesini şaşırtıcı bulduğumu ekleyeceğim - muhtemelen bu sayfaya sahipler çünkü bu tür bir tür fındıklar ve ayrıca her üretim kodu satırı için 10 satırlık test kodu gibi bir şey var ve gerçekten emin ve eksiksiz olmak istiyorlar.
Wyatt Barnett
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.