ฐานข้อมูล node.js [ปิด]


115

ฉันกำลังมองหาฐานข้อมูลเพื่อจับคู่กับแอป node.js ฉันสมมติว่า json / nosql db น่าจะดีกว่ากับฐานข้อมูลเชิงสัมพันธ์ [ฉันสามารถทำได้โดยไม่ต้องไม่ตรงกันอิมพีแดนซ์ json / sql] ฉันกำลังพิจารณา:

  • CouchDB
  • MongoDB
  • Redis

ใครมีมุมมอง / เรื่องราวสงครามความสามารถในการเปรียบเทียบ / การปรับใช้ข้างต้นกับ node.js บ้าง? รายการโปรดที่ชัดเจน?


2
ฉันคิดว่าการตอบคำถามจะเป็นประโยชน์หากมีการกล่าวถึงข้อกำหนดที่กว้างขึ้น แต่ละ DB มีข้อดีข้อเสียและความพิเศษของตัวเอง แจ้งให้เราทราบรายละเอียด!
สามแยกภูตา

คำตอบ:


79

ฉันเป็นผู้พัฒนาไดรเวอร์ mongodb สำหรับ node.js ฉันใช้ mongodb สำหรับโปรเจ็กต์ของตัวเองและมีความสุขมากกับการแสดงของ mongodb

Mongodb ไดรเวอร์สำหรับ node.js

(ปลั๊กไร้ยางอาย) อย่าลังเลที่จะถามคำถามใด ๆ เกี่ยวกับไดรเวอร์ได้ที่

กลุ่ม Google สำหรับไดรเวอร์ mongodb

หรือที่นี่ที่ Stackoverflow

ขอให้สนุกกับ node.js ฉันชอบแพลตฟอร์มนี้มาก: D


1
ดูพังพอนด้วยซึ่งเป็น ORM ที่ค่อนข้างดีที่สร้างบน / ใช้ไดรเวอร์ mongodb สำหรับ node.js
taxilian

2
เราใช้ Node.js + MongoDB มาระยะหนึ่งแล้วและมันก็ทำได้ดีมาก และความรุ่งโรจน์อย่างเต็มที่ถึง @christkv ผู้ขับขี่นั้นแข็งแกร่งและจะไม่ทำให้คุณล้มเหลว เราได้ปรับใช้ node.js / express.js + mongodb บน EC2 ได้อย่างง่ายดาย โปรดทราบว่าเราไม่ได้ใช้พังพอน เมื่อพูดถึงความท้าทาย (สมมติว่าคุณเก่ง Node อยู่แล้ว) คุณต้องเก่งในวิธี Mongo ในการทำสิ่งต่างๆ (การสืบค้นและการรวบรวมข้อมูล) สำหรับการพัฒนาแอปพลิเคชันหรือบริการที่จริงจัง การเรียนรู้ว่า Mongo แตกต่างจาก DB อื่น ๆ อย่างไรเป็นสิ่งที่ควรทำก่อนหากคุณยังอยู่ในขั้นตอนการประเมินผล
สามแยกภูตา

จากสิ่งที่ฉันเข้าใจว่าคุณสมบัติที่ยอดเยี่ยมบางอย่างกำลังมาถึงเพื่อเร่งการรวมตัวใน mongodb หนึ่งในนั้นคือฟังก์ชันการรวมแบบเนทีฟ slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 และยังสามารถเปลี่ยนไปใช้ v8 แทน spidermonkey สำหรับเอ็นจิ้น javascript ซึ่งจะอนุญาตให้คำสั่ง map-reduction แต่ละคำสั่งทำงานในเธรดของตัวเอง (ลาก่อน singlethreaded map-reduction )
christkv

25

แม้ว่าตัวเลือกของคุณจะขึ้นอยู่กับคุณสมบัติที่คุณต้องการเป็นอย่างมาก แต่ฉันขอขอบคุณ CouchDB สำหรับสภาพแวดล้อม JavaScript ดั้งเดิม ทั้งข้อมูลและมุมมองเขียนด้วย JavaScript ดังนั้นจึงเหมาะกับ node.js ในความคิดของฉัน

