database node.js [ditutup]

115

Saya mencari database untuk dipasangkan dengan aplikasi node.js. Saya berasumsi bahwa json / nosql db akan lebih baik daripada DB relasional [Saya dapat melakukannya tanpa ketidakcocokan impedansi json / sql]. Saya sedang mempertimbangkan:

  • couchdb.
  • mongodb
  • redis

Adakah yang punya pandangan / cerita perang kesesuaian / penerapan di atas dengan node.js? Ada favorit yang jelas?

Justin
sumber
2
Saya pikir akan sangat membantu untuk menjawab pertanyaan jika persyaratan yang lebih luas disebutkan. Setiap DB memiliki pro, kontra, dan spesialisasinya sendiri. Beri tahu kami spesifikasinya!
Samyak Bhuta

Jawaban:

79

Saya pengembang driver mongodb untuk node.js. Saya menggunakan mongodb untuk proyek saya sendiri dan sangat senang dengan kinerja mongodb.

Driver Mongodb untuk node.js

(Steker tak tahu malu) Jangan ragu untuk mengajukan pertanyaan apa pun tentang pengemudi di

Grup Google untuk pengemudi mongodb

atau di sini di Stackoverflow

Bersenang-senanglah dengan node.js. Saya sangat menyukai platform ini: D

christkv.dll
sumber
1
juga lihat luwak, yang merupakan ORM yang cukup bagus yang dibangun di atas / menggunakan driver mongodb untuk node.js
taxilian
2
Kami menggunakan Node.js + MongoDB untuk beberapa waktu dan itu berjalan dengan baik. Dan pujian penuh untuk @christkv, pengemudi sangat solid dan tidak akan mengecewakan Anda. Kami telah menerapkan node.js / express.js + mongodb di EC2 dengan mudah. Juga, perhatikan bahwa kami tidak menggunakan Mongoose. Berbicara tentang tantangan (dengan asumsi Anda sudah mahir di Node), Anda harus mahir dalam cara Mongo dalam melakukan sesuatu (kueri dan agregasi) untuk aplikasi atau pengembangan layanan yang serius. Mempelajari bagaimana Mongo berbeda dari DB lain akan sangat Anda lakukan terlebih dahulu jika Anda masih dalam tahap evaluasi.
Samyak Bhuta
dari apa yang saya pahami beberapa fitur yang sangat keren akan segera hadir untuk mempercepat agregasi di mongodb. Salah satunya adalah fungsi agregasi asli. slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 dan juga kemungkinan beralih ke v8 sebagai ganti spidermonkey untuk mesin javascript yang akan memungkinkan setiap perintah pengurangan peta untuk berjalan di utasnya sendiri (bye bye singlethreaded map-reduce )
christkv
25

Meskipun pilihan Anda sangat bergantung pada fitur yang Anda tuju, saya sangat menghargai CouchDB untuk lingkungan JavaScript aslinya. Baik data dan tampilan ditulis dalam JavaScript sehingga sangat cocok dengan node.js menurut saya.

Ada juga pustaka klien berbeda yang tersedia, beberapa di antaranya tingkat yang agak rendah, yang lainnya sangat abstrak.

Tapi seperti yang saya katakan, Anda juga harus memikirkan fitur yang Anda butuhkan untuk database Anda.

b_erb
sumber
18

Redis adalah pilihan yang populer. Apa yang Anda kejar adalah driver database yang tidak memblokir.

Semua database yang Anda daftarkan sangat berbeda. Redis mengambil ide penyimpanan nilai kunci dan menjalankannya, menambahkan berbagai tipe data dan cara untuk membuat kueri data. Orang sering mencatat bahwa redis juga menurunkan skala dengan sangat baik; artinya memiliki overhead yang sangat rendah meskipun memiliki kemampuan untuk bekerja.

Berikut adalah daftar modul database yang tersedia: http://wiki.github.com/ry/node/modules#database

Jökull
sumber
Ya Redis hebat tetapi tampaknya kita dapat menyimpan data biner tetapi tidak dapat mengambilnya! Setidaknya saya tidak dapat menemukan perintah Redis untuk data biner.
AppleGrew
Betulkah? Saya dulu menyimpan data biner (menggunakan kelas Buffer Node) dan itu berfungsi dengan baik. Versi Redis / Node berapa?
DanielS
12
Secara default, node_redis akan mengembalikan string JavaScript untuk semua perintah. Untuk mendapatkan buffer, buat klien dengan createClient (port, host, {return_buffers: true});
Matt Ranney
4
@MattRanney, Anda menghemat hanya menyelamatkan saya berjam-jam menggali! Saya tidak melihat ini di mana pun di dokumen node-Redis dan benar-benar tenggelam waktu 5 jam. Apresiasi saya tidak terbatas pada saat ini.
ghayes
semua terdengar bagus secara teori tetapi ambil contoh praktis, Anda memiliki JSON API yang Anda kueri setiap 20 detik yang mengembalikan larik, Anda ingin dapat menyimpan ini, apakah Anda masih akan menggunakan Redis? juga harus melakukan pencarian fuzzy melalui array ini
PirateApp
15

Saya sangat suka CouchDB. Ini sedikit kurva belajar, tetapi tampilan sangat berguna setelah Anda memahami cara menggunakannya. Ada modul bernama cradle di github dan npm yang sangat mudah digunakan. Saya belum dapat menguji seberapa cepat ini, tetapi ini sangat fleksibel (Anda dapat mengakses data Anda di browser juga jika Anda mau).

