NoSQL nedir, nasıl çalışır ve hangi faydaları sağlar? [kapalı]


168

NoSQL hakkında bir şeyler duydum ve sonunda DB etkileşimi genellikle web üzerinde hız için bir şişe boyun olması nedeniyle SQL DB depolama yöntemlerinin yerini alabilir.

Bu yüzden birkaç sorum var:

  1. Tam olarak nedir?

  2. O nasıl çalışır?

  3. Neden bir SQL Veritabanı kullanmaktan daha iyi? Ve ne kadar iyi?

  4. Teknoloji henüz uygulamaya başlamayacak kadar yeni mi yoksa göz atmaya değer mi?


burada çok iyi cevaplar var. Diğer benzer sorulara da yararlı cevaplar buldum: (1.) 150+ upvotes no sql bir araba metaforu ve birçok referansla açıklandı
Trevor Boyd Smith

Yanıtlar:


110
  1. Tam olarak nedir?

    Bir yandan, belirli bir sistem , ancak aynı zamanda ilişkisel DB modelini takip etmeyen çeşitli yeni veri depolama arka uçları için genel bir kelime haline geldi .

  2. O nasıl çalışır?

    Genel ad ile etiketlenen sistemlerin her biri farklı çalışır, ancak temel fikir, genel bir RDBMS'nin tüm işlevlerini desteklemeyen, ancak yine de yararlı olacak kadar işlevselliği olan DB modellerini kullanarak daha iyi ölçeklenebilirlik ve performans sunmaktır. Bir şekilde MySQL gibi, bir zamanlar işlemler için destek yoktu, ancak tam olarak bu nedenle diğer DB sistemlerinden daha iyi performans göstermeyi başardı. Uygulamanızı işlem gerektirmeyen bir şekilde yazabiliyorsanız harikaydı.

  3. Neden bir SQL Veritabanı kullanmaktan daha iyi? Ve ne kadar iyi?

    Sitenizin o kadar büyük ölçekli ölçeklenmesi gerektiğinde, alabileceğiniz ve mümkün olduğunca optimize edebileceğiniz en iyi donanım üzerinde çalışan en iyi RDBMS'nin yüke ayak uyduramaması daha iyi olacaktır. Ne kadar iyi olduğu özel kullanım durumuna bağlıdır (çok sayıda birleştirmeyle birleştirilen birçok güncelleme etkinliği "geleneksel" RDBMS'ler için çok zordur) - aşırı durumlarda 1000 faktör olabilir.

  4. Teknoloji henüz uygulamaya başlamayacak kadar yeni mi yoksa göz atmaya değer mi?

    Esas olarak neyi başarmaya çalıştığınıza bağlıdır. Kullanmak için yeterince olgun. Ancak çok az uygulamanın bunu büyük ölçüde ölçeklendirmesi gerekiyor. Çoğu için geleneksel bir RDBMS yeterlidir. Bununla birlikte, internet kullanımının her zaman daha yaygın hale gelmesiyle, muhtemelen uygulamaların daha yaygın hale gelmesi muhtemeldir (muhtemelen baskın olmasa da).


2
ne anlama geliyor transaction?
Shawn Mclean


"çeşitli yeni veri depolama arka uçları" bağlantısı öldü
csguy

1
@csguy teşekkürler, ortadan kaybolma olasılığı daha az olan
Michael Borgwardt

135

NoSQL diye bir şey yoktur!

NoSQL bir terimdir.

Onlarca yıldır, insanlar veritabanları hakkında konuşurken, ilişkisel veritabanları anlamına geliyorlardı. İnsanlar ilişkisel veritabanları hakkında konuşurken, Edgar F. Codd'un Yapısal Sorgu Dili ile kontrol ettiğiniz anlamına geliyordu. Verileri başka bir şekilde saklama? Delilik! Başka bir şey sadece düz dosyalar.

