cơ sở dữ liệu node.js [đã đóng]


115

Tôi đang tìm kiếm cơ sở dữ liệu để ghép nối với ứng dụng node.js. Tôi giả định rằng db json / nosql sẽ thích hợp hơn so với DB quan hệ [Tôi có thể làm mà không có bất kỳ sự không phù hợp trở kháng json / sql nào]. Tôi đang cân nhắc:

  • couchdb
  • mongodb
  • redis

Bất cứ ai có bất kỳ quan điểm / câu chuyện chiến tranh nào về khả năng tương thích / khả năng triển khai ở trên với node.js không? Bất kỳ mục yêu thích rõ ràng?


2
Tôi nghĩ sẽ hữu ích nếu trả lời câu hỏi nếu các yêu cầu rộng hơn được đề cập đến. Mỗi DB có ưu, nhược điểm và đặc biệt riêng. Hãy cho chúng tôi biết thông số kỹ thuật!
Samyak Bhuta

Câu trả lời:


79

Tôi là nhà phát triển trình điều khiển mongodb cho node.js. Tôi đang sử dụng mongodb cho các dự án của riêng mình và rất hài lòng với hiệu suất của mongodb.

Trình điều khiển Mongodb cho node.js

(Ổ cắm không biết xấu hổ) Vui lòng đặt bất kỳ câu hỏi nào về trình điều khiển tại

Nhóm Google cho trình điều khiển mongodb

hoặc ở đây tại Stackoverflow

Chúc bạn vui vẻ với node.js. Tôi hoàn toàn thích nền tảng: D


1
cũng nhìn vào cầy mangut, mà là một ORM khá đẹp đó được xây dựng trên đỉnh / sử dụng trình điều khiển MongoDB cho Node.js
taxilian

2
Chúng tôi đang sử dụng Node.js + MongoDB trong một thời gian khá dài và nó đang diễn ra rất tốt. Và đầy đủ kudo cho @christkv, người lái xe rất vững chắc và sẽ không làm bạn thất vọng. Chúng tôi đã triển khai node.js / express.js + mongodb trên EC2 một cách dễ dàng. Ngoài ra, hãy lưu ý rằng chúng tôi không sử dụng Mongoose. Nói về những thách thức (giả sử bạn đã giỏi Node), bạn cần phải giỏi Mongo cách thực hiện các công việc (truy vấn và tổng hợp) cho bất kỳ sự phát triển ứng dụng hoặc dịch vụ nghiêm túc nào. Tìm hiểu cách Mongo khác với các DB khác sẽ thực sự là điều bạn nên làm trước tiên nếu bạn vẫn đang trong giai đoạn đánh giá.
Samyak Bhuta

từ những gì tôi hiểu, một số tính năng thực sự thú vị sẽ được cung cấp để tăng tốc độ tổng hợp trong mongodb. Một trong số đó là các hàm tổng hợp gốc. slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011 và cũng có thể chuyển sang v8 thay vì spidermonkey cho công cụ javascript sẽ cho phép mỗi lệnh map-Reduce chạy trong chuỗi riêng của nó (tạm biệt map-Reduce )
christkv

25

Mặc dù lựa chọn của bạn phụ thuộc rất nhiều vào các tính năng bạn đang sử dụng, nhưng tôi thực sự đánh giá cao CouchDB vì môi trường JavaScript gốc của nó. Cả dữ liệu và chế độ xem đều được viết bằng JavaScript nên theo ý kiến ​​của tôi, nó rất phù hợp với node.js.

Ngoài ra còn có các thư viện máy khách khác nhau , một số có cấp độ khá thấp, các thư viện khác thực sự rất trừu tượng.

Nhưng như tôi đã nói, bạn cũng nên nghĩ về các tính năng mà bạn yêu cầu cho cơ sở dữ liệu của mình.


18

Redis là một lựa chọn phổ biến. Những gì bạn đang theo đuổi là một trình điều khiển cơ sở dữ liệu không chặn.

Các cơ sở dữ liệu bạn liệt kê đều rất khác nhau. Redis lấy ý tưởng về kho lưu trữ khóa-giá trị và chạy với nó, thêm nhiều kiểu dữ liệu và cách truy vấn dữ liệu. Mọi người thường lưu ý rằng vảy đỏ cũng rất tốt; nghĩa là nó có chi phí rất thấp mặc dù có khả năng thực hiện.