Masalah utama di sini adalah desain database mana yang cocok untuk aplikasi Anda. Apakah Anda memiliki data yang sebagian besar bersifat nilai kunci? Jika demikian, gunakan Redis. Apakah Anda memiliki data yang tidak semua dokumen memiliki bidang yang sama? Jika demikian, gunakan database NoSQL seperti CouchDB.

Hal buruk berikutnya untuk menggunakan database pemblokiran adalah menggunakan database yang salah untuk data Anda. CouchDB dikelola oleh Apache, jadi Anda tahu bahwa kualitasnya bagus, tetapi tidak masuk akal untuk menggunakannya jika data Anda lebih masuk akal dalam tabel SQL atau penyimpanan nilai kunci sederhana.

Pikirkan kasus penggunaan Anda. Apakah Anda akan lebih cenderung ingin melakukan pencarian teks lengkap, hanya mendapatkan data berdasarkan kunci, atau mendapatkan berbagai dokumen yang memiliki atribut serupa?

beatgammit
sumber
8

Mungkin ingin memeriksa Persistence , sistem basis data / persistensi tingkat tinggi untuk node.js.

dari thechangelog.com :

Persistence adalah proyek yang memungkinkan API tingkat tinggi untuk mempertahankan data di antara proses yang berjalan. Tujuannya adalah untuk mendukung backend yang mudah digunakan, bertenaga, fleksibel, atau semua hal di atas jika memungkinkan.

Database yang didukung meliputi:

  • PostgreSQL - Database relasional tingkat perusahaan. Driver diimplementasikan dalam JavaScript murni dan berkomunikasi melalui TCP menggunakan protokol wire PostgreSQL.
  • Sqlite3 - Database relasional sederhana, cepat, tanpa server. Driver ini adalah pembungkus di sekitar program sqlite3 baris perintah. Ini membutuhkan sqlite3 untuk berada di jalurnya. Komunikasinya sangat cepat, tetapi jenisnya tidak terlalu tepat. Hanya ada string dan null yang dikembalikan.
  • MongoDB - Database berorientasi dokumen yang dapat diskalakan, berkinerja tinggi, open source, bebas skema. Driver ini juga mengimplementasikan protokol kawat dalam JavaScript dan dikomunikasikan dengan server melalui TCP.
  • JSON-DB - Database berorientasi dokumen tanpa skema sistem buatan sendiri yang menggunakan file datar sederhana yang berisi objek JSON. Ini tidak memiliki persyaratan sama sekali kecuali node dan sistem file. Kinerja harus ditentukan setelah diterapkan sepenuhnya.
Gary S. Weaver
sumber
13
Persistence belum diperbarui sejak Maret 2010 dan pada rilis 0.0.4, jadi sepertinya itu telah ditinggalkan.
kurang
5

Penafian: Saya adalah penulisnya.

Mungkin lihat BarricaneDB yang diumumkan di sini .

fadedbee
sumber
3

Saya tidak yakin solusi yang tepat adalah hanya berfokus pada pemetaan database ke tumpukan web Anda, tetapi juga mempertimbangkan persyaratan khusus aplikasi.

Apakah Anda menganalisis feed twitter atau data volume tinggi lainnya untuk mengetahui pola, tetapi tidak memerlukan dukungan transaksional? Kemudian pilih sesuatu dengan sangat cepat.

Apakah Anda hanya ingin menyimpan beberapa info yang benar-benar mendasar dalam beberapa tabel dan saat ini bukan aplikasi yang "berfokus pada perusahaan"? Kemudian pilih sesuatu yang keren untuk dipelajari.

Mungkin Anda akan menyimpan data yang sangat penting untuk klien, kuat, perlu transaksional, dan memiliki replikasi langsung ke fasilitas hosting jarak jauh, dll. Kemudian mungkin melihat sesuatu seperti postgresql. Itu tidak akan mencerminkan juga, tetapi driver node.js bekerja dengan cukup baik dan jika Anda tidak terlalu takut dengan sql, itu mendapatkan apa yang Anda inginkan masuk / keluar dengan cukup mudah.

Adapun pendapat saya sendiri, saya pikir menggunakan tumpukan yang lebih baru seperti node.js (vs kerangka tradisional di php / java) cukup menambahkan kompleksitas "baru" sehingga seseorang tidak boleh menambahkan lapisan ekstra sekaligus. Ini adalah artikel bagus yang membahas bahwa:

http://nodeguide.com/convincing_the_boss.html

qooleot.dll
sumber
2

Saya akan berbicara dari pengalaman saya: CouchDB hadir dengan kurva pembelajaran yang pasti, sedangkan MongoDB menurut saya sangat mudah dipelajari dan diatur. Saya tidak pernah menggunakan redis. Saya menyarankan MongoDB - tapi mungkin fanboyisme yang tidak tahu malu - saya tidak punya angka, heh, hanya klaim kemudahan penggunaan.

PinkElephantsOnParade
sumber
1

dirty adalah penyimpanan nilai kunci file datar lainnya. Seperti namanya, ini adalah solusi yang cepat dan kotor tetapi efektif untuk kasus sederhana. Saya bukan penulisnya :)

nponeccop
sumber
0

Saya menemukan CouchDB sangat mudah dikuasai. Ada banyak ebooks tersedia di internet yang akan mengajarkan Anda bagaimana menggunakan CouchDB dengan Node.js .

Saya menemukan buku ini sangat berguna untuk mempelajari CouchDB.

Untuk menggunakan CouchDB dengan Node.js, saya menggunakan modul NANO .

CouchDB dapat dihosting di Iriscouch atau Cloudant .

Shekhar
sumber