Ancak son birkaç yılda insanlar bu dogmayı sorgulamaya başladı. İnsanlar, satırları ve sütunları olan tabloların gerçekten verileri temsil etmenin tek yolu olup olmadığını merak etti. İnsanlar düşünmeye ve kodlamaya başladı ve verilerin nasıl düzenlenebileceği birçok yeni kavram geliştirdiler. Ve verilerle bu yeni çalışma yöntemleri için tasarlanmış yeni veritabanı sistemleri oluşturmaya başladılar.

Tüm bu veritabanlarının felsefeleri farklıydı. Ancak tüm bu veritabanlarının ortak bir yanı, Yapılandırılmış Sorgu Dili'nin artık bunları kullanmak için uygun olmadığıydı. Böylece her veritabanı SQL'i kendi sorgu dilleriyle değiştirdi. Ve böylece klasik ilişkisel veritabanı modeline meydan okuyan tüm veritabanı teknolojileri için bir etiket olarak NoSQL terimi doğdu.

Peki NoSQL veritabanlarının ortak noktası nedir?

Aslında fazla değil.

Sıklıkla aşağıdaki ifadeleri duyarsınız:

  • NoSQL ölçeklenebilir!
  • NoSQL, BigData için!
  • NoSQL, ASİT'i ihlal ediyor!
  • NoSQL yüceltilmiş bir anahtar / değer deposudur!

Bu doğru mu? Bu ifadelerin bazıları, yaygın olarak NoSQL olarak adlandırılan bazı veritabanları için doğru olabilir, ancak her biri en az biri için de yanlıştır. Aslında, NoSQL veritabanlarının ortak yanı, SQL kullanmayan veritabanları olmasıdır. Bu kadar. Onları tanımlayan tek şey onları birbirinden ayıran şeydir.

Peki NoSQL veritabanlarını ayıran nedir?

Bu nedenle, yaygın olarak NoSQL olarak adlandırılan tüm veritabanlarının bunları birlikte değerlendirmek için çok farklı olduklarını açıkladık. Belirli bir sorunu çözmek için uygun olup olmadıklarına karar vermek için her birinin ayrı ayrı değerlendirilmesi gerekir. Ama nereden başlayalım? Neyse ki, NoSQL veritabanları farklı kullanım durumları için uygun olan belirli kategoriler halinde gruplandırılabilir:

Belge odaklı

Örnekler: MongoDB, CouchDB

Güçlü yönleri: Heterojen veriler, çalışan nesne yönelimli, çevik gelişim

Avantajları, tutarlı bir veri yapısı gerektirmemesidir. Gereksinimleriniz ve dolayısıyla veritabanı düzeniniz sürekli değiştiğinde veya bir araya gelen ancak yine de çok farklı görünen veri kümeleriyle uğraşırken yararlıdırlar. "Anahtar" ve "değer" olarak adlandırılan iki sütuna sahip çok sayıda tablonuz varsa, bunlar incelenmeye değer olabilir.

Grafik veritabanları

Örnekler: Neo4j, GiraffeDB.

Güçlü Yönler: Veri Madenciliği

Çoğu NoSQL veritabanı, veri ilişkilerini yönetme kavramından vazgeçerken, bu veritabanları, ilişkisel veritabanlarından daha fazla kucaklar.

Odak noktaları, verileri diğer verilerle olan ilişkisiyle tanımlamaktır. Diğer iki tablonun (ve belki de aralarındaki ilişkiyi açıklayan bazı veriler) birincil anahtarları olan çok sayıda tablonuz varsa, bunlar sizin için bir şey olabilir.

Anahtar Değerli Mağazalar

Örnekler: Redis, Cassandra, MemcacheDB

Güçlü yönleri: Bilinen tuşlarla değerlerin hızlı aranması

Çok basittirler, ancak bu onları hızlı ve kullanımı kolaylaştırır. Saklı yordamlara, kısıtlamalara, tetikleyicilere ve tüm bu gelişmiş veritabanı özelliklerine ihtiyacınız olmadığında ve verilerinizin hızlı bir şekilde depolanmasını ve alınmasını istiyorsanız, bunlar sizin için.

