Giới thiệu Node.js (NodeJS)
Node.js là gì?
- Node.js là một môi trường máy chủ mã nguồn mở.
- Node.js miễn phí.
- Node.js chạy trên nhiều nền tảng khác nhau (Windows, Linux, Unix, Mac OS X, v.v.).
- Node.js sử dụng JavaScript trên máy chủ.
Tại sao phải dùng Node.js?
Node.js sử dụng lập trình không đồng bộ.
Một nhiệm vụ phổ biến đối với máy chủ web (web server) có thể là mở một tập tin trên máy chủ và trả lại nội
dung
cho máy khách (web client - browser). Ví dụ cách PHP hoặc ASP xử lý yêu cầu tập tin:
- Gửi tác vụ đến hệ thống tập tin của máy tính.
- Đợi trong khi hệ thống tập tin mở và đọc tập tin.
- Trả về nội dung cho khách hàng.
- Sẵn sàng xử lý yêu cầu tiếp theo.
Đây là cách Node.js xử lý yêu cầu tập tin:
- Gửi tác vụ đến hệ thống tập tin của máy tính.
- Sẵn sàng xử lý yêu cầu tiếp theo.
- Khi hệ thống tập tin đã mở và đọc tập tin, máy chủ sẽ trả lại nội dung cho máy khách.
Node.js loại bỏ sự chờ đợi và chỉ cần tiếp tục với yêu cầu tiếp theo. Node.js chạy lập trình đơn luồng, không
chặn, không đồng bộ, rất hiệu quả về bộ nhớ.
Node.js có thể làm gì?
- Node.js có thể tạo nội dung trang động.
- Node.js có thể tạo, mở, đọc, ghi, xóa và đóng tập tin trên máy chủ.
- Node.js có thể thu thập dữ liệu biểu mẫu.
- Node.js có thể thêm, xóa, sửa đổi dữ liệu trong cơ sở dữ liệu của bạn.
Tập tin Node.js là gì?
- Các tập tin Node.js chứa các tác vụ sẽ được thực thi trong các sự kiện nhất định.
- Một sự kiện điển hình là ai đó đang cố truy cập vào một cổng trên máy chủ.
- Các tập tin Node.js phải được khởi tạo trên máy chủ trước khi có hiệu lực.
- Các tập tin Node.js có phần mở rộng ".js"
Giới thiệu MongoDB
MongoDB là gì?
MongoDB, cơ sở dữ liệu NoSQL phổ biến nhất, là cơ sở dữ liệu hướng tài liệu (document-oriented database) mã
nguồn
mở. Thuật ngữ "NoSQL" có nghĩa là "không quan hệ" (non-relational). Điều đó có nghĩa là MongoDB không dựa trên
cấu
trúc cơ sở dữ liệu quan hệ giống như bảng mà cung cấp một cơ chế hoàn toàn khác để lưu trữ và truy xuất dữ liệu.
Định dạng lưu trữ này được gọi là BSON (tương tự như định dạng JSON).
Cơ sở dữ liệu SQL lưu trữ dữ liệu ở định dạng bảng. Dữ liệu này được lưu trữ trong một mô hình dữ liệu được xác
định trước, mô hình này không linh hoạt lắm đối với các ứng dụng đang phát triển cao trong thế giới thực ngày
nay.
Các ứng dụng hiện đại được kết nối mạng, xã hội và tương tác nhiều hơn bao giờ hết. Các ứng dụng đang lưu trữ
ngày
càng nhiều dữ liệu và đang truy cập nó với tốc độ cao hơn.
Hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) không phải là lựa chọn phù hợp khi xử lý dữ liệu lớn (big data) vì
chúng
không có khả năng mở rộng theo chiều ngang. Nếu cơ sở dữ liệu chạy trên một máy chủ duy nhất, thì nó sẽ đạt đến
giới hạn mở rộng. Cơ sở dữ liệu NoSQL có khả năng mở rộng cao hơn và cung cấp hiệu suất vượt trội. MongoDB là
một
cơ sở dữ liệu NoSQL mở rộng quy mô bằng cách thêm ngày càng nhiều máy chủ và tăng năng suất với mô hình tài liệu
linh hoạt của nó.
So sánh RDBMS và MongoDB
- RDBMS có thiết kế lược đồ điển hình hiển thị số lượng bảng (table) và mối quan hệ (relationship) giữa các
bảng
này trong khi MongoDB là hướng tài liệu (document-oriented). Không có khái niệm về lược đồ hoặc mối quan hệ.
- Các giao dịch phức tạp không được hỗ trợ trong MongoDB vì các hoạt động kết hợp phức tạp không khả dụng.
- MongoDB cho phép cấu trúc tài liệu có khả năng mở rộng và linh hoạt cao. Ví dụ: một tài liệu dữ liệu của một
tập
hợp trong MongoDB có thể có hai trường trong khi tài liệu khác trong cùng một tập hợp có thể có bốn trường.
- MongoDB nhanh hơn so với RDBMS do kỹ thuật lưu trữ và lập chỉ mục hiệu quả.
- Có một số thuật ngữ có liên quan trong cả hai cơ sở dữ liệu. Cái được gọi là Bảng (Table) trong RDBMS được
gọi
là Bộ sưu tập (Collection) trong MongoDB. Tương tự, một Tuple (hay Record) được gọi là Tài liệu (Document) và
một
Cột (Column) được gọi là một Trường (Field). MongoDB cung cấp ‘_id’ mặc định (nếu không được cung cấp rõ ràng)
là
số thập lục phân 12 byte đảm bảo tính duy nhất của mọi tài liệu. Nó tương tự như khóa chính (primary key)
trong
RDBMS.
Các đặc trưng của MongoDB
- Hướng tài liệu (Document Oriented): MongoDB lưu trữ chủ đề chính với số lượng tài liệu tối thiểu và không
phải
bằng cách chia nó thành nhiều cấu trúc quan hệ như RDBMS. Ví dụ, nó lưu trữ tất cả thông tin của một máy tính
trong một tài liệu duy nhất được gọi là Máy tính và không nằm trong các cấu trúc quan hệ riêng biệt như CPU,
RAM,
đĩa cứng, v.v.
- Lập chỉ mục (Indexing): Nếu không lập chỉ mục, cơ sở dữ liệu sẽ phải quét mọi tài liệu của bộ sưu tập để
chọn
những tài liệu phù hợp với truy vấn sẽ không hiệu quả. Vì vậy, để tìm kiếm hiệu quả Lập chỉ mục là điều bắt
buộc
và MongoDB sử dụng nó để xử lý khối lượng dữ liệu khổng lồ trong thời gian rất ngắn.
- Khả năng mở rộng (Scalability): MongoDB mở rộng quy mô theo chiều ngang bằng cách sử dụng phân đoạn
(sharding)
(phân vùng dữ liệu trên các máy chủ khác nhau). Dữ liệu được phân vùng thành các phần dữ liệu bằng cách sử
dụng
khóa phân đoạn và các phần dữ liệu này được phân bổ đồng đều trên các phân đoạn nằm trên nhiều máy chủ vật lý.
Ngoài ra, các máy mới có thể được thêm vào cơ sở dữ liệu đang chạy.
- Nhân rộng và Tính khả dụng cao (Replication and High Availability): MongoDB tăng tính khả dụng của dữ liệu
với
nhiều bản sao dữ liệu trên các máy chủ khác nhau. Bằng cách cung cấp dự phòng, nó bảo vệ cơ sở dữ liệu khỏi
các
lỗi phần cứng. Nếu một máy chủ gặp sự cố, dữ liệu có thể được truy xuất dễ dàng từ các máy chủ đang hoạt động
khác
cũng có dữ liệu được lưu trữ trên chúng.
- Tổng hợp (Aggregation): Các hoạt động tổng hợp xử lý các bản ghi dữ liệu và trả về các kết quả đã tính toán.
Nó
tương tự như mệnh đề GROUP BY trong SQL. Một số biểu thức tổng hợp là sum, average, min, max, v.v.
Khi nào dùng MongoDB?
MongoDB được ưu tiên sử dụng trong các trường hợp:
- Dữ liệu lớn (Big Data): Nếu bạn có một lượng lớn dữ liệu được lưu trữ trong các bảng, hãy nghĩ đến MongoDB
trước
cơ sở dữ liệu RDBMS. MongoDB có giải pháp tích hợp để phân vùng và làm sắc nét cơ sở dữ liệu của bạn.
- Lược đồ không ổn định (Unstable Schema): Việc thêm một cột mới trong RDBMS rất khó trong khi MongoDB là một
lược
đồ ít hơn. Việc thêm một trường mới không ảnh hưởng đến các tài liệu cũ và sẽ rất dễ dàng.
- Dữ liệu phân tán (Distributed data): Vì nhiều bản sao dữ liệu được lưu trữ trên các máy chủ khác nhau nên
việc
khôi phục dữ liệu diễn ra tức thì và an toàn ngay cả khi có lỗi phần cứng.
Các ứng dụng thực tế dùng Node.js và MongoDB
Cả Node và MongoDB đều cực kỳ phổ biến và tích cực trong cộng đồng phát triển. Điều này cũng đúng với các doanh
nghiệp. Một số tên tuổi lớn nhất trong Fortune 500 đã hoàn toàn chấp nhận Node để cung cấp sức mạnh cho các ứng
dụng web của họ. Điều này phần lớn là do bản chất không đồng bộ của Node, khiến nó trở thành một giải pháp thay
thế tuyệt vời cho các ứng dụng có lưu lượng truy cập cao, I/O cao như các trang web thương mại điện tử và ứng
dụng
di động.
Đây chỉ là một danh sách nhỏ của một số công ty lớn đang làm việc với Node:
- PayPal
- LinkedIn
- eBay
- Walmart
- Yahoo!
- Microsoft
- Dow Jones
- Uber
- New York Times
Việc sử dụng MongoDB trong lĩnh vực doanh nghiệp cũng ấn tượng và phổ biến không kém, với ngày càng nhiều công
ty
dẫn đầu áp dụng máy chủ cơ sở dữ liệu NoSQL. Đây chỉ là một danh sách nhỏ của một số công ty lớn đang làm việc
với
MongoDB:
- Cisco
- Craigslist Inc.
- Forbes
- FourSquare
- Intuit
- McAfee
- MTV
- MetLife
- Shutterfly
- Under Armour