Ne zaman bir veritabanı kullanmanın uygun olduğunu belirlemenin en iyi yolu nedir?


13

Programlama kariyerime PHP ve MySQL kullanarak web geliştirmede başladım. Bazı ayar / parametre verilerinin yanı sıra en dinamik verilerin depolanması için db kullanmaya oldukça alışkınım. Bazen çok fazla veri olurken, diğer zamanlarda tablolardaki girişler çok az olur. Bana göre bu sadece doğal görünüyordu ve bildiğim kadarıyla bu web geliştirme konusunda az çok kabul edilebilir bir yaklaşım. (Yanılıyorsam lütfen beni düzeltin...)

Şimdi masaüstü uygulamalarına giriyorum ve doğal eğimim yine uygulamanın kullanımı yoluyla oluşturulacak birçok bilgi depolamak için bir db kullanmaktır. Ancak, söyleyebildiğim kadarıyla (kullandığım) bir db kullanan uygulamaları görmüyorum. [DÜZENLEME: O zamandan beri bunun birçok uygulamanın programın içine yerleştirilmiş hafif dbs kullanması nedeniyle hatalı bir varsayım olduğu belirtildi .] Bunun nedeni nedir? Hangi noktada bir db kullanmak uygundur? Bu konuda herhangi bir standart var mı? Ayrıca bir masaüstü uygulaması geliştirmek için bir db kullanmamanın nedenleri nelerdir?


2
"Ancak, söyleyebildiğim kadarıyla (sık kullandığım) uygulamaları bir db kullanan görmüyorum"? Neye bağlı olarak? SQLite kullanıyorlarsa, veritabanı kullanıp kullanmadıklarını nasıl anlarsınız?
S.Lott

Bu yüzden yanıldığım bir olasılık olduğunu bildiğim kadarıyla söyleyebildiğim kadarını söyledim. Ben gömülü db's kullanan bazı uygulamalar olabilir düşündüm ... Dbs kullanmak uygulamalar için oldukça yaygın mı?
Kenneth

@Kenneth: SQLite gibi gömülü DB'ler için lütfen Google. Çok var. Yaygın olarak kullanılırlar. Apple'ın iOS cihazı olan AFAIK tüm kalıcılık için kullanıyor . Lütfen Google.
S.Lott

2
Ben çok Google. Bazen hiçbir şey her zaman googling bulamayacağınız deneyimli fikirlerin yerini almaz.
Kenneth

1
Bu yorumların yanlış varsayımı düzeltmek için yeterli olduğunu düşünüyorum. Hata için özür dilerim. Sağlıklı bir googling ve soru sorma karışımı kullandığımı hissediyorum. Bazen ikinci IMHO'nun yerini tutamaz. Şimdi Google'ım daha iyi yönlendirilecek ve daha üretken olacak.
Kenneth

Yanıtlar:


4

uygulamanız belge yönelimliyse, şeyleri bir belge dosyasında saklayın

uygulamanız tek bir belge için (XML belgesi gibi) çok fazla yapılandırılmış veriyle ilgileniyorsa, bir veritabanı kullanın


7

Bir veritabanı sistemi geleneksel olarak nispeten ağır bir hizmet olarak görülmüştür - buradaki her istemci makineye mutlaka kurmak istemezsiniz. Aslında, gerçek bir DB sisteminin "ideal" bir çözüm olacağı durumlarda (çok sayıda verinin kaydedilmesi gereken masaüstü GUI uygulama geliştirme) oldum - ancak gün içinde sadece mevcut veritabanlarının nispeten ağır olması nedeniyle, bunun yerine düz veri dosyalarıyla gittik.

Bugünlerde daha hafif veritabanları olmasına rağmen, bu hala istemci tarafı veritabanlarına karşı geçerli bir argüman. Birkaç düzine ayar ve parametre depolaması gereken basit bir masaüstü uygulaması (örneğin, basit bir masaüstü oyuncağı veya oyunu) düşünün. Bir kişinin sadece uygulamanızı çalıştırmak için MySQL'i yüklemesini sağlamak için en üstte yol görünüyor.

Web geliştirmeyle birlikte, sunucu doğal olarak bir veritabanına sahip olmanın elbette bir arka ucudur. Örneğin. Kullanıcıların sonunda bir veritabanı kurma konusunda endişelenmeleri gerekmez.


