Windows / Linux neden ilişkisel Veritabanları (RDBMS) kullanmıyor?


32

Windows / Linux neden ilişkisel veritabanlarını ( RDBMS ) kullanmıyor ?

Tüm verileri depolamak için dosya sistemlerini kullandıklarını biliyorum, ancak web sitelerinde / web uygulamalarında kullandığımız gibi veritabanlarını kullanmanın daha verimli olduğunu düşünmüyor musunuz?

Lütfen depolama için bir veritabanı üzerinden bir dosya sisteminin kullanımı hakkında ayrıntılı bilgi verin.

Bu, bir metin dosyasındaki verilerin ayrıştırılması yerine veritabanının kullanımı ne zaman tercih edilmelidir? Sadece işletim sistemi bağlamında konuşuyorum ve bu soru genelleştiriliyor.


32
Bir dosya sistemi olan bir veri tabanı.

20
Çünkü dosya sistemlerini veri tabanlarını uygulamak için gereklidir .
Kilian Foth

16
Windows bir veritabanı kullanır , buna "Kayıt Defteri" denir. Yoksa "ilişkisel veritabanı" mı demek istiyorsun? Bu farklı bir soru.
Doktor Brown

6
@ gnasher729 Dosya sistemi çok özel bir veri tabanıdır ve bu nedenle sadece belirli veri türleri için iyidir. Diğer veri türleri, farklı türdeki veri tabanlarıyla (örneğin ilişkisel) daha iyi sunulur.

6
@KilianFoth, pek değil. Bir ham disk bölümüne yazabilirsiniz (bir işletim sistemi dosyasıyla karşılaştırılamaz).
Paul Draper

Yanıtlar:


60

Günümüzde çoğu veritabanı yönetim sistemi (örneğin PostGreSQL , MongoDB , vb ...) dahili olarak verilerini işletim sistemi dosyalarında tutmaktadır (geçmişte bazı DBMS'ler doğrudan ham disk bölümlerini kullanmıştır).

Hala dönen sabit diskler kullanan yeni bilgisayarlarda , disk çok yavaş - CPU veya RAM'e bağlı olarak - birkaç yazılım katmanı eklemek önemli değil. SSD teknolojisi bunu biraz değiştirebilir ve bazı dosya sistemleri SSD'ler için optimize edilmiştir.

Dosyalar çoğu işletim sisteminde genel olarak tarihsel ve sosyal nedenlerden dolayı (özellikle C derleyicileri ve çoğu araç - editörler, bağlayıcılar - dosyalar istiyor, bu yüzden bir tavuk ve yumurta sorunu var) ve çok fazla iyi dosya olduğu için var sistem uygulamaları.

BTW, bazı temel sistem tesisleri veritabanlarını kullanabilir. Örneğin, Linux'ta PAM veritabanlarındaki bilgileri kullanmak için yapılandırılabilir (ancak bu nadiren pratikte yapılır). Ayrıca, bazı posta sunucuları verilerinin bir kısmını veya çoğunu veritabanlarında depolayabilir (örn. Exim ).

Dosyalar veritabanlarından biraz daha düşük soyutlamalardır, bu nedenle uygulanması daha kolay ( Linux çekirdeğindeki dosya sistemleri ve VFS katmanı olarak) kullanımı daha kolay ve daha hızlı olabilir. Özellikle, dosyalar üzerindeki işlemler veritabanlarındakilerden çok daha sınırlıdır. Aslında, dosyaları veya dosya sistemlerini çok kısıtlı veritabanları olarak görebiliyordunuz!

Bir tasarım olabilir işletim sistemi herhangi bir dosya olmadan , ancak diğer bazı dikey ile kalıcılık makineleri (örneğin her haiz süreci kalıcı olmak, o zaman çok fazla önemsemiyorum açıkça OS kalıcı kaynakların yönetimi olduğundan, depolama hakkında). Bu, birçok akademik işletim sisteminde (1) (ve ayrıca 1980'lerin Smalltalk ve Lisp makinelerinde , bir şekilde IBM System i'de , AS / 400 , ve osdev ile bağlantılı bazı oyuncak projelerinde yapıldı.), ancak işletim sisteminizi bu şekilde tasarladığınızda mevcut birçok araçtan yararlanamazsınız (örneğin, derleyicinizi ve kullanıcı arabiriminizi sıfırdan yapmanız gerekir, bu da çok fazla iş gerektirir).

Mikro çekirdek işletim sistemlerinin, dosya sistemleri yalnızca uygulama sunucuları olduğu için çekirdek katmanları tarafından sağlanan dosyalara gerek duymayabileceğine dikkat edin (örn . Kullanıcı alanında çalışan Hurd çevirmenleri ). Ayrıca bugünün MirageOS'undaki unikernel yaklaşımına bakın.

Linux (onun ilham çoğu var ve muhtemelen Pencereler, VMS & Unix çalışmalarına ihtiyaç dosyaları). En azından, init programı (çekirdeğin başlattığı ilk program) bir dosyada saklanan bir çalıştırılabilir olmalıdır (genellikle /sbin/init, ancak bugünlerde sistemli olabilir ) ve (neredeyse) diğer tüm programlar çalıştırma ile başlar (2). ) Sistem çağrısı bir dosyada saklanmalıdır. Bununla birlikte, FUSE , dosya benzeri olmayan şeylere dosya benzeri anlamlar vermenizi sağlar.