นอกจากนี้ยังมีไลบรารีไคลเอ็นต์ที่แตกต่างกันบางไลบรารีอยู่ในระดับค่อนข้างต่ำและอื่น ๆ ที่เป็นนามธรรมมาก

แต่อย่างที่ฉันได้กล่าวไปคุณควรคิดถึงคุณสมบัติที่คุณต้องการสำหรับฐานข้อมูลของคุณด้วย


18

Redis เป็นตัวเลือกยอดนิยม สิ่งที่คุณต้องการคือไดรเวอร์ฐานข้อมูลที่ไม่ปิดกั้น

ฐานข้อมูลที่คุณระบุทั้งหมดแตกต่างกันมาก Redis ใช้แนวคิดในการจัดเก็บคีย์ - ค่าและเรียกใช้โดยเพิ่มประเภทข้อมูลและวิธีการสืบค้นข้อมูลที่หลากหลาย คนมักสังเกตว่า redis ลดขนาดลงได้ดีเช่นกัน หมายความว่ามีค่าโสหุ้ยต่ำมากแม้จะมีความสามารถในการแสดง

นี่คือรายการโมดูลฐานข้อมูลที่มีอยู่: http://wiki.github.com/ry/node/modules#database


ใช่ Redis ดีมาก แต่ดูเหมือนว่าเราสามารถจัดเก็บข้อมูลไบนารีได้ แต่ไม่สามารถเรียกคืนได้! อย่างน้อยฉันไม่พบคำสั่ง Redis สำหรับข้อมูลไบนารี
AppleGrew

จริงๆ? ฉันเคยจัดเก็บข้อมูลไบนารี (โดยใช้คลาส Buffer ของ Node) และทำงานได้ดี Redis / Node เวอร์ชันใด
DanielS

12
โดยค่าเริ่มต้น node_redis จะส่งคืนสตริง JavaScript สำหรับคำสั่งทั้งหมด หากต้องการรับบัฟเฟอร์แทนให้สร้างไคลเอ็นต์ด้วย createClient (พอร์ตโฮสต์ {return_buffers: true});
Matt Ranney

4
@MattRanney คุณช่วยประหยัดเวลาในการขุดได้อีกหลายชั่วโมง! ฉันไม่เห็นสิ่งนี้ในเอกสาร node-Redis และเวลาจมลงไป 5 ชั่วโมงอย่างแท้จริง ความชื่นชมของฉันไร้ขีด จำกัด ในช่วงเวลานี้
ghayes

ทุกคนฟังดูดีในทางทฤษฎี แต่เป็นตัวอย่างที่ใช้ได้จริงคุณมี JSON API ที่คุณค้นหาทุก ๆ 20 วินาทีซึ่งส่งคืนอาร์เรย์คุณต้องการที่จะแคชสิ่งนี้คุณจะยังคงใช้ Redis หรือไม่ ยังต้องทำการค้นหาที่คลุมเครือผ่านอาร์เรย์นี้
PirateApp

15

ฉันชอบ CouchDB มาก มันเป็นช่วงการเรียนรู้เล็กน้อย แต่มุมมองมีพลังมากเมื่อคุณเข้าใจวิธีใช้ มีโมดูลที่เรียกว่าcradle บน githubและ npm ที่ใช้งานได้ง่ายมาก ฉันไม่สามารถทดสอบได้ว่าเร็วแค่ไหน แต่มีความยืดหยุ่นมาก (คุณสามารถเข้าถึงข้อมูลของคุณในเบราว์เซอร์ได้เช่นกันหากต้องการ)