Ne yazık ki tam olarak ne aradığınızı bildiğinizi varsayıyorlar. User157641 profiline mi ihtiyacınız var? Sorun değil, sadece mikrosaniye alacaktır. Peki 16 ile 24 yaşları arasındaki tüm kullanıcıların isimlerini en sevdikleri yemek olarak "waffle" a sahip ve son 24 saat içinde giriş yaptıktan sonra ne olacak? Zor şans. Belirli bir sonuç için kesin ve benzersiz bir anahtarınız yoksa, bunu KV mağazanızdan kolayca çıkaramazsınız.

SQL kullanılmıyor mu?

Bazı NoSQL destekçileri, en sevdikleri NoSQL veritabanının yeni şeyler yapmanın yeni yolu olduğunu ve SQL'in geçmişte kaldığını iddia ediyor.

Onlar doğru mu?

Hayır, elbette değiller. SQL için uygun olmayan sorunlar olsa da, yine de güçlü yanları var. Birçok veri modeli en iyi şekilde birbirini referans alan bir tablo koleksiyonu olarak temsil edilir. Özellikle veritabanı programcılarının çoğu on yıllardır verileri ilişkisel bir şekilde düşünmek için eğitildiklerinden ve bu zihniyeti nadiren iyi yapılmayan yeni bir teknolojiye bastırmaya çalışmaktan dolayı.

NoSQL veritabanları SQL'in yerine geçmez - alternatiftir.

Farklı NoSQL veritabanlarının etrafındaki yazılım ekosistemlerinin çoğu henüz olgun değil. Gelişmeler olsa da, popüler SQL veritabanları için mevcut olan kadar olgun ve güçlü olan tamamlayıcı araçlara sahip değilsiniz.

Ayrıca, SQL için çok daha fazla teknik bilgi var. Nesil bilgisayar bilimcileri, kariyerlerini onlarca yıl boyunca ilişkisel veritabanlarına odaklanan araştırmalara harcadılar ve şunu gösteriyor: SQL veritabanları ve ilişkisel veri modelleme hakkında yazılan literatür, hem pratik hem de teorik, kitaplarla dolu birden fazla kütüphaneyi doldurabilir. Verileriniz için ilişkisel bir veritabanı nasıl oluşturulur, o kadar iyi araştırılmış bir konudur ki, genel olarak kabul edilen kitap tarafından en iyi uygulamaların olmadığı bir köşe vakası bulmak zordur.

Öte yandan, çoğu NoSQL veritabanı hala emekleme aşamasındadır. Hala bunları kullanmanın en iyi yolunu buluyoruz.


Sorunun cevabını NoSQL ilişkisel olmayan veritabanı anlamına mı geliyor? Hayır çünkü Grafik veritabanları da NoSQL ve ilişkiseldir. Doğru?
tomasb

1
@tomasb "İlişkisel veritabanı" yı nasıl tanımladığınıza bağlıdır. Grafik veritabanlarında, ilişkiler genellikle ilişkisel olarak adlandırılan veritabanlarından daha da önemlidir.
Philipp

"Sorun değil, sadece mikrosaniye alacak." - örneğin psql'de aynı işlemsel olmayan okuma performansını elde edemiyorum?
Nakilon

2
Güzel cevap, "Philipp Ruins noSQL" dışında Adam Ruins neredeyse her şeyi gibi ifade ;-)
JGlass

2
Bu en iyi cevap olmalı.

28

Birisi önceki yazımın konu dışı olduğunu söylediğinden, telafi etmeye çalışacağım :-) NoSQL daha yaygın olmayan SQL veritabanlarının yerini almayı amaçlamamıştır ve asla amaçlanmamıştır, ancak birkaç kelime almak için doğru perspektifte.