Đây là danh sách các mô-đun cơ sở dữ liệu có sẵn: http://wiki.github.com/ry/node/modules#database


Có Redis rất tuyệt nhưng có vẻ như chúng ta có thể lưu trữ dữ liệu nhị phân nhưng không thể truy xuất điều đó! Ít nhất tôi không thể tìm thấy bất kỳ lệnh Redis nào cho dữ liệu nhị phân.
AppleGrew

Có thật không? Tôi đã sử dụng để lưu trữ dữ liệu nhị phân (sử dụng lớp đệm của Node) và nó hoạt động tốt. Phiên bản nào của Redis / Node?
DanielS

12
Theo mặc định, node_redis sẽ trả về chuỗi JavaScript cho tất cả các lệnh. Để nhận bộ đệm thay vào đó, hãy tạo một ứng dụng khách bằng createClient (port, host, {return_buffers: true});
Matt Ranney

4
@MattRanney, Bạn tiết kiệm vừa giúp tôi tiết kiệm thêm hàng giờ đào! Tôi không thấy điều này ở bất kỳ đâu trong tài liệu của node-Redis và thời gian chìm trong 5 giờ theo đúng nghĩa đen. Sự cảm kích của tôi là không có giới hạn trong thời điểm này.
ghayes

Về lý thuyết thì tất cả nghe có vẻ ổn nhưng hãy lấy một ví dụ thực tế, bạn có một API JSON mà bạn truy vấn cứ sau 20 giây trả về một mảng, bạn muốn có thể lưu vào bộ nhớ cache điều này, bạn vẫn sử dụng Redis chứ? cũng phải làm một tìm kiếm mờ qua mảng này
PirateApp

15

Tôi thực sự thích CouchDB. Đó là một chút đường cong học tập, nhưng các lượt xem thực sự mạnh mẽ khi bạn hiểu cách sử dụng chúng. Có một mô-đun được gọi là cái nôi trên github và npm thực sự dễ làm việc. Tôi chưa thể kiểm tra tốc độ của nó, nhưng nó thực sự linh hoạt (bạn cũng có thể truy cập dữ liệu của mình trong trình duyệt nếu muốn).

Vấn đề chính ở đây là thiết kế cơ sở dữ liệu nào phù hợp với ứng dụng của bạn. Bạn có dữ liệu chủ yếu là giá trị quan trọng trong tự nhiên không? Nếu vậy, hãy sử dụng Redis. Bạn có dữ liệu mà không phải tất cả các tài liệu nhất thiết phải có các trường giống nhau? Nếu vậy, hãy sử dụng cơ sở dữ liệu NoSQL như CouchDB.

Điều tồi tệ tiếp theo khi sử dụng cơ sở dữ liệu chặn là sử dụng sai cơ sở dữ liệu cho dữ liệu của bạn. CouchDB được quản lý bởi Apache, vì vậy bạn biết rằng nó có chất lượng tốt, nhưng sẽ không hợp lý khi sử dụng nó nếu dữ liệu của bạn có ý nghĩa hơn trong một bảng SQL hoặc một kho lưu trữ khóa-giá trị đơn giản.

Hãy nghĩ về trường hợp sử dụng của bạn. Bạn sẽ có nhiều khả năng muốn thực hiện tìm kiếm toàn văn, chỉ lấy dữ liệu theo từng khóa, hoặc nhận phạm vi tài liệu có các thuộc tính tương tự?


8

Có thể bạn muốn kiểm tra Hệ thống cơ sở dữ liệu / tính bền bỉ cấp cao cho node.js.

từ thechangelog.com :

Persistence là một dự án cho phép một API cấp cao để lưu trữ dữ liệu giữa các lần chạy quy trình. Mục đích là để hỗ trợ các chương trình phụ trợ dễ sử dụng, mạnh mẽ, linh hoạt hoặc tất cả những điều trên nếu có thể.