ปัญหาหลักคือการออกแบบฐานข้อมูลที่เหมาะสมสำหรับแอปพลิเคชันของคุณ คุณมีข้อมูลที่เป็นคีย์ - ค่าส่วนใหญ่หรือไม่? ถ้าเป็นเช่นนั้นให้ใช้ Redis คุณมีข้อมูลโดยที่เอกสารทั้งหมดไม่จำเป็นต้องมีฟิลด์เดียวกันหรือไม่? ในกรณีนี้ให้ใช้ฐานข้อมูล NoSQL เช่น CouchDB

สิ่งที่แย่กว่าต่อไปในการใช้ฐานข้อมูลการบล็อกคือการใช้ฐานข้อมูลที่ไม่ถูกต้องสำหรับข้อมูลของคุณ CouchDB ได้รับการจัดการโดย Apache ดังนั้นคุณจึงรู้ว่ามีคุณภาพดี แต่ไม่สมเหตุสมผลที่จะใช้หากข้อมูลของคุณเหมาะสมกว่าในตาราง SQL หรือที่เก็บคีย์ - ค่าธรรมดา

ลองนึกถึงกรณีการใช้งานของคุณ คุณมีแนวโน้มที่จะต้องการค้นหาข้อความแบบเต็มเพียงแค่รับข้อมูลทีละคีย์หรือรับช่วงของเอกสารที่มีคุณลักษณะที่คล้ายกัน


8

อาจต้องการตรวจสอบPersistence ความคงอยู่ระดับสูง / ระบบฐานข้อมูลสำหรับ node.js

จากthechangelog.com :

Persistence เป็นโครงการที่อนุญาตให้มี API ระดับสูงสำหรับการคงอยู่ของข้อมูลระหว่างการรันกระบวนการ เป้าหมายคือการสนับสนุนแบ็กเอนด์ที่ใช้งานง่ายมีประสิทธิภาพยืดหยุ่นหรือทั้งหมดที่กล่าวมาหากทำได้

ฐานข้อมูลที่รองรับ ได้แก่ :

  • PostgreSQL - ฐานข้อมูลเชิงสัมพันธ์ระดับองค์กร ไดรเวอร์ถูกนำไปใช้ใน JavaScript บริสุทธิ์และสื่อสารผ่าน TCP โดยใช้โพรโทคอล PostgreSQL wire
  • Sqlite3 - ฐานข้อมูลเชิงสัมพันธ์ที่เรียบง่ายรวดเร็วและไม่ต้องใช้เซิร์ฟเวอร์ ไดรเวอร์นี้เป็นกระดาษห่อหุ้มรอบโปรแกรมบรรทัดคำสั่ง sqlite3 ต้องใช้ sqlite3 ในเส้นทาง การสื่อสารรวดเร็วมาก แต่ประเภทไม่แม่นยำมาก มีเพียงสตริงและค่าว่างที่ส่งคืน
  • MongoDB - โอเพนซอร์สที่ปรับขนาดได้ประสิทธิภาพสูงไม่มีสคีมาฐานข้อมูลที่เน้นเอกสาร ไดรเวอร์นี้ยังใช้โปรโตคอล wire ใน JavaScript และสื่อสารกับเซิร์ฟเวอร์ผ่าน TCP
  • JSON-DB - ฐานข้อมูลเชิงเอกสารของระบบที่สร้างขึ้นเองโดยไม่ต้องใช้สคีมาซึ่งใช้ไฟล์แฟลตธรรมดาที่มีออบเจ็กต์ JSON สิ่งนี้ไม่มีข้อกำหนดใด ๆ เลยยกเว้นโหนดและระบบไฟล์ ประสิทธิภาพจะถูกกำหนดเมื่อมีการใช้งานอย่างสมบูรณ์

13
ความคงอยู่ไม่ได้รับการอัปเดตตั้งแต่เดือนมีนาคม 2010 และเป็นรุ่น 0.0.4 ดังนั้นดูเหมือนว่าอาจถูกละทิ้ง
ขาด


3

ฉันไม่แน่ใจว่าวิธีแก้ปัญหาที่ถูกต้องคือการมุ่งเน้นไปที่การแมปฐานข้อมูลกับเว็บสแต็กของคุณเพียงอย่างเดียว แต่ควรพิจารณาถึงข้อกำหนดเฉพาะแอปพลิเคชันด้วย

