node.js veritabanı [kapalı]


115

Bir node.js uygulamasıyla eşleştirmek için bir veritabanı arıyorum. Bir json / nosql db'nin ilişkisel bir DB'ye tercih edileceğini varsayıyorum [herhangi bir json / sql empedans uyuşmazlığı olmadan yapabilirim]. Düşünüyorum:

  • CouchDB
  • mongodb
  • Redis

Yukarıdakilerin node.js ile uyumlu / konuşlandırılabilirliği konusunda herhangi bir görüşü / savaş hikayesi olan var mı? Net bir favori var mı?


2
Daha geniş gereksinimlerden bahsedilse bile soruyu yanıtlamanın faydalı olacağını düşünüyorum. Her DB'nin kendi artıları, eksileri ve uzmanlığı vardır. Bize özellikleri bildirin!
Samyak Bhuta

Yanıtlar:


79

Node.js için mongodb sürücüsünün geliştiricisiyim. Kendi projelerim için mongodb kullanıyorum ve mongodb'un performansından çok memnun kaldım.

Node.js için Mongodb sürücüsü

(Utanmaz fiş) Sürücü hakkında soru sormaktan çekinmeyin.

Mongodb sürücüsü için Google grubu

veya burada Stackoverflow'da

Node.js ile iyi eğlenceler. Platformu kesinlikle seviyorum: D


1
ayrıca node.js için mongodb sürücüsünü kullanan / kullanan oldukça hoş bir ORM olan mongoose'a da bakın
taksi