NoSQL felsefesinin tam kalbinde , muhtemelen ticari ve taşınabilirlik nedenleriyle, SQL motorlarının UNIX işletim sisteminin ve türevlerinin muazzam gücünü göz ardı etme eğilimi yatmaktadır.

Dosya sistemi tabanlı bir veritabanı ile, Moore yasasına göre uzun yıllardır sürekli olarak artan temel işletim sisteminin sürekli artan yeteneklerinden ve gücünden anında yararlanabilirsiniz. Bu yaklaşımla, birçok işletim sistemi komutu otomatik olarak "veritabanı operatörleri" haline gelir ("ls" "sıralama", "find" ve diğer sayısız UNIX kabuk yardımcı programlarını düşünün).

Bunu akılda tutarak ve biraz yaratıcılıkla, en azından NoSQL'in felsefesinin arkasındaki bütün nokta olan belirli kullanım kalıpları için birçok yaygın SQL motorunun sınırlamalarını aşabilen bir dosya sistemi tabanlı veritabanı tasarlayabilirsiniz. görüyorum.

Yüzlerce web sitesi işletiyorum ve hepsi daha az ya da çok NoSQL kullanıyor. Aslında, büyük miktarda veri barındırmıyorlar, ancak bazıları bile olsa, herhangi bir darboğazın üstesinden gelmek için NoSQL ve dosya sisteminin yaratıcı bir kullanımını düşünebilirim. Geleneksel SQL "hapishaneleri" ile muhtemelen daha zor olacak bir şey. Ne demek istediğimi anlamanız için sizi "unix", "manis" ve "shaffer" için google'a çağırıyorum.


9

Doğru hatırlıyorsam, ilişkisel formu izlemesi gerekmeyen veritabanı türlerini ifade eder. Belge veritabanları, belirli bir yapıya sahip olmayan ve SQL'i belirli bir sorgu dili olarak kullanmayan veritabanları akla gelir.

Genellikle veritabanının performansına dayanan ve İlişkisel Veritabanı Motorlarının daha gelişmiş özelliklerine ihtiyaç duymayan web uygulamaları için daha uygundur. Örneğin, id arabirimine göre basit bir sorgu sağlayan bir Anahtar-> Değer deposu, daha düşük geliştirici bakım maliyetiyle karşılık gelen SQL sunucu uygulamasından 10-100x daha hızlı olabilir.

Bir örnek, tek iş parçacıklı işleme için işlemleri feda eden (eşzamanlılık sorunu olmadığı için eşzamanlılık sorunu yok) ve tüm verileri bellekte tutan bir OLTP Tuple Mağazası için bu çalışmadır ; benzer bir RDBMS güdümlü sistemle karşılaştırıldığında 10-100x daha iyi performans elde etmek . Temel olarak, SQL ve veritabanı sistemlerinin 'One Size All' görünümünden uzaklaşıyor.


1
NoSQL ("this" etiketli) anlamına gelen ilk bağlantınız ölü gibi görünüyor, lütfen düzeltin.
jobin

7

Uygulamada, NoSQL, anahtar tabanlı bir erişim stratejisi kullanarak büyük ikili nesnelere (dokümanlar, jpgs vb.) Hızlı erişimi destekleyen bir veritabanı sistemidir. Bu, yalnızca alfasayısal değerler için yeterince iyi olan geleneksel SQL erişiminden bir çıkıştır. Yalnızca dahili depolama ve erişim stratejisi değil, aynı zamanda görüntüleme biçimindeki sözdizimi ve sınırlamalar geleneksel SQL'i kısıtlar. Geleneksel ilişkisel veritabanlarının BLOB uygulamaları da bu kısıtlamalardan muzdariptir.

Sahnenin arkasında, herhangi bir OLTP biçimini veya yeni veri biçimlerini desteklemede SQL modelinin başarısızlığının dolaylı olarak kabul edilmesi. "Destek" sadece mağaza değil, tam erişim yetenekleri anlamına gelir - standart modeli kullanarak programlı ve sorguya dayalı.

