Büyük masaüstü uygulamalarında SQL neden bu kadar yaygın değil?


28

Bir yazılım geliştiricisi olarak, küçük ev yapımı uygulamalardan orta ölçekli işletme uygulamalarına kadar çeşitli projeler üzerinde çalıştım. Neredeyse her projede bir veritabanı kullandım ya da baştan kullanmamayı seçtiğim için pişman oldum.

Şimdi veritabanları ve genel uygulamalarda kullanımları hakkında birkaç şey merak ediyorum:

  • Neden Windows'un kendisi herhangi bir "merkezi" SQL veritabanı kullanmıyor? Örneğin:
    • Hatalar Raporlama verileri bir sürü dosyada saklanır,
    • Windows Update her şeyi düz dosyalarda saklar,
    • Simgeler önbellek, SQL vb. İle erişilmemiş gibi görünen çok garip bir tek dosyada saklanır.
  • Neden bu kadar çok büyük uygulama veritabanı kullanmaktan kaçınır? Örneğin, Microsoft Outlook, .pst dosyaları için kendi biçimini alarak ve bazı verileri kayıt defterinde saklayarak tekerleği yeniden icat etmek yerine gerçek bir veritabanı kullanarak kazanamaz mı?

Eğer veritabanı genel bir karmaşıklık ve küçük bir performans kaybı ek katmanı eklerse, çoğu durumda, özellikle de büyük ikili dosya yerine küçük organize veri parçalarının depolanması söz konusu olduğunda kodu daha kolay hale getirmenin büyük bir avantajıdır. akışları. Peki neden bu kadar az ürün aslında veritabanları kullanıyor? Muhtemelen Sqlite veritabanını kullanan tek bildiğim uygulama Firefox ve belki Microsoft Exchange'dir (ancak sonuncusu bir masaüstü uygulaması değildir).

Ayrıca, Microsoft Office veya Microsoft Expression gibi bir dizi uygulama, birleştirilmiş bir SQL veritabanına sahip olmanın faydalarını sağlamaz , böylece uygulamaları dağıtmayı, verileri güncellemeyi / yükseltmeyi, bu uygulamalar arasında veri paylaşmayı, yedeklemeyi kolaylaştırır , vb.?


4
Kendi platformun için konuş. ;) Birçok Mac / iPhone uygulaması, depolama için genellikle bir SQLite veritabanı kullanan CoreData uygulamasını kullanır.
mipadi

8
Veritabanları da sadece "bir demet dosya" dır. Sunulan tüm örneklerin aslında veritabanları olduğunu, SQL ile sorgulanabilen ilişkisel veritabanları olmadığını iddia ediyorum.
Allon Guralnek

8
Veri tabanı ile ilişkisel veri tabanı anlamına gelir.
Olivier Jacot-Descombes,

Yanıtlar:


20

1) Genel olarak, tam bir RDBMS çalıştırmanın ek yükü çok fazladır ve sisteme ve karmaşıklığa gereksiz yük ekler.

Birinin takılması hayatınızı bir geliştirici olarak kolaylaştırır ancak makinenin sahibinin ömrünü, makinelerinin yavaşlaması ve daha fazla sorunla karşılaşması nedeniyle daha da kötüleştirir. Geliştirici ve kullanıcı çatışmalarında, kullanıcının hemen hemen her zaman kazanması gerekir.

2) Birçok veri deposunun, SQL Server Express gibi bir şey tarafından karşılanmayan özel ihtiyaçları vardır.

Örneğin, hata günlükleri, yazma işleminin gerçekleşmesi ve verilerin erişilebilir olması olasılığını en üst düzeye çıkarmak için mümkün olan en basit şeye yazılmalıdır. SQL Server asla bu kadar basit olmayacak.

Daha karmaşık uygulamalar için, argüman çok özel kullanıcı durumları için optimizasyon etrafında daha fazla olma eğilimindedir - düz dosyalar hızlı şekilde şimşek çakıyor olabilir.


5
Tüm bir sunucuyu kurmanız gereken veri tabanı türünü kastettiğini sanmıyorum. SQLite bir sunucu olmadan çalışır ve açık kaynak uygulamalarında yaygındır.
laurent

@Laurent - o zaman neden yapmadıysa, neden aşağıdaki SQL Lite cevabını kabul ettiğinde bunu kabul edilen cevap olarak işaretledi?
Jon Hopkins,

30

Birçok uygulama SQLite'yi gömüyor . Web sitelerinden alıntı yapmak:

SQLite, bağımsız, sunucusuz, sıfır konfigürasyonlu, işlemsel bir SQL veritabanı motorunu uygulayan bir yazılım kütüphanesidir. SQLite, dünyanın en yaygın kullanılan SQL veritabanı motorudur. SQLite için kaynak kod kamu malıdır. "

Kullanılabilir API'lerden yalnızca birini kullanır, bir veritabanı, tablolar vb. Oluşturur ve SQL motoru, her şeyi kullanıcının dosya sisteminde herhangi bir yere koyabileceğiniz ikili bir dosyada depolar. Hepsinden iyisi, bu FLOSS.


