Please enable JavaScript.
Coggle requires JavaScript to display documents.
Overview NoSQL, Document store, Common Features, Key-value store - Coggle…
Overview NoSQL
Quản lí dữ liệu với cơ sở dữ liệu phân tán
Lưu trữ dữ liệu liên tục (Store Data Persistently)
Nghĩa là khi máy chủ bị lỗi hay bảo trì, các dữ liệu vẫn được nguyên vẹn, không bị mất mát dữ liệu
Dữ liệu được lưu trên RAM không được gọi là lưu trữ liên tục
Duy trì tính nhất quán của dữ liệu (Maintain Data Consistency)
Đảm bảo dữ liệu sẵn sàng (Ensure Data Availability)
Cân bằng Thời gian phản hồi (Response Times), tính nhất quán (Consistency) và độ bền vững (Durability)
Định lý CAP
The e-commerce shopping cart:
Dữ liệu có thể có Available nhưng không có Consistent
The two-phase commit:
Dữ liệu có thể có Consistent nhưng không có Available
Consistency (C):
Tất cả người dùng sẽ luôn nhìn thấy dữ liệu giống nhau
Availability (A):
Mỗi người dùng đều có thể đọc và ghi dữ liệu
Partition Tolerance (P):
Hệ thống vẫn hoạt động tốt bất chấp kết nối giữa các máy chủ không ổn định
CA:
RDBMSs, Aster Data, Greenplum, Vertica
CP:
Redis, MongoDB, MemcacheDB, HBase, BigTable
AP:
Cassandra, CouchDB, Dynamo, SimpleDB
BASE
Tính khả dụng cơ bản (Basic availability):
Mỗi yêu cầu được đảm bảo một phản hồi thực hiện thành công hoặc không thành công
Trạng thái mềm (Soft state):
Trạng thái của hệ thống có thể thay đổi theo thời gian, vào những thời điểm mà không cần bất kỳ đầu vào nào (đối với tính nhất quán cuối cùng)
Tính nhất quán cuối cùng (Eventual consistency):
Cơ sở dữ liệu có thể không nhất quán trong giây lát nhưng cuối cùng sẽ nhất quán
Casual consistency
Read-your-writes consistency
Session consistency
Monotonic read consistency
Monotonic write consistency
Đặc điểm
Scalability (Khả năng mở rộng)
Là khả năng đáp ứng hiệu quả nhu cầu cho các khối lượng công việc khác nhau
Mở rộng theo chiều ngang (Scaling out/horizontal scaling) linh hoạt hơn mở rộng theo chiều dọc (Scaling up/vertical scaling)
Scaling up:
bổ sung thêm CPU, RAM, tăng băng thông hoặc các tài nguyên khác
Scaling out:
bổ sung thêm 1 hoặc nhiều máy chủ. Thách thức của phương pháp này chính là những RDBMS
Cost (Chi phí)
Đa số cái NoSQL phổ biến đều có open source
Flexibility (Linh hoạt)
Dữ liệu được lưu dưới dạng single document file
Availability (Tính sẵn sàng)
Các cụm NoSQL có tính khả dụng cao, có thể chạy được đồng thời trên nhiều máy chủ. Nếu có 1 máy chủ bị lỗi sẽ không ảnh hưởng đến các máy chủ khác
Lịch sử
Lần đầu tiên được đặt bởi Johan Oskarsson vào năm 2009
Document store
Summary
Các tài liệu (documents) có cấu trúc dữ liệu linh hoạt. Không yêu cầu có lược đồ xác định và có thể có đa lược đồ (Polymorphic Schema)
Các tài liệu (documents) sắp xếp thành các bộ liên quan được gọi là bộ sưu tập (collections)
Bộ sưu tập phải chứa các loại thực thể tương tự, mặc dù các khóa và giá trị có thể khác nhau giữa các tài liệu
Không có ngôn ngữ truy vấn chuẩn
Collection - table; document - row
Phân vùng, đặc biệt là sharding, được sử dụng trong cơ sở dữ liệu tài liệu để chia cơ sở dữ liệu lớn qua nhiều máy chủ nhằm cải thiện hiệu suất.
Bộ xử lý chuẩn hóa, không chuẩn hóa và truy vấn cũng đóng những vai trò quan trọng trong hiệu suất tổng thể của cơ sở dữ liệu tài liệu
Schemaless
Một đặc tả cấu trúc chính thức được gọi là một lược đồ. Cơ sở dữ liệu tài liệu không yêu cầu đặc điểm kỹ thuật này trước khi thêm tài liệu vào bộ sưu tập -> Cơ sở dữ liệu tài liệu được gọi là schemaless.
2 đặc điểm khác biệt với RDBMS:
Linh hoạt hơn: có thể thêm document vào collection. Không cần phải nói với cơ sở dữ liệu tài liệu về cấu trúc của tài liệu
Đảm nhận nhiều trách nhiệm hơn
Có nghĩa là không có định nghĩa chính thức về cấu trúc
Polymorphic Schema
Vì các document tồn tại trong collection có thể có nhiều dạng khác nhau
Lược đồ đa hình có nghĩa là có nhiều cấu trúc tài liệu trong nhóm tài liệu xuất hiện trong một bộ sưu tập
Tài liệu nhúng
Lưu trữ dữ liệu liên quan theo những cách linh hoạt (lưu trữ dữ liệu liên quan trong một tài liệu duy nhất) -> Điều này cho phép cơ sở dữ liệu tài liệu tránh một quá trình được gọi là kết bảng (thao tác join) -> cải thiện hiệu suất, không tốn nhiều thời gian
Cơ sở dữ liệu hướng tài liệu lưu trữ và truy xuất tài liệu dạng: XML, JSON, BSON,...
Các tài liệu có thể là:
Tự mô tả
Cấu trúc dữ liệu cây phân cấp
Tài liệu là một tập hợp các cặp khóa-giá trị có thứ tự
Các khóa được biểu diễn dưới dạng chuỗi ký tự
Giá trị có thể là kiểu dữ liệu cơ bản (chẳng hạn như số, chuỗi và Boolean) hoặc cấu trúc (chẳng hạn như mảng và đối tượng)
JSON và XML là hai định dạng thường được sử dụng để định nghĩa tài liệu
Thứ tự của các cặp khóa - giá trị quan trọng trong việc xác định danh tính của một tài liệu.
Common Features
Why NoSQL?
Biểu diễu dữ liệu ít khi dùng lược đồ
Thời gian phát triển:
Giảm thời gian phát triển vì không cần phải sử dụng các truy vấn SQL phức tạp
Tốc độ:
Có khả năng xử lý dữ liệu trong thời gian thực, trong khi SQL không có khả năng này
Có thể lập trước kế hoạch cho khả năng mở rộng:
Đáp ứng nhu cầu tải cao đột ngột của dữ liệu
NoSQL tránh được:
Chi phí cho tính ACID
Độ phức tạp của truy vấn SQL
Độ phức tạp của thiết kế lược đồ
Giao tác (Được xử lý ở tầng ứng dụng)
NoSQL cung cấp:
Thay đổi dễ dàng và thường xuyên đối với DB
Phát triển nhanh
Khối lượng dữ liệu lớn (Ví dụ Google)
Không có hoặc ít giản đồ
Phân tán
Nhiều cơ sở dữ liệu NoSQL có thể được thực thi theo kiểu phân tán
Cung cấp khả năng tự động mở rộng quy mô và khả năng vượt qua lỗi
Thường thì khái niệm ACID có thể được hy sinh cho khả năng mở rộng và thông lượng
Cung cấp khả năng nhân rộng, tính nhất quán cuối cùng, kiến trúc Shared Nothing
Tính năng chính của NoSQL
Ngôn ngữ truy vấn NoSQL:
Declarative (sometimes SQL)
Low-level (usually)
Mô hình dữ liệu chính:
Khóa-giá trị (key-value)
Document
Wide column
Graph
Khả năng mở rộng
Nhất quán cuối cùng
Mục đích của NoSQL
Lưu trữ dữ liệu linh hoạt (bán cấu trúc hoặc phi cấu trúc)
Dữ liệu không có cấu trúc hoặc bán cấu trúc không yêu cầu một lược đồ cố định
JSON (bán cấu trúc):
Giá trị liên quan trực tiếp đến khóa, chúng cùng nhau tạo thành 1 cặp khóa-giá trị
Để lấy được giá trị, phải cung cấp đúng tên khóa
Kiểu dữ liệu hỗ trợ: string, number, array, object, boolean, null
Được tổ chức thành các collection, trong 1 collection có thể chứa dữ liệu của có cấu trúc khác nhau
Giảm chi phí xây dựng các cụm máy chủ trên nền tảng đám mây thấp
Các cụm là các nhóm máy tính được kết nối bằng các kênh giao tiếp tốc độ cao
Đối với người dùng, chúng
là một đơn vị phần cứng duy nhất
Các dịch vụ Internet khác nhau phải cung cấp khả năng truy cập
dễ dàng vào dung lượng và tài nguyên
Trong các hệ thống phân tán, việc hỗ trợ các giao dịch và tính nhất quán dữ liệu mạnh mẽ cần một số lượng lớn các giao tiếp đồng bộ
Tuy nhiên, một số tác vụ có thể được thực hiện mà không cần hỗ trợ giao dịch
Mở rộng quy mô dễ dàng
Khả năng mở rộng được đánh giá là
tỷ lệ giữa khối lượng công việc của hệ thống với các tài nguyên được bổ sung
Các hệ thống có tỷ lệ gần bằng một được gọi là có thể mở rộng dễ dàng
Kỹ thuật vận hành hệ thống phân tán
Replication:
Sao chép dữ liệu đến server khác trong mỗi lần cập nhật
Master-Slave
Server Master: read/write
Server Slave: read
Peer-to-Peer
Mỗi server: read/write
Sharding:
Đưa các phần khác nhau của dữ liệu lên các máy chủ khác nhau. Mỗi node chỉ phụ trách 1 tập dữ liệu và thực hiện việc đọc/ghi trên tập dữ liệu tương ứng
MapReduce:
Là phương pháp tính toán song song trong một cụm
Key-value store
Mô hình cho cơ sở dữ liệu Khóa-Giá trị
Key
Là một tham chiếu đến một giá trị. Sẽ có các dạng khác nhau tùy theo thiết kế khóa-giá trị mà cơ sở dữ liệu sử dụng
Tên khóa dài sẽ chiếm nhiều bộ nhớ
Tên khóa ngắn thì dễ dẫn đến xung đột tên khóa (nên tránh)
Có vai trò quan trọng trong việc triển khai các kiến trúc có thể mở rộng
Tổ chức dữ liệu trên nhiều máy chủ
Value
Là một đối tượng, thường là tập hợp các byte, được liên kết với một khóa
Kiểu dữ liệu: số nguyên, chuỗi, đối tượng nhị phân, cấu trúc JSON, hình ảnh, âm thanh,..., bất kỳ kiểu dữ liệu nào có thể biếu diễn bằng chuỗi byte
Namespace
Là một tập hợp các cặp khóa - giá trị không trùng lắp
Partition
Mỗi máy chủ hoặc phiên bản phần mềm cơ sở dữ liệu khóa - giá trị chạy trên máy chủ được chỉ định quản lý các tập con của cơ sở dữ liệu
Partition key
Là một khóa được sử dụng để xác định phân vùng nào sẽ chứa một giá trị dữ liệu. Bất kỳ khóa nào trong cơ sở dữ liệu khóa-giá trị cũng có thể được sử dụng làm khóa phân vùng; các khóa phân vùng tốt là những khóa phân phối khối lượng công việc đồng đều
Schemaless
Là một thuật ngữ mô tả mô hình logic của cơ sở dữ liệu
Cho phép thực hiện các thay đổi khi cần thiết mà không cần thay đổi một lược đồ lập danh mục tất cả các khóa và kiểu giá trị
Summary
Rất đơn giản và linh hoạt
Dựa trên mảng tổng hợp, cấu trúc dữ liệu tổng quát hơn so với mảng
Các khóa có thể là số nguyên, chuỗi, danh sách (lits),...
Trong cùng 1 namespace, các khóa phải là duy nhất
Khóa dùng để tìm kiếm giá trị, giá trị có hạn chế về kích thước
Hỗ trợ mở rộng dựa trên mô hình master-slave; masterless
Thiếu ngôn ngữ truy vấn, không có các tính năng bổ sung như công cụ tìm kiếm
Kiến trúc Khóa-Giá trị
Cụm (Cluster)
Tập hợp các máy tính kết nối với nhau để điều phối hoạt động của chúng
Liên kết lỏng lẻo (xu hướng)
Bao gồm các máy chủ độc lập, tự hoàn thành chức năng, ít phối hợp với các máy khác trong cụm
Liên kết chặt chẽ
Phối hợp chặt chẽ với máy khác trong cụm
Vòng (Ring)
Là cấu trúc logic để tổ chức các phân vùng
Là một vòng tròn, trong đó mỗi máy chủ hoặc phiên bản của phần mềm cơ sở dữ liệu khóa - giá trị đang chạy trên máy chủ được liên kết với hai máy chủ hoặc phiên bản liền kề. Mỗi máy chủ hoặc phiên bản chịu trách nhiệm quản lý một loạt dữ liệu dựa trên khóa phân vùng
Nhân bản (Replication)
Là quá trình lưu nhiều bản sao dữ liệu trong cụm. Điều này cung cấp tính khả dụng cao
Thực thi Khóa-Giá trị
Hash Function
Là các thuật toán ánh xạ từ một đầu vào đến một chuỗi đầu ra. Kích thước của đầu vào có thể khác nhau, nhưng kích thước của đầu ra luôn giống nhau
Collision
Xảy ra khi 2 đầu vào riêng biệt của cùng một hàm băm tạo ra cùng một đầu ra
Được quản lý bằng cách sử dụng các chiến lược giải quyết xung đột, chẳng hạn như duy trì danh sách giá trị được liên kết
Compression
Thuật toán nén dành cho kho khóa-giá trị phải thực hiện các thao tác nén và giải nén càng nhanh càng tốt. Điều này thường đòi hỏi sự đánh đổi giữa tốc độ nén / giải nén và kích thước của dữ liệu nén