2
Bir süredir Node.js + MongoDB kullanıyoruz ve harika gidiyor. Ve @christkv'e tam tebrikler, sürücü kaya gibi sağlam ve sizi hayal kırıklığına uğratmayacak. Node.js / express.js + mongodb'yi EC2 üzerinde kolaylıkla konuşlandırdık. Ayrıca, Mongoose kullanmadığımızı da unutmayın. Zorluklardan bahsetmişken (Node'da zaten iyi olduğunuzu varsayarsak), herhangi bir ciddi uygulama veya hizmet geliştirme için Mongo'nun işleri (sorgulama ve toplama) yapma yolunda iyi olmanız gerekir. Mongo'nun diğer DB'lerden ne kadar farklı olduğunu öğrenmek, eğer hala değerlendirme aşamasındaysanız, gerçekten ilk önce yapmalısınız.
Samyak Bhuta

anladığım kadarıyla, mongodb'de kümelenmeyi hızlandırmak için gerçekten harika özellikler geliyor. Bunlardan biri yerel toplama işlevleridir. slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 ve ayrıca javascript motoru için spidermonkey yerine v8'e olası bir geçiş, her bir harita azaltma komutunun kendi iş parçacığında çalışmasına izin verir (güle güle tek iş parçacıklı harita azaltma )
christkv

25

Seçiminiz büyük ölçüde aradığınız özelliklere bağlı olsa da, CouchDB'yi yerel JavaScript ortamı için gerçekten takdir ediyorum. Hem veriler hem de görünümler JavaScript'te yazıldığından, bence node.js'ye çok iyi uyuyor.

Ayrıca farklı istemci kitaplıkları da mevcuttur, bazıları oldukça düşük seviyelidir, diğerleri gerçekten çok soyutlanmıştır.

Ama dediğim gibi, veritabanınız için ihtiyaç duyduğunuz özellikleri de düşünmelisiniz.


18

Redis, popüler bir seçimdir. Peşinde olduğunuz şey, engellemeyen bir veritabanı sürücüsü.

Listelediğiniz veritabanları çok farklı. Redis, anahtar-değer depoları fikrini alır ve onunla birlikte çalışır, çeşitli veri türleri ve veri sorgulama yolları ekler. İnsanlar genellikle redis'in de çok iyi ölçeklendiğini not eder; bu, performans yeteneğine sahip olmasına rağmen çok düşük ek yüke sahip olduğu anlamına gelir.

Kullanılabilir veritabanı modüllerinin bir listesi: http://wiki.github.com/ry/node/modules#database


Evet Redis harika ama görünüşe göre ikili verileri depolayabiliyoruz ama onu alamıyoruz! En azından ikili veriler için herhangi bir Redis komutu bulamadım.
AppleGrew

Gerçekten mi? İkili verileri saklardım (Node's Buffer sınıfını kullanarak) ve iyi çalıştı. Redis / Node'un hangi sürümü?
DanielS

12
Varsayılan olarak node_redis, tüm komutlar için JavaScript dizeleri döndürecektir. Bunun yerine tampon almak için createClient (bağlantı noktası, ana bilgisayar, {return_buffers: true}) ile bir istemci oluşturun;
Matt Ranney

4
@MattRanney, tasarruf etmen beni saatlerce kazmaktan kurtardı! Bunu Redis düğümünde hiçbir yerde görmedim ve kelimenin tam anlamıyla 5 saat battı. Şu an için minnettarlığım sınırsız.
ghayes

evet, hepsi teoride kulağa hoş geliyor ama pratik bir örnek alın, her 20 saniyede bir sorguladığınız ve bir dizi döndüren bir JSON API'niz var, bunu önbelleğe alabilmek istiyorsunuz, yine de Redis ile devam eder misiniz? ayrıca bu dizi aracılığıyla belirsiz bir arama yapmalı
PirateApp

15

CouchDB'yi gerçekten seviyorum. Biraz öğrenme eğrisi, ancak bunları nasıl kullanacağınızı anladığınızda görüşler gerçekten güçlüdür. Github ve npm üzerinde cradle adında çalışması gerçekten çok kolay bir modül var. Ne kadar hızlı olduğunu test edemedim, ancak gerçekten esnek (isterseniz verilerinize bir tarayıcıdan da erişebilirsiniz).

Buradaki ana sorun, hangi veritabanı tasarımının uygulamanız için mantıklı olduğudur. Doğası gereği büyük ölçüde anahtar değeri olan verileriniz var mı? Eğer öyleyse, Redis'i kullanın. Tüm belgelerin mutlaka aynı alanlara sahip olmadığı verileriniz var mı? Öyleyse, CouchDB gibi bir NoSQL veritabanı kullanın.

Engelleyen bir veritabanı kullanmanın bir sonraki daha kötü yanı, verileriniz için yanlış veritabanını kullanmaktır. CouchDB, Apache tarafından yönetilir, bu nedenle iyi kalitede olduğunu bilirsiniz, ancak verileriniz bir SQL tablosunda veya basit bir anahtar-değer deposunda daha anlamlı olacaksa, onu kullanmak mantıklı değildir.

Kullanım durumunuzu düşünün. Tam metin araması yapma, yalnızca anahtarla veri alma veya benzer özelliklere sahip belge aralıkları alma olasılığınız daha yüksek mi?


8

Node.js için Persistence , yüksek seviye persistance / veritabanı sistemini kontrol etmek isteyebilirsiniz.

dan thechangelog.com :

Persistence, işlem çalıştırmaları arasında verilerin kalıcı olması için yüksek düzeyde bir API'ye izin veren bir projedir. Amaç, kullanımı kolay, güçlü, esnek veya mümkünse yukarıdakilerin tümünü desteklemektir.

Desteklenen veritabanları şunları içerir:

  • PostgreSQL - Kurumsal düzeyde ilişkisel bir veritabanı. Sürücü saf JavaScript'te uygulanır ve PostgreSQL kablo protokolünü kullanarak TCP üzerinden iletişim kurar.
  • Sqlite3 - Basit, hızlı, sunucusuz bir ilişkisel veritabanı. Bu sürücü, komut satırı sqlite3 programı etrafında bir sarmalayıcıdır. Sqlite3'ün yolda olmasını gerektirir. İletişim son derece hızlıdır, ancak türler çok kesin değildir. Yalnızca döndürülen dizeler ve boş değerler vardır.
  • MongoDB - Ölçeklenebilir, yüksek performanslı, açık kaynak, şema içermeyen, belge odaklı bir veritabanı. Bu sürücü aynı zamanda JavaScript'te tel protokolü uygular ve TCP üzerinden sunucuyla iletişim kurar.
  • JSON-DB - JSON nesnelerini içeren basit düz dosyalar kullanan, kendi bünyesinde yetiştirilmiş bir sistem şeması içermeyen, belge odaklı veritabanı. Bunun düğüm ve dosya sistemi dışında hiçbir gereksinimi yoktur. Performans, tam olarak uygulandığında belirlenecektir.

13
Persistence Mart 2010'dan beri güncellenmedi ve 0.0.4 sürümünde olduğu için terk edilmiş gibi görünüyor.
eksik


3

Doğru çözümün yalnızca bir veritabanını web yığınınızla eşleştirmeye odaklanmak olduğundan, uygulamaya özel gereksinimleri de dikkate almak olduğundan emin değilim.

Twitter beslemelerini veya diğer yüksek hacimli verileri kalıplar için analiz ediyor, ancak işlem desteğine ihtiyacınız yok mu? O zaman gerçekten hızlı bir şey seçin.

Gerçekten temel bilgileri birkaç tabloda saklamak istiyor musunuz ve şu anda "kurumsal odaklı" bir uygulama değil mi? Ardından öğrenmek için havalı bir şeyler seçin.

Belki bir müşteri için gerçekten önemli olan, sağlam, işlemsel olması gereken ve uzak barındırma tesislerine canlı replikasyon yapılması gereken verileri depolayacaksınız. Sonra belki postgresql gibi bir şeye bakın. Aynı şekilde yansıtmaz, ancak node.js sürücüsü oldukça iyi çalışır ve eğer sql'den ölümcül bir şekilde korkmazsanız, istediğiniz şeyi kolayca içeri / dışarı alır.

Kendi düşünceme gelince, node.js gibi daha yeni bir yığınla (php / java'daki geleneksel çerçevelere kıyasla) gitmenin, tek seferde fazladan katman eklememesi gereken kadar "yeni" karmaşıklık eklediğini düşünüyorum. Bu, şunları tartışan iyi bir makale:

http://nodeguide.com/convincing_the_boss.html


2

Deneyimlerime dayanarak konuşacağım: CouchDB kesin bir öğrenme eğrisiyle gelir, oysa MongoDB öğrenmesi ve kurması çok kolay buldum. Hiç redis kullanmadım. MongoDB'yi öneriyorum - ama bu utanmaz bir fanboyizm olabilir - Rakam yok, heh, sadece kullanım kolaylığı iddiaları.


1

dirty, başka bir düz dosya anahtar-değer deposudur. Adından da anlaşılacağı gibi, basit durumlar için hızlı ve kirli ancak performanslı bir çözümdür. Ben yazar değilim :)



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.