Ayrıca Linux'ta (ve belki de bilmediğim ve hiç kullanmadığım Windows'da bile) sqlite'nin bir dosyadaki bazı SQL veritabanlarını yöneten ve bunun için bir API sağlayan bir kütüphane olduğuna dikkat edin. Android'in (bir Linux varyantı) çok sayıda sqlite dosyası kullandığı bilinmektedir (ancak yine de POSIX benzeri bir dosya sistemine sahiptir).

Ayrıca uygulama denetimini işaretlemeyi de okuyun (birçok işletim sisteminde, işlem durumunu dosyalara yazmak için uygulanır). Aşırı derecede etkilendiğinde, bu yaklaşımın uygulama dosyalarını el ile yazması gerekmez (ancak yalnızca kontrol noktası makine kullanarak tüm işlem durumunu sürdürmek için).

Aslında, ilginç olan soru şu anki işletim sistemlerinde neden hala dosya kullanıyor ve bunun cevabı eski ve ekonomik ve kültürel nedenler (ne yazık ki, çoğu programlama dili ve kütüphanesi bugün hala dosya istiyor).


Not 1: kalıcı akademik işletim sistemleri Lisaac ve Grasshopper'ı içerir , ancak bu akademik projeler etkisiz görünüyor. Ayrıca http://tunes.org/ adresine bakın ; etkin değil, ancak bu tür konular hakkında birçok tartışmalar oldu.