İlişkisel meraklılar, SQL'i hala resimde tutmak için NoSQL'in tanımını Not-SQL'den Sadece Değil-SQL'e değiştirmek için hızlıydı! Özellikle Java programlarının çoğunun temeldeki ilişkisel modelin ORM eşlemesine başvurduğunu gördüğümüzde bu iyi değildir. Yeni bir kavramın açık bir tanım olması gerekir. Yoksa SOA gibi sonuçlanacak.

NoSQL sistemlerinin temeli rastgele anahtar / değer çiftinde yatmaktadır. Ancak bu yeni bir şey değil. IMS ve IDMS gibi geleneksel veritabanı sistemleri karma ramdom anahtarlarını destekledi (herhangi bir dizin kullanmadan) ve hala kullanıyorlar. Aslında IDMS, NONSQL olarak adlandırdıkları eski ağ veritabanlarına SQL erişimini destekledikleri bir NONSQL anahtar sözcüğüne zaten sahiptir.


5

Jakuzi gibi: hem marka hem de jenerik bir isim. Bu yalnızca belirli bir teknoloji değil, belirli bir teknoloji türüdür , bu durumda Google'ın BigTable veya CouchDB'si gibi büyük ölçekli (genellikle seyrek) "veritabanlarına" atıfta bulunur.


5

NoSQL gerçek program arka ucunda düz dosyaları kullanarak awk uygulanan ilişkisel bir veritabanı gibi görünüyor. Her ne kadar "NoSQL'in keyfi bir sınırı yoktur ve diğer ürünlerin çalışamayacağı yerlerde çalışabilirler. Örneğin, veri alanı boyutu, sütun sayısı veya dosya boyutu konusunda bir sınır yoktur" diye düşünüyorum. geleceğin büyük ölçekli veritabanı.

Joel'in dediği gibi, BigTable veya HBase gibi büyük ölçüde ölçeklenebilir veritabanları çok daha ilginçtir. GQL, BigTable ve App Engine ile ilişkili sorgu dilidir. Google'ın şişe boyunlarını (birleşimler gibi) dikkate aldığı özelliklerden kaçınmak için büyük ölçüde SQL ayarlanmıştır. Ancak, daha önce "NoSQL" olarak anıldığını duymadım.


5

NoSQL, veri almak için dize tabanlı SQL sorguları kullanmayan bir veritabanı sistemidir.

Bunun yerine, sağlayacakları bir API kullanarak sorgular oluşturuyorsunuz, örneğin Amazon DynamoDB, bir NoSQL veritabanı için iyi bir örnektir.

NoSQL veritabanları, ölçeklenebilirliğin önemli olduğu büyük uygulamalar için daha iyidir.


1

NoSQL ilişkisel olmayan veritabanı anlamına mı geliyor?

Evet, NoSQL, RDBMS ve OLAP'den farklıdır. Geleneksel ilişkisel veritabanlarından daha gevşek tutarlılık modelleri kullanır.

Tutarlılık modelleri, dağıtılmış paylaşılan bellek sistemleri veya dağıtılmış veri deposu gibi dağıtılmış sistemlerde kullanılır.

Dahili olarak nasıl çalışır?

NoSQL veritabanı sistemleri genellikle alma ve ekleme işlemleri için yüksek oranda optimize edilmiştir ve genellikle kayıt depolamanın ötesinde çok az işlevsellik sunar (örneğin, anahtar / değer depoları). Tam SQL sistemlerine kıyasla daha az çalışma zamanı esnekliği, belirli veri modelleri için ölçeklenebilirlik ve performanstaki belirgin kazanımlarla telafi edilir.

Yapılandırılmış ve Yapılandırılmamış Veriler üzerinde çalışabilir. Tablolar yerine Koleksiyonlar kullanır

Böyle bir "veritabanını" nasıl sorgularsınız?

İzle NoSQL vs SQL: Arka Uçlarının Savaşı ; her şeyi açıklıyor.

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.