CHƯƠNG 1 NoSQL 1 1 NoSQL (NoSQL Database) là gì? 1 1 1 Khái niệm Trong nhiều thập kỷ, mô hình dữ liệu chiếm ưu thế về lượng sử dụng để phát triển ứng dụng là mô hình dữ liệu quan hệ được sử dụng tro[.]
Trang 1cơ sở dữ liệu và mô hình dữ liệu mới này, từ "NoSQL" đã được đặt ra Thông thường, từ
"NoSQL" được sử dụng tương đương với "phi quan hệ"
NoSQL Database là cơ sở dữ liệu được xây dựng dành riêng cho mô hình dữ liệu và có sơđồ linh hoạt để xây dựng các ứng dụng hiện đại, dữ liệu lớn và ứng dụng nền web thời gian thực
Cơ sở dữ liệu NoSQL được công nhận rộng rãi vì khả năng dễ phát triển, chức năng cũng như hiệu năng ở quy mô lớn Các hệ thống NoSQL cũng đôi khi được gọi là "Not only SQL" (không chỉ là SQL) để nhấn mạnh rằng chúng có thể hỗ trợ các ngôn ngữ truy vấn dạng như SQL
1.1.2 Hoạt động:
Cơ sở dữ liệu NoSQL sử dụng nhiều loại mô hình dữ liệu đa dạng để truy cập và quản lý
dữ liệu, ví dụ như văn bản, đồ thị, khóa – giá trị, trong bộ nhớ và tìm kiếm Các loại cơ sở dữliệu này được tối ưu hóa dành riêng cho các ứng dụng yêu cầu mô hình dữ liệu linh hoạt cólượng dữ liệu lớn và độ trễ thấp, có thể đạt được bằng cách giảm bớt một số hạn chế về tính nhấtquán của dữ liệu của các cơ sở dữ liệu khác
Trong cơ sở dữ liệu quan hệ, hồ sơ về một cuốn sách thường được phân tách (hay còn gọi
là "chuẩn hóa") và lưu trữ trong các bảng tách biệt nhau, còn mối quan hệ được quy định bằngcác ràng buộc khóa ngoại và khóa chính Trong ví dụ này, bảng Sách có các cột cho ISBN, Tênsách và Số phiên bản, bảng Tác giả có các cột cho ID tác giả và Tên tác giả và cuối cùng,bảng Tác giả–ISBN có các cột cho ID tác giả và ISBN Mô hình quan hệ được thiết kế để chophép các cơ sở dữ liệu này thực thi tính toàn vẹn tham chiếu giữa nhiều bảng trong cơ sở dữ liệu,được chuẩn hóa để giảm dư thừa và thường được tối ưu hóa cho mục đích lưu trữ
Trong cơ sở dữ liệu NoSQL, hồ sơ về một cuốn sách thường được lưu trữ dưới dạng vănbản JSON Với từng quyển sách, mục, ISBN, Tên sách, Số phiên bản, Tên tác giả và ID tácgiả được lưu trữ dưới dạng thuộc tính trong một văn bản duy nhất Trong mô hình này, dữ liệuđược tối ưu hóa cho việc phát triển trực quan và khả năng thay đổi quy mô theo chiều ngang
1.2 Ưu điểm của NoSQL?
Cơ sở dữ liệu NoSQL là lựa chọn cực kỳ thích hợp cho nhiều ứng dụng hiện đại, ví dụnhư di động, web và trò chơi đòi hỏi phải sử dụng cơ sở dữ liệu cực kỳ thiết thực, linh hoạt, cókhả năng thay đổi quy mô và hiệu năng cao để đem đến cho người dùng trải nghiệm tuyệt vời
Linh hoạt: Cơ sở dữ liệu NoSQL thường cung cấp các sơ đồ linh hoạt giúp công đoạnphát triển nhanh hơn và có khả năng lặp lại cao hơn Mô hình dữ liệu linh hoạt biến cơ sở dữ liệuNoSQL thành lựa chọn lý tưởng cho dữ liệu không được tổ chức thành cấu trúc hoặc có cấu trúcchưa hoàn chỉnh
Trang 2Khả năng thay đổi quy mô: Cơ sở dữ liệu NoSQL thường được thiết kế để tăng quy môbằng cách sử dụng các cụm phần cứng được phân phối thay vì tăng quy mô bằng cách bổ sungmáy chủ mạnh và tốn kém Một số nhà cung cấp dịch vụ đám mây xử lý các hoạt động này mộtcách không công khai dưới dạng dịch vụ được quản lý đầy đủ.
Hiệu năng cao: Cơ sở dữ liệu NoSQL được tối ưu hóa theo mô hình dữ liệu (ví dụ nhưvăn bản, khóa–giá trị và đồ thị) và các mẫu truy cập giúp tăng hiệu năng cao hơn so với việc cốgắng đạt được mức độ chức năng tương tự bằng cơ sở dữ liệu quan hệ
Cực kỳ thiết thực: Cơ sở dữ liệu NoSQL cung cấp các API và kiểu dữ liệu cực kỳ thiếtthực được xây dựng riêng cho từng mô hình dữ liệu tương ứng
1.3 Các loại cơ sở dữ liệu NoSQL
Key-value stores: Cơ sở dữ liệu khóa–giá trị có khả năng phân mảnh cao và cho phép thay đổiquy mô theo chiều ngang ở các quy mô lớn mà các loại hình cơ sở dữ liệu khác không thể làmđược Mô hình dữ liệu khóa–giá trị được dùng cho trò chơi, công nghệ quảng cáo và đặc biệtthích hợp cho IoT Amazon DynamoDB được thiết kế để có độ trễ ổn định chỉ vài mili giây cho
Trang 3khối lượng công việc thuộc quy mô bất kỳ Hiệu năng ổn định này là lý do chính
để di chuyển tính năng Stories của Snapchat (kể cả khối lượng công việc ghi lưutrữ lớn nhất của Snapchat) sang DynamoDB
Document Oriented databases: Trong mã ứng dụng, dữ liệu thường được biểudiễn dưới dạng một đối tượng hoặc văn bản dạng JSON vì đây là mô hình dữ liệuhiệu quả và trực quan cho các nhà phát triển Cơ sở dữ liệu văn bản giúp nhà phát triển dễ dàng
lưu trữ và truy vấn dữ liệu trong một cơ sở dữ liệu bằng cách sử dụng cùng một định dạng môhình văn bản họ sử dụng trong mã ứng dụng của mình Tính chất linh hoạt, bán cấu trúc và phâncấp của các văn bản và cơ sở dữ liệu văn bản cho phép chúng phát triển phù hợp với yêu cầu củaứng dụng Mô hình văn bản phát huy hiệu quả với danh mục, hồ sơ người dùng và hệ thống quản
lý nội dung, nơi từng văn bản là duy nhất và phát triển theo thời gian Amazon DocumentDB(với khả năng tương thích MongoDB) và MongoDB là các cơ sở dữ liệu văn bản phổ biến cung
cấp các API mạnh mẽ và trực quan để phát triển linh hoạt và lặp lại
Graph stores: Mục đích của cơ sở dữ liệu đồ thị là giúp việc dựng và chạy ứng dụng hoạt độngvới các bộ dữ liệu có khả năng kết nối cao trở nên dễ dàng Cơ sở dữ liệu đồ thị thường được sửdụng cho các đồ thị tri thức, mạng xã hội, công cụ đề xuất và phát hiện lừa đảo AmazonNeptune là dịch vụ cơ sở dữ liệu đồ thị được quản lý đầy đủ Neptune hỗ trợ cả mô hình Đồ thịthuộc tính lẫn Framework mô tả tài nguyên (RDF), cung cấp cho người dùng lựa chọn hai API
Trang 4đồ thị: TinkerPop và RDF/SPARQL Các cơ sở dữ liệu đồ thị phổ biến gồm cóNeo4j và Giraph
Column-oriented databases (column-family) Cơ sở dữ liệu column-family lưu trữ
dữ liệu trong nhiều cột trong mỗi dòng với key cho từng dòng Column families làmột nhóm các dữ liệu liên quan được truy cập cùng với nhau Ví dụ, với khách
hàng, chúng ta thường xuyên sử dụng thông tin cá nhân trong cùng một lúc chứ không phải hóađơn của họ Cassandra là một trong số cơ sở dữ liệu column-family phổ biến Ngoài ra còn có một
số cơ sở dữ liệu khác như HBase, Hypertable và Amazon DynamoDB Cassandra có thể đượcmiêu tả nhanh và khả năng mở rộng dễ dàng với các thao tác viết thông qua các cụm Các cụmkhông có node master, vì thế bất kỳ việc đọc và ghi nào đểu có thể được xử lý bởi bất kỳ node nàotrong cụm
Tìm kiếm: Nhiều ứng dụng xuất nhật ký để giúp nhà phát triển khắc phục sự
cố Amazon Elasticsearch Service (Amazon ES) là Cơ sở dữ liệu được xây dựngchuyên dụng để cung cấp khả năng ảo hóa và phân tích dữ liệu do máy tạo gầnnhư theo thời gian thực bằng cách tạo chỉ mục, tập hợp và tìm kiếm nhật ký và sốliệu có cấu trúc chưa hoàn chỉnh Amazon ES còn là công cụ tìm kiếm mạnh mẽ
và có hiệu năng cao dành cho các trường hợp sử dụng tìm kiếm toàn văn bản Expedia đang sửdụng trên 150 miền Amazon ES, 30 TB dữ liệu và 30 tỷ văn bản cho nhiều chức năng đóng vaitrò quan trọng, từ theo dõi và khắc phục sự cố trong khâu vận hành đến tối ưu hóa quá trình theodấu và định giá chồng ứng dụng được phân phối
Trang 51.4 Cơ sở dữ liệu SQL (quan hệ) so với Cơ sở dữ liệu NoSQL (phi quan hệ)
Trong nhiều thập kỷ, mô hình dữ liệu chiếm ưu thế về lượng sử dụng để phát triển ứngdụng là mô hình dữ liệu quan hệ được sử dụng trong các cơ sở dữ liệu quan hệ, ví dụ như Oracle,DB2, SQL Server, MySQL và PostgreSQL Mãi cho đến cuối những năm 2000, các mô hình dữliệu khác mới bắt đầu được đưa vào áp dụng và sử dụng nhiều hơn Để phân biệt và phân loại các
cơ sở dữ liệu và mô hình dữ liệu mới này, từ "NoSQL" đã được đặt ra Thông thường, thuật ngữ
"NoSQL" được sử dụng tương đương với "phi quan hệ"
Mặc dù có nhiều loại cơ sở dữ liệu NoSQL với nhiều tính năng đa dạng, bảng sau sẽminh họa một số khác biệt giữa cơ sở dữ liệu SQL và NoSQL
1.4.1 So sánh tổng quát:
Cơ sở dữ liệu quan hệ Cơ sở dữ liệu NoSQL
để xử lí phân tích trực tuyến (OLAP)
Các cơ sở dữ liệu NoSQL trong bộ nhớ, giá trị–khóa, văn bản và đồ thị được thiết
kế cho OLTP cho một số mẫu truy cập dữ liệu, bao gồm các ứng dụng có độ trễ thấp
Cơ sở dữ liệu tìm kiếm NoSQL được thiết
kế để phục vụ phân tích dữ liệu có cấu trúcchưa hoàn chỉnh
Mô hình
dữ liệu Mô hình quan hệ chuẩn hóa dữ liệu vào bảng được hình thành từ hàng
và cột Sơ đồ quy định rõ ràng bảng,hàng, cột, chỉ mục, mối quan hệ giữa các bảng và các thành tố cơ sở
dữ liệu khác Cơ sở dữ liệu sẽ thực thi tính toàn vẹn tham chiếu trong mối quan hệ giữa các bảng
Cơ sở dữ liệu NoSQL cung cấp nhiều mô hình dữ liệu đa dạng, trong đó có văn bản, đồ thị, khóa–giá trị, trong bộ nhớ và tìm kiếm
Thuộc tính
ACID
Cơ sở dữ liệu quan hệ có các thuộc tính mang tính nguyên tố, nhất quán,tách biệt và bền vững (ACID):
• Tính nguyên tố đòi hỏi giao dịch phải được thực thi đầy
đủ hoặc hoàn toàn không thực hiện
• Tính nhất quán đòi hỏi rằng khi giao dịch được thực hiện,
dữ liệu phải nhất quán với sơ
Cơ sở dữ liệu NoSQL thường phải đánh đổi bằng cách nới lỏng một số thuộc tính ACID này của cơ sở dữ liệu quan hệ để có
mô hình dữ liệu linh hoạt hơn có khả năng thay đổi quy mô theo chiều ngang Việc này biến các cơ sở dữ liệu NoSQL thành lựa chọn tuyệt vời cho các trường hợp sử dụng cần thông lượng cao, độ trễ thấp cần thay đổi quy mô theo chiều ngang vượt qua giới hạn của một phiên bản duy nhất
Trang 6đồ cơ sở dữ liệu.
• Tính tách biệt đòi hỏi rằng các giao dịch diễn ra đồng thời phải được thực thi tách biệt với nhau
• Tính bền vững đòi hỏi phải
có khả năng phục hồi từ tình trạng hư hỏng hệ thống hoặc mất điện đột ngột về trạng thái đã biết cuối cùng
Hiệu năng Hiệu năng thường phụ thuộc vào hệ
thống con của ổ đĩa Thông thường, việc tối ưu hóa các truy vấn, chỉ mục và cấu trúc bảng bắt buộc phải được thực hiện để đạt mức hiệu năng tối đa
Hiệu năng thường được xem là chức năng của kích cỡ cụm phần cứng ngầm, độ trễ mạng và ứng dụng đưa ra lệnh gọi
Quy mô Cơ sở dữ liệu quan hệ thường tăng
quy mô bằng cách tăng năng lực điện toán của phần cứng hoặc tăng quy mô bằng cách thêm bản sao của khối lượng công việc chỉ đọc
Cơ sở dữ liệu NoSQL thường có tính phân mảnh cao do các mẫu truy cập khóa–giá trị
có khả năng tăng quy mô bằng cách sử dụng kiến trúc được phân phối để tăng thông lượng, đem đến hiệu năng ổn định với quy mô gần như không giới hạn
API Yêu cầu lưu trữ và truy xuất dữ liệu
được truyền đạt bằng cách sử dụng các truy vấn nhất quán với ngôn ngữtruy vấn có cấu trúc (SQL) Các truyvấn này được phân tích và thực thi bởi cơ sở dữ liệu quan hệ
API trên cơ sở đối tượng cho phép các nhà phát triển ứng dụng dễ dàng lưu trữ và truyxuất cấu trúc dữ liệu trong bộ nhớ Khóa phân mảnh tìm kiếm các cặp khóa–giá trị, tập hợp cột hoặc văn bản có cấu trúc chưa hoàn chỉnh có chứa đối tượng và thuộc tính của ứng dụng được xếp theo chuỗi
Trang 81.4.2 Thống kê việc sử dụng database năm 2018 :
Trang 91.4.3 Bảng thuật ngữ:
Khóa chính Id đối tượng Khóa chính Khóa chính ID văn bản
1.5 MongoDB
1.5.1 Tổng quan
Một số định nghĩa trước khi đi sâu về MongoDB Đây là một cross-platform, DB hướng documents với hiệu năng cao, có thể đáp ứng cho đa dạng các hệ thống và dễ dàng để scale Tư tưởng của MongoDB là thông qua khái niệm collection và document Vì vậy MongoDB là cross-platform NoSQL Document Oriented databases.
Database là một container vật lý cho các collection Mỗi DB được thiết lập cho riêng nó một danh sách các files hệ thống files Một máy chủ MongoDB đơn thường có nhiều DB
Collection là một nhóm các documents của MongoDB Nó tương đương với một table trong RDBMS Một Collection tồn tại trong một cơ sở dữ liệu duy nhất Các collection ko tạo nên một schema Documents trong collection có thể có các fields khác nhau Thông thường, tất
cả các documents trong collections có mục đích khá giống nhau hoặc liên quan tới nhau
Document là một tập hợp các cặp key-value Documents có schema động Schema động có nghĩa là documents trong cùng một collection không cần phải có cùng một
Trang 10nhóm các fields hay cấu trúc giống nhau, và các fields phổ biến trong các documents của collection có thể chứa các loại dữ liệu khác nhau.
1.5.2 Yêu cầu khi thiết kế schema trong MongoDB
• Thiết kế schema dựa trên yêu cầu của user
• Kết hợp các object vào một document nếu bạn sử dụng chúng với nhau Nếu không thì tách riêng hẳn nó ra (nhưng cần phải chú ý là sau này nó sẽ không phải joins).
• Duplicate dữ liệu (nhưng có giới hạn) vì không gian đĩa là quá rẻ so với tốc độ
xử lý.
• joins khi write, không joins khi read.
• Tối ưu schema cho hầu hết các case sử dụng thông thường
• Tập hợp các nhóm phức tạp vào schema
Ví dụ : Giả sử là một khách hàng cần một thiết kế DB cho blog của anh ta và cân nhắc
sự khác biệt schema giữa RDMS và MongoDB Web sẽ có những yêu cầu sau :
• Mọi post có unique title, description và url.
Trang 11• Mọi post có thể có 1 hoặc nhiều tags.
• Mọi post có name của publisher và số lượng người xem likes
• Mọi post có comments bới một user với name, message, data-time và likes.
• Mỗi postc có thể có 0 hoặc nhiều comments.
Trong thiết kế schema của RDBMS chúng ta sẽ có như sau về post và comments và tags.
Trong khi đó ở MongoDB schema, chúng ta sẽ có thiết kế một collection post và có cấu trúc như sau :
Trang 121.5.3 Một số lệnh liên quan đến Database
a MongoDB - Create/Drop Database
use DATABASE_NAME
Ví dụ :
Trang 14name thì sẽ yêu cầu phải là một string Trong khi đó mục options thì chứa khá nhiều thông số
về : capped, autoIndexID, size , max
capped là một tập hợp các collection có size fixed và tự động viết đề lên các entries cũ của nó khi chạm đến max size Nếu bạn cho nó true thì bạn phải điền size với lại max
autoIndexID sẽ tự động tạo một index trên biến _id field.s Mặc định giá trị này là false
và syntax để drop một collection
Trang 151.5.3 Các kiểu dữ liệu trong MongoDB
• String: String trong MongoDB phải là UTF-8 hợp lệ.
• Integer: Số nguyên có thể là 32 bit hoặc 64 bit tùy thuộc vào máy chủ của bạn.
• Boolean
• Double
• Min/ Max keys: Loại này được sử dụng để so sánh giá trị đối với các yếu tố thấp nhất và cao nhất BSON.
Trang 161.5.4 Sử dụng MongoDB - Document
- Insert một Document
>db.COLLECTION_NAME.insert(document)
Ví dụ
>db.mycol.insert({
_id: ObjectId(7df78ad8902c),
title: 'MongoDB Overview',
description: 'MongoDB is no sql database', by: 'tutorials point',
url: 'http://www.tutorialspoint.com',
tags: ['mongodb', 'database', 'NoSQL'],
Trang 17title: 'MongoDB Overview',
description: 'MongoDB is no sql database',
by: 'tutorials point',
title: 'NoSQL Database',
description: 'NoSQL database doesn't have tables',
by: 'tutorials point',
Trang 18message: 'My first comment',
dateCreated: new Date(2013,11,10,2,35),
"title": "MongoDB Overview",
"description": "MongoDB is no sql database",
"by": "tutorials point",
Trang 19- Dưới đây là một ví dụ sử dụng cả AND và OR trong MongoDB
>db.mycol.find({"likes": {$gt:10}, $or: [{"by": "tutorials point"}, {"title": "MongoDB Overview"}]}).pretty()
{
"_id": ObjectId(7df78ad8902c),
"title": "MongoDB Overview",
"description": "MongoDB is no sql database",
"by": "tutorials point",
Trang 20- Lệnh UPDATE
>db.COLLECTION_NAME.update(SELECTIOIN_CRITERIA, UPDATED_DATA)Giá sử dữ liệu ban đầu là như thế này
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}
Sau khi chạy
>db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}})
Sẽ nhận được kết quả như sau
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"New MongoDB Tutorial"}
{ "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"}
{ "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"}