Not 2: dosya kavramı zaman içinde geniş ölçüde değişti ( ilk programlama deneyimlerime ilişkin şu cevaba bakınız): 1980'lerde ilk MSDOS IBM PC'lerinde (dizin yok!), VMS-1978 Vaxen - (her ikisi de sabit kayıtlara sahipti) ilkel bir sürümleme sistemine sahip dosyalar ve sıralı dosyalar olan 1970'lerin ana bilgisayarlarında ( OS / VS2 MVS ile IBM / 370 ) çok farklı dosya ve dosya sistemleri (özellikle sabit disk erişim zamanlarının oranlarının çekirdek bellek erişim süresi birkaç bin idi - o zamanlar bugünün diskleri kesin olsa bile, disk bugünden nispeten daha hızlı çalıştı.önceki yüzyıldan daha hızlı, bugün CPU / disk hız oranı yaklaşık bir milyon; ama şimdi SSD'lerimiz var). Ayrıca, dosyalar kalıcı olduğunda ( CAB500 manyetik davulda, 1960'larda veya MRAM kullanan gelecekteki bilgisayarlarda ) dosyalar daha az (ya da hatta değil) kullanışlıdır.


9
Ayrıca, bazı dosya sistemlerinin aslında bir dizi RDBMS özelliğine sahip olduğuna dikkat çekmek önemlidir. Örneğin, BeFS'deki dosya meta verileri (özellikle genişletilmiş meta veriler) B + ağaçlarıyla dizine eklenir ve BeOS dosya yöneticisi, dosyaları bulmak için dizine alınmış meta verileri arayan SQL benzeri bir arama motoruna sahiptir.
greyfade

2
Benim cevap koymadan cesur değilim, ama hem tunes.org & J.Pitrat blog yazılımı ve işletim sistemleri hakkında görüşlerinizi genişletmek olabilir.
Basile Starynkevitch,

4
@greyfade: Bir dosya sistemi bir nesne veritabanıdır. Bildiğim hiçbir dosya sistemi ilişkisel sorguları cevaplayabiliyor (örneğin, belirli bir aralıktaki mod zamanlı dosyalar.) Tüm dosyaların mod zamanını sorgulayarak ve kendinizi filtreleyerek bunu yapmanız gerekir. Bazı dosya sistemleri, doğrudan bir nesne veritabanı olarak kullanıldığında (dosya adının anahtar olduğu milyonlarca çok küçük dosyayı depolar) düzgün bir şekilde çalışır, ancak diğerleri bu tür iş yükünü tamamlar.
Peter Cordes,

3
@PeterCordes: BeFS yaptı. Tüm meta veriler B + ağaç dizinli olduğundan, aralık sorgularını, joker karakterleri, birleştirmeleri ve diğer eğlenceli şeyleri destekledi. Microsoft’un WinFS’de de aynı şeyi yaptığını duyduğumu hatırlıyorum.
greyfade

4
PalmOS, bir dosya sistemine sahip olmayan oldukça yaygın bir işletim sistemi idi. Bunun yerine doğrudan RAM / flaş üzerine uygulanan ilişkisel bir veritabanına sahipti (orijinal donanım bugün iPhone'lar gibi flash bellek kullanmıyordu, ancak hem RAM hem de disk için pil destekli statik RAM kullandı).
slebetman

23

Her ne kadar bu görüş temelli olsa da, bence bu başka bir tarihi eser. İlk işletim sistemleri, o sırada mevcut donanımın özelliklerine oldukça güçlü bir şekilde bağlı olan performans için basit bir dosya sistemi tasarımı kullanıyordu ve o zamandan beri aynıydı. Eski dosya okuma / yazma API'lerini oluşturduktan sonra daha fazla işlemsel sorgu / ekleme API'leri değiştirmek zordur.

Mevcut tüm dosya sistemlerinin bu eski API'ler ile geriye dönük olarak uyumlu olma gereksinimi vardır.

Microsoft , Longhorn'un geliştirilmesinde dosya sistemini RDBMS tabanlı bir sistemle değiştirmeyi düşünüyordu . Bu, çekmeleri için çok fazla bir değişiklikti, ancak çabalarının Windows Search (bir RDBMS'nin meta verilerin bir kopyasını depolamak için kullanıldığı) ve SQL Server'ın Filestream sistemi (burada bir dosya verilerinin veritabanı tablosu, işletim sistemine hem Windows Gezgini'nin verilere erişmesine izin veren sıradan bir dizin hem de aynı verilerin SQL sorgularını sunar).

Diğer işletim sistemlerinde RDBMS dosya sistemleri bulunur. AS / 400'ler bunlara sahipti , ama onlar hakkında yeterince şey öğrenmedim; O zaman ne kadar garip geldiğini hatırlıyorum). Diğer ana sistemlerin de aynı yaklaşıma sahip olduğunu düşünüyorum.


1
Bellek hizmet veriyorsa OS / 400 aka i5 / OS'de DB2 UDB'yi düşünüyor olabilirsiniz (şimdi sadece "IBM i" olarak adlandırılır): publib.boulder.ibm.com/iseries/v5r2/ic2924/info/rzamb/…
Brian Cline

1
Evet, "-exec ile bulun" yerine dosya izinlerinde BEGIN TRANSACTION / COMMIT için çok iyi olurdu. Yönetici seviyesine giren düşük seviyeli ilkel dosya sisteminin yükselmesi tesadüfidir ve programlama panosunun yoluna gitmelidir. Uygun bir bytestream depolama ve meta veri yönetim sistemi olarak "dosya sistemi" (bytestream içeriğinin yorumlanması hala uygulama katmanlarına bırakılsa da, aksi halde baş ağrıları oluşacaktır). Evet istiyoruz!
David Tonhofer

