NoSQL hakkında çığır açan herhangi bir şey var mı? [kapalı]


46

Ben çok sağlam bir İlişkisel Veri Tabanı görevlisiyim ve 3. normal forma kadar her şeyi anlıyorum, SQL'in cebirsel küme teorisi köklerini takdir ediyorum ve muhtemelen kırık bir kalbi ilişkilendirebilirim (ya da değil).

Karımla randevu geceleri için ilişkisel bir veritabanı yapısı çözemedim, ama Karımla randevu geceleri ilişkisel veritabanı projelerini düşündüm ..

Şimdi NoSQL hakkında duyuyorum ve araştırıyorum. Kovalamayı kesmek, çığır açan, matematiksel olarak yeni olan NoSQL ile ilgili bir şey var mı yoksa “hey, verilerinizi ilişkisel olarak organize etmenize bile gerek yok, bu çok daha kolay” bir yaklaşım mı?

NoSQL veri yapısına süper bir kabuk gibi midir? Aklımda, veri sonunda alınacak bir yapıya sahip olmalı ve alma bir tür dilde tanımlanmalıdır.


2
Ne tür NoSQL veritabanlarının bir yapısı yoktur? Belge veritabanları hiyerarşik olabilir, ancak verilerini en az miktarda veri içeren belgelerde saklar. Grafik veritabanları ve anahtar-değer depoları oldukça açıklayıcıdır. Hangi NoSQL veritabanlarının sorgulanacak dili yok? Bazı belge veritabanları, metinsel bir arama veya XML için XQuery'dir, iki örnek olarak. SPARQL, RDF mağazaları için kullanılır.
Thomas Owens

2
Güncelleme "Ben eşim ile randevu geceleri ilişkisel veritabanı projeleri hakkında düşündüm .." :) LOL. Çok güzel bir soru.
Rocklan

2
NoSQL veritabanları bir yapıya sahiptir, ancak yapı ilişkisel cebirle eşlemek her zaman kolay değildir. Farklı NoSQL farklı yapılar kullanır, bazıları anahtar-değer hashmap, hiyerarşik, nesne veritabanı, grafik veritabanı veya belge deposu NoSQL'in yaygın türleridir. Bütün bunlar NoSQL'in gerçekte SQL'in bir panaceae olmadığı, bazı problemlerin zayıf SQL / ilişkisel cebirle eşleştiğinin farkına varılmasıdır.
Yalan Ryan

7
NoSQL yanıltıcı bir isimdir. Tek ortak özellik, klasik bir ilişkisel SQL veritabanı olmamakla birlikte, özellikleri olan bir grup anlamına gelir. Açık bir set. Ekmek olmayan her yemeği "ekmeksiz aile" olarak tanımlamak gibi bir şey.
Pieter B

2
Tamam, NoSQL'in büyük yaygarası nedir? Çok kolay: İlişkisel veritabanlarıyla büyüyen ve sahip oldukları tek araç olan bir nesil insanımız vardı. Çünkü sadece bir çekiçiniz varsa, her şey bir çiviye dönüşür. Daha sonra nesneleri ilişkisel bir veritabanına koymaya çalışmak veya bunun üzerine bir arama motoru oluşturmak gibi çirkin şeyler elde edersiniz. Büyük fark şuydu: bir SQL veritabanı pek çok şey için iyidir, ama her şey için değil. "her şey değil" büyük şey.
Pieter B

Yanıtlar:


24

NoSQL, devrimciden daha evrimseldir. Esasen mevcut “dış veritabanı depolama” fikirlerini “ilişkisel tabloları değil, bilinen veri yapılarını kullanarak” birleştirir.

İlişkiselden daha fazla veri tabanı türü vardır, örneğin hiyerarşik veri tabanları . Bugünün standartlarına göre arkaik olsa da, verilerinin veri yapılarına (ör. COBOL kayıtları) çok iyi göz attı . Mesele şu ki, veritabanındaki veriler, onları kullanan programlama dillerinde kayıtların nasıl düzenlendiğine yakın bir şekilde modellenmiştir.