23

Windows ile birlikte gelir ve Genişletilebilir Depolama Motoru (ESE) adlı bir veritabanı motoru kullanır .

ESE , diğer birçok Windows hizmet ve uygulamasında Active Directory, Exchange Server, Windows Mail ve Desktop Search tarafından kullanılır.

Geliştirme için, açık kaynaklı ESE sarmalayıcıları mevcuttur:

ESE'nin her modern Windows sürümü ile birlikte gönderilmesiyle veritabanı dağıtımı konusunda hiçbir kaygınız yoktur. Mimari olarak ESE, SQLite gibi yerleşik veritabanlarına benzer bir rol doldurur.


Belki bu özelliği tanıtmak için bir başarısızlık nedeniyle! 90'lı yıllardan beri neredeyse tamamen Microsoft teknolojileriyle geliştiriyor olmam ve bunu hiç duymamam nasıl mümkün olabilir? İyi bir ön uç olmaması bir başka sebep olabilir. Wikipedia'dan: "Yıllarca, yalnızca Microsoft tarafından kullanılan özel bir API idi, ancak o zamandan beri herkesin kullanabileceği yayınlanmış bir API haline geldi." Ayrıca: "JET Blue API, Windows içinde ve dışında giderek artan sayıda uygulama ve hizmet tarafından kullanımı kolaylaştırmak amacıyla 2005 yılında yayınlandı."
Mike, Monica

8

İlişkisel veritabanları her alan için en verimli veri yapısı değildir. Pek çok masaüstü uygulaması gömülü veritabanlarını kullanır, yalnızca bir kaç veri dosyası varsa bunların ne yaptığını kolayca söyleyemezsiniz.


Mesele şu ki: neden sadece Microsoft SQL Server (Express? Ya da her bir Windows platformuna önceden kurulmuş tek bir localhost SQL Server için özel bir lisans?) Kullanarak değil de (Microsoft? ?
Arseni Mourzenko

Çünkü söylediği gibi SQL her şey için uygun değil. Birçok uygulamaya özel veri deposu, bir görev için yüksek düzeyde optimize olacak ve sonuç olarak daha küçük bir alan kaplayan SQL'den daha hızlı olacaktır.
Jon Hopkins,

3
@MainMa: Şimdi yeni bir bağımlılık eklediniz: kullanıcının SQL Server'ı kurması ve çalıştırması gerekiyor. Bu önemsiz değil. Özel bir localhost SQL Server tüm Windows bilgisayarlara önceden yüklenmişse, farklı olabilir, ancak bu gerçekleşmeyebilir.
David Thornley

SQLServer Compact'ın kurulumu kolaydır: sadece birkaç dosyayı kopyalayın.
MarkJ

7

Neden Windows'un kendisi herhangi bir "merkezi" SQL veritabanı kullanmıyor?

Aslında, bu fikir bir süredir Microsoft'ta geliştiriliyor. Buna WinFS denir . Bu ilginç bir teknolojidir ve MSDN abonelerine açıktır. Birkaç gün sonra, bir sanal makineye kuracağım ve onunla oynayacağım.


2
Hala bir PC kullanmayı bildiğim zaman, Windows’ta (o sırada) Longhorn’un “gelecek büyük şey” olduğunu hala hatırlıyorum. :-)
Denis de Bernardy

6

Veritabanları esneklik sunar ve her özellik gibi neredeyse kesinlikle bir maliyeti vardır. Düz bir dosya işe yarayacaksa, hiç kimsenin geçici raporda olduğu gibi beklenmedik şekillerde verileri sorgulaması gerekmeyeceğini varsayabilirsiniz.

Veritabanları ayrıca birden fazla bağlantıyı / girişi işlemede iyi bir iş çıkarır. Yine, bu masaüstü uygulamanız için bir gereklilik değilse, neden ek karmaşıklığı eklemelisiniz? Kullanıcı arayüzü / asıl Outlook yüklemesi dışında, başka kaç tane uygulama veya kullanıcı bilgisayarınızdaki Outlook dosyasına yazmaya çalışıyor?

Tüm veriler ilişkisel bir veritabanında "SQL gibi tek bir dile uygun olan tüm verileri sorgulayabilmek istiyorum" perspektifinden olsaydı daha kolay olurdu, ancak bu pek çok uygulama için nadiren bir önceliktir.

Çoğu programcı şunlara bakar:

  • Uygulamanın ne yapması gerektiğini biliyorum, yapması gereken tek şey bu.

  • Uygulamam bu verilere erişebilecek ve / veya bunları değiştirebilecek tek kurumdur.

  • kendi tasarımımın basit bir dosya yapısı işe yarayacak

  • en az bir uygulama için, diğer kişilerin kodlarına güvenmekten kaçınmak ve tam kontrol sahibi olmak istiyorum.


1
+1. Haklısın: Masaüstü uygulamaları için (çoğu durumda) çoklu bağlantı yoktur; bu da bir SQL veritabanının faydasını azaltır.
Arseni Mourzenko 5:10
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.