Cơ sở dữ liệu được hỗ trợ bao gồm:

  • PostgreSQL - Cơ sở dữ liệu quan hệ cấp doanh nghiệp. Trình điều khiển được triển khai bằng JavaScript thuần túy và giao tiếp qua TCP bằng giao thức dây PostgreSQL.
  • Sqlite3 - Cơ sở dữ liệu quan hệ đơn giản, nhanh chóng, không cần máy chủ. Trình điều khiển này là một trình bao bọc xung quanh chương trình sqlite3 dòng lệnh. Nó yêu cầu sqlite3 ở trong đường dẫn. Giao tiếp cực kỳ nhanh, nhưng các loại không chính xác lắm. Chỉ có chuỗi và null được trả về.
  • MongoDB - Cơ sở dữ liệu hướng tài liệu có thể mở rộng, hiệu suất cao, mã nguồn mở, không có lược đồ. Trình điều khiển này cũng thực hiện giao thức dây trong JavaScript và giao tiếp với máy chủ qua TCP.
  • JSON-DB - Cơ sở dữ liệu hướng tài liệu, không có lược đồ của hệ thống tự phát triển, sử dụng các tệp phẳng đơn giản chứa các đối tượng JSON. Điều này không có yêu cầu nào ngoại trừ nút và hệ thống tệp. Hiệu suất sẽ được xác định sau khi nó được triển khai đầy đủ.

13
Persistence đã không được cập nhật kể từ tháng 3 năm 2010 và đang được phát hành 0.0.4, vì vậy có vẻ như nó có thể đã bị bỏ rơi.
thiếu


3

Tôi không chắc giải pháp chính xác là chỉ tập trung vào ánh xạ cơ sở dữ liệu với ngăn xếp web của bạn, mà còn xem xét các yêu cầu dành riêng cho ứng dụng.

Bạn đang phân tích nguồn cấp dữ liệu twitter hoặc dữ liệu khối lượng lớn khác cho các mẫu, nhưng không cần hỗ trợ giao dịch? Sau đó, chọn một cái gì đó thực sự nhanh chóng.

Bạn chỉ muốn lưu trữ một số thông tin thực sự cơ bản trong một vài bảng và nó hiện không phải là một ứng dụng "tập trung vào doanh nghiệp"? Sau đó, chọn một cái gì đó thú vị để học.

Có thể bạn sẽ lưu trữ dữ liệu thực sự quan trọng đối với khách hàng, mạnh mẽ, cần được giao dịch và có bản sao trực tiếp đến các cơ sở lưu trữ từ xa, v.v. Sau đó, có thể xem xét một cái gì đó như postgresql. Nó cũng sẽ không phản chiếu, nhưng trình điều khiển node.js hoạt động khá tốt và nếu bạn không sợ sql, nó sẽ nhận được những gì bạn muốn vào / ra khá dễ dàng.

Đối với ý kiến ​​của riêng tôi, tôi nghĩ rằng đi với một ngăn xếp mới hơn như node.js (so với các khung truyền thống trong php / java) là thêm đủ độ phức tạp "mới" mà người ta không nên thêm các lớp bổ sung cùng một lúc. Đây là một bài báo hay thảo luận rằng:

http://nodeguide.com/convincing_the_boss.html


2

Tôi sẽ nói từ kinh nghiệm của mình: CouchDB đi kèm với một đường cong học tập nhất định, trong khi MongoDB tôi thấy rất dễ học và thiết lập. Tôi chưa bao giờ sử dụng redis. Tôi đề nghị MongoDB - nhưng có lẽ đó là chủ nghĩa cuồng tín vô liêm sỉ - tôi không có số, heh, chỉ tuyên bố về sự dễ sử dụng.


1

dơ bẩn là một kho lưu trữ khóa-giá trị tập tin phẳng khác. Như tên cho thấy, nó là một giải pháp nhanh chóng và bẩn nhưng hiệu quả cho các trường hợp đơn giản. Tôi không phải là tác giả :)



0

Tôi thấy CouchDB rất dễ sử dụng. Có rất nhiều sách điện tử có sẵn trên internet sẽ dạy bạn cách sử dụng CouchDB với Node.js .

Tôi thấy cuốn sách này rất hữu ích cho việc học CouchDB.

Để sử dụng CouchDB với Node.js, tôi sử dụng mô-đun NANO .

CouchDB có thể được lưu trữ trên Iriscouch hoặc Cloudant .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.