คุณกำลังวิเคราะห์ฟีด Twitter หรือข้อมูลปริมาณสูงอื่น ๆ สำหรับรูปแบบ แต่ไม่ต้องการการสนับสนุนด้านธุรกรรมหรือไม่? จากนั้นเลือกสิ่งที่เร็วมาก

คุณแค่ต้องการจัดเก็บข้อมูลพื้นฐานบางอย่างในตารางสองสามตารางและตอนนี้มันไม่ใช่แอป "เน้นองค์กร" ใช่หรือไม่ จากนั้นเลือกสิ่งที่น่าสนใจเพื่อเรียนรู้

บางทีคุณอาจจะจัดเก็บข้อมูลที่มีความสำคัญต่อไคลเอนต์อย่างแท้จริงแข็งแกร่งจำเป็นต้องทำธุรกรรมและมีการจำลองแบบสดไปยังพื้นที่โฮสต์ระยะไกลเป็นต้นจากนั้นอาจดูบางอย่างเช่น postgresql มันจะไม่สะท้อนเช่นกัน แต่ไดรเวอร์ node.js ทำงานได้ดีและถ้าคุณไม่กลัว sql อย่างมากมันก็จะได้สิ่งที่คุณต้องการเข้า / ออกอย่างง่ายดาย

สำหรับความคิดเห็นของฉันเองฉันคิดว่าการใช้ stack ที่ใหม่กว่าเช่น node.js (เทียบกับเฟรมเวิร์กแบบเดิมใน php / java) เป็นการเพิ่มความซับซ้อน "ใหม่" มากพอที่เราไม่ควรเพิ่มเลเยอร์พิเศษทั้งหมดพร้อมกัน นี่เป็นบทความที่ดีที่กล่าวถึง:

http://nodeguide.com/convincing_the_boss.html


2

ฉันจะพูดจากประสบการณ์ของฉัน: CouchDB มาพร้อมกับเส้นโค้งการเรียนรู้ที่ชัดเจนในขณะที่ MongoDB ฉันพบว่าเรียนรู้และตั้งค่าได้ง่ายมาก ฉันไม่เคยใช้ redis ฉันแนะนำ MongoDB - แต่นั่นอาจจะเป็นพวกคลั่งไคล้ไร้ยางอาย - ฉันไม่มีตัวเลขเฮ้เพียง แต่อ้างว่าใช้งานง่าย


1

สกปรกยังเป็นอีกที่เก็บคีย์ - ค่าไฟล์แบบแบน ตามชื่อที่แนะนำมันเป็นวิธีแก้ปัญหาที่รวดเร็วและสกปรก แต่มีประสิทธิภาพสำหรับกรณีง่ายๆ ฉันไม่ใช่คนเขียน :)


1

สิ่งที่ควรพิจารณาเพิ่มเติม:

Globals: http://globalsdb.org

GT.M (ดูhttps://github.com/robtweed/node-mwireสำหรับจุดเริ่มต้น)

M / DB (โคลนโอเพ่นซอร์สของ SimpleDB): https://github.com/robtweed/node-mdb และคุณสามารถใช้ไคลเอนต์ Node.js SimpleDB เพื่อเข้าถึงได้: https://github.com/rjrodger/simpledb


0

ฉันพบว่าCouchDBง่ายมากที่จะเชี่ยวชาญ มี ebooks จำนวนมากที่มีอยู่บนอินเทอร์เน็ตที่จะสอนวิธีการใช้ CouchDB กับมีNode.js

ฉันพบว่าหนังสือเล่มนี้มีประโยชน์มากสำหรับการเรียนรู้ CouchDB

สำหรับการใช้ CouchDB กับ Node.js ฉันใช้โมดูลNANO

CouchDB สามารถจัดได้ทั้งIriscouchหรือCloudant

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.