12

Asıl sebep, buna ihtiyaç duyulmamasıdır. Veritabanlarını birleştirmek yerine dosyaların üzerine koymak, durumların büyük çoğunluğunu ve en azından büyük ölçüde azaltılmış karmaşıklığı olan birleştirilmiş bir çözümü ele alır. Bazı durumlarda başkalarının da belirttiği gibi, dosya bölümlerini de veritabanlarının üzerine yerleştirdik (izin yapıları gibi). Bu durumda, bu izinleri yöneten veritabanı, ticari bir RDBMS'den oldukça basittir.

Onları birleştirmenin avantajları var, ancak şimdiye kadar bunlar hareketler yavaşça büyüyor. İnsanların "Bana 2010'dan beri aldığım her faturanın 3. sütunu ver ve birlikte topla" demesinin ne kadar nadir olduğunu düşünün ya da "Excel'den çıkarmadan bu dosyayı silmeme izin verme elektronik tablo da. "

Dosya sistemlerinin ilişkisel veritabanlarına göre, çalışmalarını sürdüren birkaç avantajı vardır:

  • Çok daha basitler. Bu bir bilgisayarı önyüklerken çok önemli bir şey. Depolama için bir RDBMS'ye sahip oldukları Android'de bile , başlangıçtaki önyükleme işlemini yönetmek için düz eski görüntüler vardır.
    • Sınırlamaları tanımlamak daha kolaydır. Sınırsız bir makinede, RDBM'ler oldukça fazla güç sağlar. Bununla birlikte, dosya sistemi dünyasında, dönen bir diskin üzerine doğrudan yerleştirildiğinde hızlı olmaya çalışmaktan kaynaklanan bir çok sınırlama vardır. Bir RDBMS sorgusunun, bir dosya sistemi için aynı garantileri sağlamaktan daha bu sınırlamaları aşmadığını kanıtlamak daha zordur.
  • Hiyerarşik yapıları daha iyi ele alırlar. Çoğu durumda, insanların dosyaları hiyerarşik bir biçimde depolaması hala doğaldır. RDBMS'lerde bu özel bir durumdur. Dosya sistemleri bu özel durum için optimize eder, RDBMS'ler yapmaz.
  • Güvenilirlik. İki katın bağımsız çalıştığını kanıtlamak devasa bir sistemin mükemmel çalıştığını kanıtlamaktan daha kolaydır. RAID dizileri, elektrik kesintileri zamanlarında arızaya karşı güvenli dergiler ve diğer gelişmiş özelliklerin, ACID veya yabancı anahtar kısıtlamaları gibi şeylerle ilgilenen katmanın altındaki bir katmana uygulanması daha kolaydır .

1
güvenilirlik: DB'yi RAID aygıtının üzerinde çalıştırabilir, tıpkı bir RAID aygıtındaki bir dosya sistemini çalıştırabilir ve doğrudan bir diski kullanabilirsiniz. Ancak, günlük kaydı dosya sistemi / DB içinde yapılmalıdır, ancak (bunun yerine yazma önbelleğini devre dışı bırakarak doğruluk garantisi vermek istemezseniz ve I / O'ları, yani syncmodunu asla yeniden sıralamazsanız ). bir alt dizindeki bir ton öğenin başka bir alt dizindeki performansı yavaşlatmadığı hızlı heirarchical performans. Her dir veya dosya farklı bir tablo
Peter Cordes

güvenilirlik: IBM i serisi işletim sistemleri, anabilgisayar tarzı kullanım için tasarlanmış olduğundan, hayal edebileceğinizden daha güvenilir olacak şekilde tasarlanmıştır. Hiyerarşiler sadece dosya sistemi kısıtlamaları nedeniyle var, bu nedenle MS daha sonra arama yapmak ve mevcut dosya sisteminin üzerine DB işlemleri yapmak istiyor. Hiyerarşileri kullanmadan nasıl hiyerarşiye sahip olabileceğinizi gösteren bir örnek olarak gmail'i arayın!
gbjbaanb

