2010-12-27 26 views
47

Herhangi biri SQLite veya SQL Server'ı kullanmak için en iyi olanı ayırt edebilir mi? Ben bir veri depolama ADD, silme, güncelleme olarak XML dosyası kullanıyordum .. Bazı biri hızlı işlem için SQLite kullanmayı önerdi ama SQLite bilmiyorum SQLite ile familier değilim.SQLite vs SQL Server

+5

Ayrıca biraz yanlış bir karşılaştırma. "Gerçek" RDBMS'lere (örn. Oracle, SQLServer, PostgreSQL, MySQL) karşı db-in-a-tek-dosya çözümlerini (örn., SQLite, MS Access) karşılaştırıyor musunuz? Sadece isimleri "SQL" ile karşılaştırıyor musunuz? ;-) Burada görmezden geldiğiniz pek çok ölçüt var (ticari kullanıma karşı açık kaynak - SQLServer ticari, örneğin SQLite açık kaynak iken); yazılmamış sütunlara karşı yazılan sütunlar (SQLite sütunları esasen yazılmamış); küçük ölçekli ölçeklenebilir; –

+2

@Breakhead, eğer bu kişisel kullanımınız içinse veya veritabanına yazıyorsa birden fazla kullanıcı tarafından eşzamanlı olarak yapılmıyorsa ve verilerin güvenliği endişe etmezse, SQLite büyük miktarda veriyle bile büyük ihtimalle sorun yaratacaktır. . MS-Access "JET" veri motoru için bir yedek olarak SQLite düşünebilirsiniz; SQLServer veya Oracle gibi iyi niyetli bir istemci-sunucu veritabanı motoru değildir. – Tim

+0

Durum bilgisi olan nesnelerin kalıcı olduğunu düşünebilirsiniz. Bu tekniği kullanıyorum ve gayet iyi çalışıyor.Sürmekte olan durum bilgisi olan nesnelerin SQLite ile değiştirmeye çalıştığım zaman, SQLite'i çok daha yavaş buldum - o kadar ki, onu tamamen parçalamak ve kalıcı durumdaki nesnelere geri dönmek zorunda kaldım. – John

cevap

76

SQLite, uygulamanızla birlikte uyguladığınız mükemmel bir katıştırılmış veritabanıdır. Müşterilerin yükleyeceği dağıtılmış bir uygulama yazıyorsanız, SQLite, ayrı bir yükleyici veya bakım yapmamanın büyük avantajına sahiptir; bu, uygulamanızın geri kalanıyla birlikte dağıtılan tek bir dll'dir.

SQLite aynı zamanda bir süreç içinde çalışır ve bir veritabanının getirdiği yükün çoğunu azaltır - tüm veriler önbelleğe alınır ve süreç içinde sorgulanır.

SQLite, .NET uygulamanızla SQL sunucusundan daha iyi bütünleşir. SQLite motoru içinde çalışan herhangi bir .NET dilinde özel işlev yazabilirsiniz, ancak yine de uygulamanızın arama süreci ve alanı içinde yer alır ve böylece ek verileri entegre etmek veya bir sorguyu yürütürken eylemleri gerçekleştirmek için uygulamanızı çağırabilirsiniz. Bu çok olağandışı yetenek bazı eylemleri önemli ölçüde kolaylaştırır. SQLite genellikle SQL Server'dan çok daha hızlıdır. Bununla birlikte, SQLite tek seferde tek bir yazmacını destekler (tek bir işlemin yürütülmesi anlamına gelir). SQLite, bir veritabanına ihtiyaç duyduğunda (okunabilir veya yazılır) tüm veritabanını kilitler ve yalnızca bir yazar bir defada bir yazma kilidini tutabilir. Hızından dolayı, bu durum, düşük ve orta boyuttaki uygulamalar için bir problem değildir, ancak daha yüksek bir yazma gücüne (saniyede yüzlerce) sahipseniz, o zaman bir darboğaz haline gelebilir. Veritabanı verilerini farklı veritabanlarına ayırmak ve yazılanları sıraya göre önbelleğe almak ve bunları eşzamansız olarak yazmak gibi bir dizi olası çözüm vardır. Ancak, uygulamanızın bu kullanım şartlarına uygun olması ve SQLite için yazılmamış olması durumunda, daha iyi taneli kilitleme özelliğine sahip SQL Server gibi başka bir şey kullanmak en iyisidir.

GÜNCELLEME: SQLite 3.7.0, yazma sırasında eşzamanlı okumayı destekleyen Write Ahead Locking adında yeni bir günlük modu ekledi. İçsel çok çekişmeli çekişme testimizde, zamanlama, aynı çekişmeli okuma/yazma dizisi için 110 saniyeden 8 saniyeye çıktı.

+2

Sadece "SQLite, .NET uygulamanızla bütünleşir * SQL sunucusundan daha iyi *" fikrini tartışırdım. [emphasis added] Her ikisi de bir .NET uygulaması ile farklı şekillerde entegre edilebilir. SQL Server'da CLR sınıflarını tanımlayabilir ve bu sınıfların örneklerini istemci ve sunucu arasında gönderebilirsiniz. SQlite'de, bir SQL dilinde SQLite'ye aktarılabilen özel UDF'ler oluşturabilirsiniz. Ayrıca, "düşük ve orta ölçekli uygulamalar" gibi bir deyim gerçekten anlamsızdır. "Beden" ile ne demek istiyorsun? – Tim

+0

@Tim, özellikle saniyede * yüzlerce yazım gerektirecek şekilde düşük ila orta arası olarak adlandırdım *. Bu miktarın üstünde çekişme çok sorunlu hale gelir. –

+1

Merhaba Samuel, sql, sql'nin tüm işlevlerini destekliyor mu? VEYA hafif mimari nedeniyle sınırlama fonksiyonu kullanır. –

4

Her ikisi de farklı ligde. Biri kurumsal düzeyde veri yönetimi için oluşturulmuştur ve diğeri mobil cihazlar içindir (gömülü veya sunucu daha az ortam). SQLite dağıtımları veriyi yüzlerce GB'de tutabilmekle birlikte, bunun ne için oluşturulduğu değil.

Güncelleme: güncellenmiş soru yansıtmak için: Lütfen SQLite üzerindeki this blog post numaralı telefonu okuyun. Umarım bu size yardımcı olur ve SQLite'den .net'e programatik olarak erişmek için kaynaklara yönlendirmeniz için size erişmenize izin verir.