Nihayetinde veritabanının kaygıları birbirinden ayırdığı ve uygun şekilde normalleştirildiğinde çoğu veri türünü ve veriler arasındaki ilişkileri görselleştirmek için harika bir yol olan ilişkisel veritabanlarının icadı için hızlı ileri . Öyle gerçekten veritabanlarının diğer türlerine göre kolay anlaşılır. Ancak, tamamen başarısız olduğu şey, verileri bir programdaki nesneleri ve sınıfları yansıtacak şekilde depolamaktır. Dolayısıyla, nesne-ilişkisel haritalamanın icadı . Başka bir deyişle, veritabanının tasarımı aslında onu kullanan programın tasarımına engel teşkil etmektedir, bu yüzden Hazırda Bekletme gibi ORM kitaplıklarına ihtiyacımız var.. Temiz ve tutarlı olsa da, aklımın arkasında, bir şeylerin tam olarak doğru olmadığı konusunda her zaman dürtücü bir şüphe vardır.

Bu, iki tür veritabanına, nesne veritabanlarına ve NoSQL'e yol açtı .

Her ikisi de ilişkisel veritabanlarının ortaya çıkardığı sorunları çözmeye çalışırken, bizi hiyerarşik veritabanlarının zihin bükme korkularına maruz bırakmaz. Veriler hala belirsiz tablolara benzeyen depolarda ortaya konmuştur, ancak gerçekte ilişkisel tablolardan çok programlama veri yapıları gibidir. Nesne veritabanları çoğunlukla iyi tanımlanmış kuralları takip ederken, benim fikrim NoSQL'in oldukça keyfi olduğu yönünde. Örneğin, bir tablo bir karma tablo veya bir dizi olarak görselleştirilebilir. Oracle SQL Developer veya SQL Server Management Studio'ya benzer bir keyfi araç kullanarak bunları sorgulamanın kolay ve iyi tanımlanmış bir yolu yoktur .

Fikir, bir kişinin istediği sorguyu ifade etmek yerine, bir SQL veritabanı motoruna daha uygun olan SQL sorgularını bir araya getirmekten ziyade, kolayca kodda aranabilen veri yapılarını tanımlayabilmesidir. Örneğin, bulanık veya kısmi eşleşmeler daha zordur ve ilişkisel bir veritabanında daha kötü performans gösterirken, NoSQL veritabanı böyle bir arama için optimize edilmiş ve zamanın bir bölümünde tamamlanan bir yapıya sahip olabilir.

NoSQL'i sorgulamak için diller var. Bununla birlikte, ilişkisel veritabanları için SQL'in ne olduğu gibi evrensel bir dil yoktur .


Geç Düzenleme:

NoSQL veritabanlarına yeterince aşina olmama rağmen, bu soru konuyla ilgili kaliteli bir kitap satın almam ve sonuçta konuyla ilgili gerçek bir uzman olmayı hedeflemem için itici güçtü. Geriye kalan yorumlar NoSQL Distile'e dayanıyor : Pramod Sadalage ve Martin Fowler'ın Gelişmekte Olan Polyglot Kalıcılık Dünyasına Kısa Bir Kılavuz .

Yazarlar, ilişkisel veritabanlarının Amazon ve Google gibi siteler için ihtiyaç duyulan verileri sunma yeteneğine sahip kümelere iyi ölçeklenmediğini belirtmiştir. büyük ölçüde statik verileri kullanır (dolayısıyla ACID işlemleri o kadar önemli değildir).

Ayrıca, NoSQL veritabanlarının NoSQL veritabanlarının veri yapısını daha kolay değiştirmelerine izin veren bir şema olmadan (sayfa 10) çalıştığını belirtirler. Resmi bir şemanın varlığının veya yokluğunun bu konuda önemli olduğundan emin değilim, çünkü SQL veritabanları da şemaları değiştirmeye izin veriyor. Ne olursa olsun, iki tanınmış yazar iddiada bulunmaya değer olduğunu iddia ediyor.

Bu ana noktaların her ikisinin de yalnızca asıl noktamı, NoSQL'in devrimci değil, evrimsel olduğunu zorlamaya hizmet ettiğine inanıyorum. Halen veri depolamakta ve ölçek ve değiştirilebilirlikte artımlı iyileştirmeler yapmaktadırlar. Ayrıca, NoSQL'in ilişkisel veritabanlarını veri depolamasının kralı olarak ele almaya çalışmakla kalmayıp, sadece ilişkiye girecek şekilde (ölçeklendirmeleri gerektiğine inanacak şekilde ölçeklendirilmesi ve morph olması gereken veri türleri için alternatif bir veri depolama aracı sağlamak için) dikkat çekmektedirler. veritabanları yeterince desteklemiyor.