3

Diğer cevapların, işletim sistemlerinin neden dahili / özel olarak ilişkisel veritabanlarına dayanmadığına dair geniş bir nedenler yelpazesi sağladığını düşünüyorum, bu yüzden sadece bir kez tökezlediğim ilginç bir bilgiyi paylaşacağım.

Görünüşe göre, kullanımları haklı olduğunda ilişkisel veritabanlarını dosya sistemleri olarak bağlamanıza izin veren teknolojiler vardır. Oracle DBFS (Veritabanı Dosya Sistemi) bir örnektir. Dokümantasyondaki bu pasaj, arkasındaki mantığı oldukça iyi açıklıyor:

Veritabanı Dosya Sistemi (DBFS), veritabanında depolanan dosyalar için standart bir dosya sistemi arabirimi uygulamak için, dosyaları depolamak için veritabanının özelliklerini ve ilişkisel verileri etkin bir şekilde yönetmede veritabanının güçlü yönlerini kullanır. Bu arayüz ile, dosyaları veritabanına kaydetmek, özellikle kullanımı BLOBve CLOBprogramlı arayüzler için yazılan programlarla sınırlı değildir . Veritabanındaki dosyalara, dosyalara etki eden herhangi bir işletim sistemi (OS) programı kullanılarak artık kolayca erişilebilir.

Çözüm, veritabanı tablolarında depolanan LOB verileri için bir dizi arabirim (komut satırı istemcileri, kod kitaplıkları) sağlar. Bu, Windows ve Linux işletim sistemlerinde kullanılabilir (söyleyebildiğim kadarıyla entegrasyon seviyesi bunlar arasında değişiklik gösterse de)

Oracle DBFS bileşenleri

Kaynak: docs.oracle.com

Belgelere göre, dosya sistemi Linux'ta şeffaf bir şekilde kullanmak mümkün olmalıdır

Linux'ta dbfs_clientayrıca, FUSEVeritabanında depolanan dosyalara şeffaf erişim sağlayan ve Linux çekirdeğinde herhangi bir değişiklik gerektirmeyen bir dosya sistemi bağlama noktası uygulamak için Kullanıcı Alanındaki Dosya Sistemini ( ) çekirdek modülünü kullanan bir bağlantı arayüzü de vardır . FUSEÇekirdek modülünden standart dosya sistemi çağrıları alır ve onları DBI İçerik Deposu'ndaki PL / SQL prosedürlerine OCI çağrılarına çevirir .

Bu nedenle, sorunuzun cevabı, genel olarak, bir işletim sisteminin bir ilişkisel veri tabanını dosya sistemi olarak kullanması için bir neden olmadığıdır (ve bir işletim sisteminin temel bileşenleri söz konusu olduğunda bu gerçekten zahmetli olur). Aynı zamanda, bir problem onu ​​çağırdığında, birisinin yapması da mümkündür.


2

Herhangi bir işletim sisteminin temel işlevi uygulamalar, donanımlar ve kullanıcılar arasındaki etkileşimi kolaylaştırmaktır.

Öyleyse .. neden Windows / Linux işletim sistemi ilişkisel Veritabanları (RDBMS) kullanmıyor? Bu, incilicik oranlar meselesidir, ancak kısa cevap şudur: Dosya sistemi olarak rdbms gibi karmaşık bir yapı kullanmanın herhangi bir yararı yoktur.

"İlişkisel", "İlişkisel Veri Tabanı" ndaki işlemsel kelimedir ve bir dosya sisteminde depolanan çoğu veri diğer verilerle ilgisizdir. Dosya sistemleri genellikle ilişkisel olanları değil, sınırlı veri tabanları olarak uygulanır.


Belki daha iyi bir soru olabilirdi - neden uygulamaların dosyalara basit bir şekilde veri aktarması yerine veritabanlarına ihtiyaç duyuyor? Bu soruya asla tatmin edici bir cevap bulamadım. İlişkisel bir veritabanının tüm varsayımsal faydaları, bir dosya
sustemiyle
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.