Bu yüzden, tek başına uygulamalar için bir db kullanmamanızı tavsiye edersiniz, o zaman ağır miktarda veri gerçekten garanti etmedikçe?
Kenneth

hafif db'leri kullanma hakkındaki düşünceleriniz neler ... tam ölçekli db'lerle aynı?
Kenneth

1
@Kenneth: "Değişir" derdim. Uygulama, gerçekten uygun bir DB'de bulunması gereken büyük hacimli tablo verileri çağırıyorsa, argüman uygulamayı hafif bir DB ile gönderecek kadar güçlü olabilir. Ancak, sadece yapılandırma / ayarlar türü verilerse, büyük olasılıkla aşırı doludur.
Bobby Tables

5

Masaüstü uygulamaları çalışırken durumunu korur. Oysa web geliştirme genellikle yapmaz. Bu nedenle, bir kullanıcı ayarını sayfa yüklemeleri arasında bir veritabanında depolamanız gerekebilse de, bir masaüstü uygulamasında bunları bellekte tutarsınız. Bu, bu tür kalıcı depolama gereksinimini büyük ölçüde azaltır. Kullanımlar arasında tercihleri ​​saklamak istediğinizde, hepsini tek bir dosyaya kaydedebilir veya Windows kayıt defteri gibi bir yere koyabilirsiniz.

Bununla birlikte, veritabanı sistemleri masaüstü uygulamalarında oldukça fazla kullanılmaktadır. Web'den çok önce, masaüstü uygulamaları DBMS'lere bağlanmıştır. Öncelikle belge tabanlı olmayan uygulamalar için. Bu günlerde, hafif motorların daha iyi kullanılabilirliği ile çizgileri biraz bulanık görüyorsunuz. Örneğin, SQLite db'leri birkaç uygulamamda belge olarak kullanıyorum .


+1 Çok kullanıcılı, çok konumlu, eşzamanlı engelleme güncellemeleri gibi karmaşık kalıcılık sorunlarınız yoksa, geleneksel bir veritabanı aşırıya kaçabilir. Söz konusu veriler oldukça statikse (büyüyebilir veya eklenebilir, ancak gelişmez veya güncellenmezse) ve yoğunluk / rekabet sık veya sapkın değilse (ücretsiz olarak bir kilidi beklemek için yan etkiler / kullanıcı deneyimi) performans ve karmaşıklık dengeleri dikkate alındığında kabul edilemez), bir veritabanına ihtiyacınız olmayabilir.
JustinC

4

Bakmak isteyebileceğiniz bir şey, gerçek bir çalışan veritabanı hizmeti gerektirmeyen hafif veritabanlarıdır. Örneğin Microsoft cephesinde ücretsiz olan SQL Server Compact vardır , veritabanı için sadece tek bir dosya ve uygulamanıza eklenen bazı DLL dosyaları gerekir ve geliştiricinin bakış açısından "gerçek" SQL Server ile aynı şekilde davranır.

Diğer platformlarda da benzer seçenekler olduğunu düşünüyorum.


1
Java tarafında buna çok benzer bir örnek Derby'dir. Bence başkaları da var.
jprete

1
Bu ideal bir çözüm olabilir gibi geliyor ... Gerçekten db kullanmaktan zevk! lol
Kenneth

Hafif db'ler kullanmanın olumsuz yanları var mı?
Kenneth

@Kenneth: Kurulumunuzu büyütürler ve kod tabanını artırabilirler. Ancak bu, bir istemciye tüm veritabanı sunucusunu kurmaktan çok daha azdır, bu genellikle uygulama dağıtıldığında ve daha önemli bir veritabanına ihtiyaç duyulduğunda yapılır. Berkeley DB en sık kullanılan biridir.
Orbling

başka bir seçenek, hem RAM hem de disk alanında çok daha hafif olan ve keyfi sınırlamalar olmayan SQLite'dir. MS olmayan akıllı telefonlar ve web tarayıcıları tarafından kullanılmasına şaşmamalı.
Javier

2