2
Bazı NoSQL veritabanlarının bir sorgu dili vardır. Veriler XML veya RDF'de depolanıyorsa, daha önce XQuery ve SPARQL kullandım. Bu diller yapılandırılma ve sorgulama eğilimindedir. Fakat sonra tekrar, sadece iyi tanımlanmış veri formatları içeren ve metin veya anahtar-değer çiftleri için fazla bir şey yapmayan NoSQL veritabanlarını kapsar.
Thomas Owens

@ThomasOwens Daha spesifik olmak için cevabımı düzenledim.

1
Bu NoSQL'in ilginç bir özetidir, ancak asıl soruyu gerçekten cevaplamıyor. NoSQL hakkında "çığır açan" tek şey söyleyebildiğim kadarıyla, verilerinizin depolanmadan önce belirli bir yapıya uyması gerekmiyor.
Rocklan

2
In other words, the design of the database is actually a hindrance to the design of the program that uses it, ...Bunun bir çok durumda at arabasının atına sürdüğünü hissediyorum. Büyük veri kümelerine sahip büyük işletmeler için, veriler inanılmaz derecede değerlidir ve mevcut sıcak programlama dillerinden, araçlarından ve paradigmalarından daha uzun - çok, çok uzun bir süre boyunca olacaktır. OOP'nin veritabanı tasarımına bir engel olduğunu söylemek daha doğru olabilir ve veritabanı tasarımını programlama paradigmasına uyacak şekilde değiştirmeye çalışmak en iyi fikir olmayabilir.
Doval,

2
Ben sadece hepimizin oldukça ağır bir şekilde heirarchical veritabanı uygulamasını kullandığımızı göstereceğim - buna dosya sistemi denir.
Wyatt Barnett

13

Bence bu makaleye Erik Meijer ve Gavin Bierman'ın "Popüler inanışın aksine, SQL ve NoSQL gerçekten aynı madalyonun iki yüzüdür" başlıklı makalesine bakmak istersiniz . Kısacası, matematiksel olarak konuşmanın her iki yaklaşımın da aynı teoriye dayandığını, ancak bazı farklılıklar olduğunu iddia ediyor.

