Glossary
Lưu ý rằng các định nghĩa trong bảng thuật ngữ này ngắn gọn và đơn giản, nhằm truyền đạt ý cốt lõi chứ không phải toàn bộ sắc thái của một thuật ngữ. Để biết thêm chi tiết, hãy theo dõi các tham chiếu vào phần nội dung chính.
asynchronous (bất đồng bộ)
Không chờ đợi một tác vụ nào đó hoàn thành (ví dụ: gửi dữ liệu qua mạng đến một node khác) và không đưa ra giả định nào về thời gian cần thiết. Xem “Synchronous Versus Asynchronous Replication”, “Synchronous Versus Asynchronous Networks”, và “System Model and Reality”.
atomic (nguyên tử)
Trong ngữ cảnh concurrency (xử lý đồng thời): mô tả một thao tác có vẻ như diễn ra tại một thời điểm duy nhất, do đó một tiến trình đồng thời khác không bao giờ có thể gặp thao tác đó ở trạng thái “hoàn thành một nửa”. Xem thêm isolation.
Trong ngữ cảnh transactions (giao dịch): nhóm một tập hợp các lần ghi lại với nhau, và tất cả phải cùng được commit hoặc cùng được rollback, ngay cả khi xảy ra lỗi. Xem “Atomicity” và “Two-Phase Commit (2PC)”.
backpressure (áp ngược)
Buộc bên gửi dữ liệu phải giảm tốc độ khi bên nhận không theo kịp. Còn được gọi là flow control (kiểm soát luồng). Xem “When an Overloaded System Won’t Recover”.
batch process (xử lý hàng loạt)
Một phép tính nhận vào một tập dữ liệu cố định (thường là lớn) làm đầu vào và tạo ra dữ liệu đầu ra khác, mà không sửa đổi đầu vào. Xem Chapter 11.
bounded (có giới hạn)
Có giới hạn trên hoặc kích thước đã biết. Được dùng, ví dụ, trong ngữ cảnh độ trễ mạng (xem “Timeouts and Unbounded Delays”) và tập dữ liệu (xem phần giới thiệu Chapter 12).
Byzantine fault (lỗi Byzantine)
Một node hoạt động không đúng theo cách tùy tiện, ví dụ như gửi các thông điệp mâu thuẫn hoặc độc hại đến các node khác. Xem “Byzantine Faults”.
cache (bộ nhớ đệm)
Một thành phần ghi nhớ dữ liệu được sử dụng gần đây nhằm tăng tốc các lần đọc sau này của cùng dữ liệu đó. Thông thường nó không đầy đủ: nếu một phần dữ liệu không có trong cache, nó phải được lấy từ một hệ thống lưu trữ dữ liệu chậm hơn bên dưới, nơi có bản sao đầy đủ.
CAP theorem (định lý CAP)
Một kết quả lý thuyết bị hiểu sai rộng rãi và không có nhiều giá trị thực tiễn. Xem “The CAP theorem”.
causality (quan hệ nhân quả)
Sự phụ thuộc giữa các sự kiện phát sinh khi một sự việc “xảy ra trước” một sự việc khác trong hệ thống. Ví dụ: một sự kiện sau là phản hồi cho sự kiện trước, hoặc được xây dựng dựa trên sự kiện trước, hoặc cần được hiểu trong bối cảnh của sự kiện trước. Xem “The “happens-before” relation and concurrency”.
consensus (đồng thuận)
Một bài toán cơ bản trong điện toán phân tán, liên quan đến việc khiến nhiều node đồng ý với nhau về một điều gì đó (ví dụ: node nào sẽ là leader trong một cụm cơ sở dữ liệu). Bài toán này khó hơn nhiều so với vẻ ngoài của nó. Xem “Consensus”.
data warehouse (kho dữ liệu)
Một cơ sở dữ liệu trong đó dữ liệu từ nhiều hệ thống OLTP khác nhau được kết hợp và chuẩn bị để phục vụ mục đích phân tích. Xem “Data Warehousing”.
declarative (khai báo)
Mô tả các thuộc tính mà thứ gì đó nên có, nhưng không chỉ định các bước chính xác để đạt được nó. Trong ngữ cảnh truy vấn cơ sở dữ liệu, một query optimizer (bộ tối ưu truy vấn) nhận truy vấn khai báo và tự quyết định cách thực thi tốt nhất. Xem “Terminology: Declarative Query Languages”.
denormalize (phi chuẩn hóa)
Đưa vào một mức độ dư thừa hoặc sao chép nhất định trong một tập dữ liệu đã normalized (chuẩn hóa), thường dưới dạng cache hoặc index, nhằm tăng tốc độ đọc. Giá trị được phi chuẩn hóa là một dạng kết quả truy vấn được tính sẵn, tương tự như một materialized view. Xem “Normalization, Denormalization, and Joins”.
derived data (dữ liệu dẫn xuất)
Một tập dữ liệu được tạo ra từ dữ liệu khác thông qua một quy trình có thể lặp lại, mà bạn có thể chạy lại nếu cần. Thông thường, dữ liệu dẫn xuất cần thiết để tăng tốc một loại truy cập đọc cụ thể. Index, cache và materialized view là các ví dụ về dữ liệu dẫn xuất. Xem “Systems of Record and Derived Data”.
deterministic (tất định)
Mô tả một hàm luôn tạo ra cùng một đầu ra nếu bạn cho nó cùng một đầu vào. Điều này có nghĩa là nó không thể phụ thuộc vào số ngẫu nhiên, thời gian trong ngày, giao tiếp mạng, hoặc các thứ không thể đoán trước khác. Xem “The Power of Determinism”.
distributed (phân tán)
Chạy trên nhiều node được kết nối qua mạng. Đặc trưng bởi partial failures (lỗi cục bộ): một phần của hệ thống có thể bị hỏng trong khi các phần khác vẫn hoạt động, và thường không thể biết chính xác điều gì đang bị hỏng. Xem “Faults and Partial Failures”.
durable (bền vững)
Lưu trữ dữ liệu theo cách mà bạn tin rằng dữ liệu đó sẽ không bị mất, ngay cả khi xảy ra các lỗi khác nhau. Xem “Durability”.
ETL
Extract-Transform-Load (Trích xuất-Biến đổi-Tải). Quá trình trích xuất dữ liệu từ cơ sở dữ liệu nguồn, biến đổi nó thành dạng phù hợp hơn cho các truy vấn phân tích, và tải vào một data warehouse hoặc hệ thống xử lý hàng loạt. Xem “Data Warehousing”.
failover (chuyển đổi dự phòng)
Trong các hệ thống có một leader duy nhất, failover là quá trình chuyển vai trò leadership từ một node sang node khác. Xem “Handling Node Outages”.
fault-tolerant (chịu lỗi)
Có khả năng tự phục hồi nếu có sự cố (ví dụ: khi một máy bị crash hoặc một kết nối mạng bị ngắt). Xem “Reliability and Fault Tolerance”.
flow control (kiểm soát luồng)
Xem backpressure.
follower
Một replica không trực tiếp chấp nhận bất kỳ lần ghi nào từ client, mà chỉ xử lý các thay đổi dữ liệu nhận được từ leader. Còn được gọi là secondary, read replica hoặc hot standby. Xem “Single-Leader Replication”.
full-text search (tìm kiếm toàn văn)
Tìm kiếm văn bản bằng các từ khóa tùy ý, thường đi kèm với các tính năng bổ sung như khớp các từ viết tương tự hoặc từ đồng nghĩa. Một full-text index là một loại secondary index hỗ trợ các truy vấn đó. Xem “Full-Text Search”.
graph (đồ thị)
Một cấu trúc dữ liệu gồm vertices (những thứ bạn có thể tham chiếu đến, còn được gọi là nodes hoặc entities) và edges (kết nối từ đỉnh này đến đỉnh khác, còn được gọi là relationships hoặc arcs). Xem “Graph-Like Data Models”.
hash (băm)
Một hàm biến đầu vào thành một số trông có vẻ ngẫu nhiên. Cùng một đầu vào luôn trả về cùng một số làm đầu ra. Hai đầu vào khác nhau rất có khả năng có hai số đầu ra khác nhau, mặc dù có thể xảy ra trường hợp hai đầu vào khác nhau cho ra cùng một đầu ra (được gọi là collision, hay va chạm). Xem “Sharding by Hash of Key”.
idempotent (lũy đẳng)
Mô tả một thao tác có thể được thực hiện lại một cách an toàn: nếu nó được thực thi nhiều hơn một lần, hiệu quả vẫn như thể chỉ thực thi một lần. Xem “Idempotence”.
index (chỉ mục)
Một cấu trúc dữ liệu cho phép bạn tìm kiếm hiệu quả tất cả các bản ghi có một giá trị cụ thể trong một trường cụ thể. Xem “Storage and Indexing for OLTP”.
isolation (cô lập)
Trong ngữ cảnh transactions, mô tả mức độ mà các giao dịch thực thi đồng thời có thể ảnh hưởng lẫn nhau. Serializable isolation cung cấp các đảm bảo mạnh nhất, nhưng các mức isolation yếu hơn cũng được sử dụng. Xem “Isolation”.
join (nối)
Kết hợp các bản ghi có điểm chung. Thường được dùng trong trường hợp một bản ghi có tham chiếu đến bản ghi khác (khóa ngoại, tham chiếu tài liệu, cạnh trong đồ thị) và một truy vấn cần lấy bản ghi mà tham chiếu đó trỏ đến. Xem “Normalization, Denormalization, and Joins” và “JOIN and GROUP BY”.
leader
Khi dữ liệu hoặc một dịch vụ được sao chép trên nhiều node, leader là replica được chỉ định có quyền thực hiện các thay đổi. Leader có thể được bầu chọn thông qua một giao thức nào đó, hoặc được chọn thủ công bởi người quản trị. Còn được gọi là primary hoặc source. Xem “Single-Leader Replication”.
linearizable (tuyến tính hóa được)
Hoạt động như thể chỉ có một bản sao dữ liệu duy nhất trong hệ thống, và bản sao đó được cập nhật bằng các thao tác atomic. Xem “Linearizability”.
locality (tính cục bộ)
Một tối ưu hóa hiệu năng: đặt một số phần dữ liệu vào cùng một chỗ nếu chúng thường xuyên cần dùng cùng lúc. Xem “Data locality for reads and writes”.
lock (khóa)
Một cơ chế đảm bảo rằng chỉ một thread, node, hoặc transaction có thể truy cập vào một thứ gì đó, và bất kỳ ai khác muốn truy cập cùng thứ đó phải chờ cho đến khi khóa được giải phóng. Xem “Two-Phase Locking (2PL)” và “Distributed Locks and Leases”.
log (nhật ký)
Một file chỉ cho phép ghi thêm vào cuối, dùng để lưu trữ dữ liệu. Write-ahead log được dùng để làm cho storage engine có khả năng phục hồi sau crash (xem “Making B-trees reliable”), log-structured storage engine sử dụng log làm định dạng lưu trữ chính (xem “Log-Structured Storage”), replication log được dùng để sao chép các lần ghi từ leader sang follower (xem “Single-Leader Replication”), và event log có thể đại diện cho một luồng dữ liệu (xem “Log-based Message Brokers”).
materialize (vật chất hóa)
Thực hiện một phép tính một cách háo hức và ghi kết quả ra, trái ngược với việc tính toán theo yêu cầu khi được hỏi. Xem “Event Sourcing and CQRS”.
node
Một phiên bản của phần mềm nào đó đang chạy trên một máy tính, giao tiếp với các node khác qua mạng để hoàn thành một nhiệm vụ nào đó.
normalized (chuẩn hóa)
Được cấu trúc theo cách không có dư thừa hay sao chép. Trong một cơ sở dữ liệu chuẩn hóa, khi một phần dữ liệu thay đổi, bạn chỉ cần thay đổi nó ở một nơi, không phải ở nhiều bản sao tại nhiều nơi khác nhau. Xem “Normalization, Denormalization, and Joins”.
OLAP
Online analytic processing (xử lý phân tích trực tuyến). Mẫu truy cập đặc trưng bởi việc tổng hợp (ví dụ: đếm, cộng, trung bình) trên một số lượng lớn bản ghi. Xem “Operational Versus Analytical Systems”.
OLTP
Online transaction processing (xử lý giao dịch trực tuyến). Mẫu truy cập đặc trưng bởi các truy vấn nhanh đọc hoặc ghi một số nhỏ bản ghi, thường được đánh chỉ mục theo khóa. Xem “Operational Versus Analytical Systems”.
sharding (phân mảnh)
Chia nhỏ một tập dữ liệu lớn hoặc một phép tính quá lớn cho một máy đơn lẻ thành các phần nhỏ hơn và phân tán chúng trên nhiều máy. Còn được gọi là partitioning (phân vùng). Xem Chapter 7.
percentile (phân vị)
Một cách đo phân phối các giá trị bằng cách đếm xem có bao nhiêu giá trị nằm trên hoặc dưới một ngưỡng nào đó. Ví dụ: thời gian phản hồi ở phân vị thứ 95 trong một khoảng thời gian là thời gian t sao cho 95% yêu cầu trong khoảng đó hoàn thành trong thời gian ít hơn t, và 5% mất nhiều hơn t. Xem “Describing Performance”.
primary key (khóa chính)
Một giá trị (thường là số hoặc chuỗi) xác định duy nhất một bản ghi. Trong nhiều ứng dụng, khóa chính được hệ thống tạo ra khi tạo bản ghi (ví dụ: tuần tự hoặc ngẫu nhiên) và thường không do người dùng đặt. Xem thêm secondary index.
quorum (đại biểu đủ số)
Số lượng node tối thiểu cần bỏ phiếu cho một thao tác trước khi nó có thể được coi là thành công. Xem “Quorums for reading and writing”.
rebalance (cân bằng lại)
Di chuyển dữ liệu hoặc dịch vụ từ node này sang node khác để phân phối tải một cách công bằng. Xem “Sharding of Key-Value Data”.
replication (sao chép)
Giữ một bản sao của cùng dữ liệu trên nhiều node (replicas) để dữ liệu vẫn có thể truy cập được nếu một node trở nên không thể liên lạc. Xem Chapter 6.
schema (lược đồ)
Mô tả cấu trúc của một số dữ liệu, bao gồm các trường và kiểu dữ liệu của nó. Việc một dữ liệu có tuân thủ schema hay không có thể được kiểm tra ở nhiều thời điểm khác nhau trong vòng đời của dữ liệu (xem “Schema flexibility in the document model”), và schema có thể thay đổi theo thời gian (xem Chapter 5).
secondary index (chỉ mục thứ cấp)
Một cấu trúc dữ liệu bổ sung được duy trì cùng với kho lưu trữ dữ liệu chính, cho phép bạn tìm kiếm hiệu quả các bản ghi phù hợp với một điều kiện nhất định. Xem “Multi-Column and Secondary Indexes” và “Sharding and Secondary Indexes”.
serializable (có thể tuần tự hóa)
Một đảm bảo isolation rằng nếu nhiều giao dịch thực thi đồng thời, chúng sẽ hoạt động giống như khi chúng được thực thi lần lượt từng cái một, theo một thứ tự tuần tự nào đó. Xem “Serializability”.
shared-nothing
Một kiến trúc trong đó các node độc lập, mỗi node có CPU, bộ nhớ và ổ đĩa riêng, được kết nối qua mạng thông thường, trái ngược với kiến trúc shared-memory hoặc shared-disk. Xem “Shared-Memory, Shared-Disk, and Shared-Nothing Architecture”.
skew (lệch)
Tải không cân bằng trên các shard, khiến một số shard có nhiều yêu cầu hoặc dữ liệu hơn, và các shard khác có ít hơn nhiều. Còn được gọi là hot spots (điểm nóng). Xem “Skewed Workloads and Relieving Hot Spots”.
Một bất thường về thời gian khiến các sự kiện xuất hiện theo một thứ tự không mong đợi, không tuần tự. Xem các thảo luận về read skew trong “Snapshot Isolation and Repeatable Read”, write skew trong “Write Skew and Phantoms”, và clock skew trong “Timestamps for ordering events”.
split brain (não phân chia)
Một tình huống trong đó hai node đồng thời tự cho mình là leader, có thể dẫn đến việc vi phạm các đảm bảo của hệ thống. Xem “Handling Node Outages” và “The Majority Rules”.
stored procedure (thủ tục lưu trữ)
Một cách mã hóa logic của một giao dịch sao cho nó có thể được thực thi hoàn toàn trên máy chủ cơ sở dữ liệu, mà không cần giao tiếp qua lại với client trong suốt giao dịch. Xem “Actual Serial Execution”.
stream process (xử lý luồng)
Một phép tính chạy liên tục, tiêu thụ một luồng sự kiện không bao giờ kết thúc làm đầu vào và tạo ra một số đầu ra từ đó. Xem Chapter 12.
synchronous (đồng bộ)
Trái ngược với asynchronous.
system of record (hệ thống lưu trữ gốc)
Một hệ thống lưu giữ phiên bản chính thức, có thẩm quyền của một số dữ liệu, còn được gọi là source of truth (nguồn sự thật). Các thay đổi được ghi ở đây trước, và các tập dữ liệu khác có thể được dẫn xuất từ hệ thống lưu trữ gốc. Xem “Systems of Record and Derived Data”.
timeout (hết thời gian)
Một trong những cách đơn giản nhất để phát hiện lỗi, cụ thể là quan sát sự vắng mặt của phản hồi trong một khoảng thời gian nhất định. Tuy nhiên, không thể biết liệu timeout là do sự cố ở node từ xa hay do vấn đề trong mạng. Xem “Timeouts and Unbounded Delays”.
total order (thứ tự toàn phần)
Một cách so sánh các thứ (ví dụ: timestamp) cho phép bạn luôn nói được cái nào trong hai thứ là lớn hơn và cái nào là nhỏ hơn. Một thứ tự trong đó một số thứ không thể so sánh được (bạn không thể nói cái nào lớn hơn hay nhỏ hơn) được gọi là partial order (thứ tự riêng phần).
transaction (giao dịch)
Nhóm nhiều lần đọc và ghi lại thành một đơn vị logic, nhằm đơn giản hóa việc xử lý lỗi và các vấn đề đồng thời. Xem Chapter 8.
two-phase commit (2PC) (cam kết hai giai đoạn)
Một thuật toán để đảm bảo rằng nhiều node cơ sở dữ liệu hoặc cùng atomic commit hoặc cùng hủy bỏ một giao dịch. Xem “Two-Phase Commit (2PC)”.
two-phase locking (2PL) (khóa hai giai đoạn)
Một thuật toán để đạt được serializable isolation, hoạt động bằng cách một giao dịch thu thập khóa trên tất cả dữ liệu mà nó đọc hoặc ghi, và giữ khóa cho đến khi kết thúc giao dịch. Xem “Two-Phase Locking (2PL)”.
unbounded (không có giới hạn)
Không có giới hạn trên hoặc kích thước đã biết. Trái ngược với bounded.