Web uygulamalarında, kalıcı bir durumu merkezi bir depolama biriminde saklamak önemlidir. Web uygulaması genellikle ilk darboğaz olduğundan, hangi kopyanın verilere sahip olduğunu sorgulamak zorunda kalmadan dağıtabilmek önemlidir ('Paylaşılan Hiçbir Şey' ilkesi). Sadece bir veritabanı değil, aynı zamanda memcachedkuyruk sistemleri de var.

Masaüstü uygulamaları aynı ölçeklenebilirlik hedefine sahip değildir. Tipik olarak, verilerin çoğu her bir iş istasyonunda yerel olarak depolanır. Veri paylaşımı çoğu durumda farklı bir konudur. Bu bir veritabanı kullanmak için büyük bir nedeni ortadan kaldırır.

GUI uygulamaları ayrıca bellekteki nesnelerin karmaşık bir ağı olarak ele alınabilecek karmaşık belgelere sahip olabilir. Yapıyı ilişkisel bir DB şemasına normalleştirmek, soruna önemli bir karmaşıklık katabilir, bazen her şeyi tek bir yan akışta serileştirmek daha kolaydır. Birçok OOP çerçevesi sadece bunun için bazı tesisler içerir.

Yine de, saklanan belgelerin ana uygulamanın dışındaki araçlarla okunabilir hale getirilmesi birçok durumda büyük bir avantajdır, bu nedenle insan tarafından okunabilir formatlar (XML, JSON, YAML, vb.) Veya birkaç basit parçayı birleştiren bir zip dosyası daha fazla ve daha yaygın.

Aynı şekilde, gömülebilir bir veritabanı kitaplığı (BDB, Tokyo Dolabı, SQLite, MS-SQL * sunucusu Compact, vb.) Kullanmak başka bir harika yaklaşımdır.


1

Veritabanları overkill olabilir ancak genellikle yok olması için. Çok basit programların bunlara ihtiyacı yoktur. Belgeniz önemsiz bir süre içinde belleğe yüklenebilir ve orada sorunsuz bir şekilde kalabilirse, birçok program için gerçekten bir taneye ihtiyacınız yoktur.

Örneğin:

#include "superheader.h"

int main()
{
    int row=2, column=2;
    DatabaseType db;
    db.ConnectTo("programDB", "user", "pass");
    db.setTable("messages");
    string hello_world=db.fetch(row, column);
    cout<<hello_world;
    return 0;
}

Bu aşırı derecede basit, ama açıkçası bu çok fazla. "Merhaba Dünya" için bu düzeyde veri yönetimine sahip olmanın gerçek bir anlamı yok

Genellikle gittiğim kural genellikle birçok veri kümeniz varsa bir veritabanı kullanmaktır, özellikle de benzersiz bir şekilde farklıysa VEYA veri miktarı oldukça büyükse bir veritabanı kullanır . Veritabanları genel olarak bazı ek yüklerle ilişkilidir, ancak gerçekten fazla olmayan birçok veri vardır. Örneğin, küçük, hafif, bellek içi veritabanları bazen ağır işleme, zamanlama veya verilerde çok fazla dinamik değişiklik olan küçük projeler için yararlıdır.

Farklı kodlama stilleri vardır, birçok kez bir veritabanında yanlış bir şey yoktur, ancak çoğumuz temel görevler için 'o kadar ileri gitmeyeceğiz'. Doğru veritabanının performans avantajları sunabileceği başka zamanlar da vardır . Özellikle verinin nerede olacağı, ne kadar süre orada olacağı ve kullanım ömrü boyunca neyi değiştireceği konusundaki farklılıkları anlamaya çalışın.


1

Bir db kullanmak her zaman doğru şeydir ve SQLite uygulamaları ile pratikte her dil için bir tane kullanmayan sadece kötü tasarım karar verme. Birini kullanmamanın tek nedeni gömülü programlama veya başka bir tür uygulama dışı programlama yapıyorsanız. Verileri ve ayarları SQL gibi bildirici bir dille sorgulamak, zorunlu sözdizimi ile düz dosyaları veya bellekteki diğer nesneleri taramaktan çok daha doğaldır. Ayrıca, veri işlemlerini uzun vadede kodu daha modüler ve bakımı kolay hale getiren diğer uygulama kodlarından temiz bir şekilde ayırır.

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.