İlginç farklılıkların bir kısmı, benim görüşüme göre, şu şekildedir: çapraz tip bağımlılıkların yönü (SQL'de FK), SQL ve NoSQL'de zıttır ve koleksiyon türleri NoSQL'de (ve bu nedenle bazı set-teorik işlemler) ayarlamakla sınırlı değildir. artık NoSQL dünyasında geçerli olmayabilir, ancak bazıları hala geçerlidir). Makaleden bir başka ilginç nokta ise, hem SQL hem de NoSQL veritabanlarını sorgulamak için önerilen tek sorgu dilidir. Buna LINQ denir ve bu adı daha önce duymuş olabileceğinizi düşünüyorsanız, haklısınız: Microsoft'un C # dilindeki sorgu dili.


1
"Makaleden bir başka ilginç nokta, hem SQL hem de NoSQL veritabanlarını sorgulamak için önerilen tek bir sorgu dili. Tamamen doğru değil, 'Linq' 1: 1 modasıyla eşleştirilemiyor. SQL DB'lerde çalışması için gerçekleşmesi gerekir. Bu, her ikisini de sorgulamak için her şeyin sorgulanabileceği anlamına gelir; hedef DB üzerinde çalıştığından emin olmak için bir çeviri katmanı olduğu sürece
Frans Bouma

6
Bir de SQL'in doğrudan bir veritabanında çalıştırılmadığını iddia edebilir. Yürütülen, bir yürütme planıdır ve biri de Linq'in doğrudan yürütme planına çevrilebileceğini iddia edebilir. Yani sonuçta büyük bir fark yok.
Haspemulator

10

Snowman'ın cevabı, SQL ve NoSQL'in veri yapılarında nasıl farklılaştığını ve bunlara nasıl erişildiğini doğru bir şekilde açıklamaktadır. Bununla birlikte, muhtemelen daha da önemli bir fark, kendi problem alanlarıdır.

NoSQL, SQL'in halefi değildir. Aksine, NoSQL'in çeşitli dalları diğerlerinde daha iyi olabilmek için SQL'in bazı niteliklerinden fedakarlık eder . CAP teoremi , herhangi bir dağıtılmış veritabanı sisteminin aşağıdaki özelliklerin tümünü yerine getirmesinin imkansız olduğunu belirtir:

  • Tutarlılık
  • Kullanılabilirlik
  • Bölüm toleransı

Böylece, bazı NoSQL izleyin varyantları TABAN prensibini daima-full-tutarlılık kısıtlamasını rahatlatır, hangi yerine ASİT klasik SQL veritabanları için temeldir. Bazı tutarlılık garantilerini kaybederek, yüksek miktarda veri ve kullanıcı sorgusu olan web siteleri, ancak mükemmel tutarlılık talebi gibi web siteleri gibi yüksek kullanılabilirlik ve bölüm toleransını bir araya getirme olanağını kazanırlar. Dolayısıyla, bu tür NoSQL veritabanları Google , Facebook ve Amazon'un merkezindedir . Yani, sorunuzu cevaplamak için: Evet, NoSQL bu kadar büyük web servislerini mümkün kıldığı için çığır açıyor .

Bu, sadece bir örnektir, çünkü NoSQL, farklı bir alandır ve çeşitleri, CAP üçgeni içindeki tüm olası parametre kombinasyonlarını kapsar .


ElasticSearch ile aşina değilim. Bir hızlı google arama It fedakarlık tutarlılık (C) ve teorik olarak imkansız olduğu, bu nedenle AP, değil CAP olduğunu gösteriyor gibi görünüyor. Düzenleme: Bu, ElasticSearch'ün tüm CAP özelliklerini yerine getirdiğini öne süren bir yorumun yanıtıydı.
Florian von Stosch,

3
Ne kadar sevimli, ACID ile mücadele etmek için BASE ile birlikte gittiler. REDOX veya SALT diye adlandırılan bir orta yol yaklaşımı var mı?
Patrick M,

3

NoSQL'in yaygın kullanım durumları, ortak SQL tabanlı veritabanlarına kıyasla verimlilik artışlarında çığır açıyor. Bunda birkaç faktör var.

Biri temizlik yapıyor. NoSQL'lerin çoğu açık kaynaklıdır ve birkaç komutla bir iş istasyonuna veya VM'ye kurulabilir ve kutunun dışında makul varsayılanlarla çalışabilir. Benim tecrübeme göre, Postgres ve MySQL bile bu şekilde değil; Geliştirme amacıyla bir iş istasyonunda bile çalışmaya başlamak için genellikle yapılandırma gereklidir.

Bir diğeri, diğer cevapların ayrıntılı olarak tarif ettiği gibi uygun bir gelişmedir. Mongo'nun JSON endeksleme yetenekleri veya redis ve Riak'ın kilit / değer anlambilimi, işin yapılması için bazı webapps'ların ihtiyaç duyabileceği her şey olabilir ve API'ler kolaydır. Bazı NoSQL'ler kendi RESTful API'lerini sağlarlar, oysa SQL ile bunları kendiniz yazmanız gerekir.

Bu faktörler, NoSQL veritabanlarını küçük ölçekli projeler için çekici kılar. Toplama süresi düşük olma eğilimindedir. Tabii, üretime geçtiğinizde güvenlik ve ölçeklendirme için yapılandırmanız gerekir, ancak hızlı bir şekilde kodlama ve işbirliğine başlama yeteneği güçlü ve tartışmalıyım.

Ayrıca, yukarıdakilerle ilgili olarak, küçük ölçekli uygulamalar için (şirket içi veya uygulamadan uygulamaya servis hizmetleri gibi), bir ekip DBA ekiplerini dahil etmeden ve performans veya dürüstlük çekmeden üretim NoSQL veritabanını kaldırabilir. sonuç olarak sorunlar. Profesyonel DBA'lar bundan hoşlanmayabilir, ancak DBA'ları bir engelleme kaynağı olarak gören (doğru ya da yanlış) geliştiriciler bazen NoSQL'i onlarla uğraşmayı atlamanın bir yolu olarak görür. Bunu itiraf ediyorum - Bir zamanlar DBA’yı ortadan kaldırmak için Postgres’ten SQLite’e küçük çaplı bir uygulamayı değiştirdim ve DBA onay işlemlerinden kaçınmak ve kısıtlamalara erişmek için Oracle yerine Mongo’da uygulama yapmayı seçtim. Her iki durumda da olumsuz sonuç yok.

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.