Phân vùng dữ liệu là gì? Hướng dẫn đầy đủ cho người mới bắt đầu
Hướng dẫn này giải thích phân vùng dữ liệu bằng ngôn ngữ đơn giản, bao gồm các loại, trường hợp sử dụng, công cụ và chiến lược triển khai để giúp tối ưu hiệu năng cơ sở dữ liệu.
Dù bạn đang xây dựng ứng dụng lấy khách hàng làm trung tâm hay vận hành các pipeline phân tích phức tạp, một điều trở nên rõ ràng: cách bạn lưu trữ và truy cập dữ liệu có thể quyết định hiệu năng.
Tôi đã chứng kiến tận mắt hệ thống hoạt động mượt mà hơn nhiều khi dữ liệu được cấu trúc hợp lý, và đó là lúc phân vùng dữ liệu phát huy tác dụng. Đây là một trong những kỹ thuật có thể cải thiện đáng kể tốc độ truy vấn, hiệu quả lưu trữ và khả năng mở rộng.
Trong bài viết này, tôi sẽ giải thích phân vùng dữ liệu, các loại phổ biến, và những thực tiễn tốt nhất tôi đã đúc kết.
Phân vùng dữ liệu là gì?
Phân vùng dữ liệu là kỹ thuật chia các tập dữ liệu lớn thành những phần nhỏ, dễ quản lý gọi là phân vùng. Mỗi phân vùng chứa một tập con dữ liệu và được phân phối trên nhiều nút hoặc máy chủ. Các phân vùng này có thể được lưu trữ, truy vấn và quản lý như các bảng riêng lẻ, dù về mặt logic chúng thuộc cùng một tập dữ liệu.
Phân vùng dữ liệu cải thiện hiệu năng và khả năng mở rộng của cơ sở dữ liệu. Ví dụ, tìm kiếm một điểm dữ liệu trong toàn bộ bảng sẽ mất nhiều thời gian và tài nguyên hơn so với tìm kiếm trong một phân vùng cụ thể. Đó là lý do dữ liệu được lưu dưới dạng các phân vùng.
Các loại phân vùng dữ liệu
Phân vùng dữ liệu bao gồm nhiều loại, mỗi loại có chiến lược và lợi ích riêng. Phần này tôi bàn về những loại phổ biến nhất.
Phân vùng ngang
Thay vì lưu tất cả dữ liệu trong một bảng duy nhất, phân vùng ngang chia dữ liệu theo hàng, nghĩa là các nhóm hàng khác nhau được lưu thành các phân vùng.
Tất cả phân vùng của phân vùng ngang chứa cùng tập cột nhưng các nhóm hàng khác nhau.
Ví dụ: Giả sử bạn có tập dữ liệu thời tiết cho nhiều bang thuộc ba quốc gia khác nhau. Bạn có thể phân vùng thành ba bảng bằng cách chia các hàng theo từng quốc gia.
Nhiệt độ
Bang
Quốc gia
Mùa
-30° F
Alaska
USA
Đông
48.2° F
Queensland
Australia
Hè
100° F
Andhra Pradesh
India
Hè
35° F
California
USA
Đông
96° F
Texas
USA
Hè
62° F
Tasmania
Australia
Đông
Phân vùng ngang theo quốc gia:
Nhiệt độ
Bang
Quốc gia
Mùa
-30° F
Alaska
USA
Đông
35° F
California
USA
Đông
35° F
California
USA
Đông
Nhiệt độ
Bang
Quốc gia
Mùa
48.2° F
Queensland
Australia
Hè
62° F
Tasmania
Australia
Đông
Nhiệt độ
Bang
Quốc gia
Mùa
100° F
Andhra Pradesh
India
Hè
Phân vùng dọc
Phân vùng dọc chia dữ liệu theo cột, vì vậy mỗi phân vùng chứa cùng số hàng nhưng ít cột hơn.
Khóa phân vùng hoặc cột chính sẽ xuất hiện trong mọi phân vùng, duy trì mối quan hệ logic.
Phân vùng dọc phổ biến khi cần lưu trữ riêng thông tin nhạy cảm khỏi dữ liệu thông thường. Nó cho phép lưu các cột nhạy cảm trong một phân vùng và dữ liệu chuẩn ở phân vùng khác.
Một trường hợp sử dụng phổ biến khác là nhóm các cột thường xuyên được cập nhật vào một phân vùng và phần còn lại vào phân vùng riêng.
Ví dụ: Nếu cột số điện thoại và lương của nhân viên trong bảng dưới là bảo mật, hãy phân vùng bảng cho phù hợp.
Phân vùng theo khoảng chia dữ liệu dựa trên một khoảng giá trị của một cột cụ thể.
Thông thường, mỗi phân vùng có cận dưới và cận trên cho cột khóa, và bản ghi nằm trong khoảng này sẽ được gán vào phân vùng đó.
Ví dụ: Giả sử dữ liệu bán hàng có từ 2021 đến 2023. Ta có thể phân vùng theo năm để doanh số từ 2021 đến 2022 nằm trong một phân vùng và từ 2022 đến 2023 ở phân vùng khác.
Product_id
Ngày
Lợi nhuận
z0yu9h
2021-03-17
$100K
f8o5pj
2022-04-04
$234K
z006yu
2022-09-13
$789K
a6u895
2021-07-23
$237K
g68w90
2022-02-26
$2345K
Phân vùng 1:
product_id
Ngày
Lợi nhuận
z0yu9h
2021-03-17
$100K
a6u895
2021-07-23
$237K
Phân vùng 2:
product_id
Ngày
Lợi nhuận
f8o5pj
2022-04-04
$234K
z006yu
2022-09-13
$789K
Phân vùng băm (hash)
Một hàm băm được áp dụng lên khóa phân vùng, và đầu ra quyết định bản ghi nào sẽ được lưu ở phân vùng nào. Với kỹ thuật này, số lượng phân vùng được xác định trước.
Phần dư thu được khi chia giá trị băm cho số phân vùng sẽ xác định bản ghi cụ thể đó nên lưu ở phân vùng nào. Hãy xem ví dụ:
Ví dụ: Với sản phẩm có ID z0yu9h, hash(‘z0yu9h’) = 101 và số phân vùng = 4, thì 101%4 = 1. Vậy bản ghi này được lưu ở phân vùng thứ nhất.
Theo cách này, giá trị băm được tính cho cột khóa phân vùng rồi chia cho số phân vùng, và kết quả quyết định phân vùng cuối cùng.
Phân vùng theo danh sách
Quy trình tương tự phân vùng theo khoảng, nhưng thay vì chia dữ liệu theo một khoảng giá trị, phân vùng theo danh sách chia dữ liệu dựa trên một tập giá trị định sẵn.
Lấy lại bảng nhiệt độ làm ví dụ.
Nhiệt độ
Bang
Quốc gia
Mùa
30° F
Alaska
USA
Đông
48.2° F
Queensland
Australia
Hè
100° F
Andhra Pradesh
India
Hè
35° F
California
USA
Đông
96° F
Texas
USA
Hè
62° F
Tasmania
Australia
Đông
Trong dữ liệu trên, cột ‘Mùa’ chứa một danh sách giá trị [‘winter’, ‘summer’]. Vì vậy, phân vùng theo danh sách dựa trên mùa sẽ như sau:
Phân vùng 1:
Nhiệt độ
Bang
Quốc gia
Mùa
30° F
Alaska
USA
Đông
35° F
California
USA
Đông
62° F
Tasmania
Australia
Đông
Phân vùng 2:
Nhiệt độ
Bang
Quốc gia
Mùa
48.2° F
Queensland
Australia
Hè
100° F
Andhra Pradesh
India
Hè
96° F
Texas
USA
Hè
Phân vùng kết hợp
Phân vùng kết hợp là sự kết hợp của hai kỹ thuật phân vùng. Một bảng được chia trước bằng một chiến lược, và mỗi phân vùng tiếp tục được chia nhỏ bằng kỹ thuật khác.
Giờ đây khi đã đánh giá các loại chiến lược phân vùng khác nhau, hãy xem khi nào phân vùng dữ liệu hữu ích.
Cơ sở dữ liệu phân tán
Hệ thống phân tán là tập hợp các nút đặt trên những máy chủ tách biệt về mặt vật lý nhưng được liên kết qua mạng. Ví dụ gồm Apache Cassandra, Amazon DynamoDB và Google Bigtable.
Những hệ thống này sử dụng phân vùng dữ liệu nội bộ để tổ chức và phân phối dữ liệu trên các nút.
Tác vụ OLAP
OLAP biểu diễn dữ liệu đa chiều dưới dạng khối (cube), cho phép người dùng khám phá dữ liệu từ nhiều góc độ. Dù các khối này đại diện cho dữ liệu đã được tổng hợp sẵn, dữ liệu nền vẫn rất lớn, nên các truy vấn cần được tối ưu thêm bằng phân vùng dữ liệu.
Ví dụ, áp dụng phân vùng khối (một kỹ thuật phân vùng dữ liệu) chia dữ liệu thành các khối nhỏ hơn dựa trên tiêu chí cụ thể. Khi bạn truy vấn dữ liệu, việc tìm kiếm sẽ diễn ra trên một khối cụ thể bằng cách bỏ qua các khối không liên quan, giảm thao tác I/O.
Tương tự, có thể áp dụng phân vùng theo chiều (dimension) để chia dữ liệu theo cấp, hệ phân cấp hoặc cột.
Quản lý log
Log chứa thông tin về các sự kiện, giao dịch và hoạt động xảy ra trong hệ thống. Chúng được dùng để truy vết lỗi, bug, trường hợp biên và cả thông điệp thành công.
Phân vùng log tăng tốc quá trình gỡ lỗi và giúp bạn có thông tin cần thiết nhanh hơn. Ví dụ, nếu bạn phân vùng log theo thời gian, bạn có thể dễ dàng truy xuất theo ngày, tuần, tháng hoặc năm.
Pipeline học máy
Trong các trường hợp sử dụng học máy, dữ liệu được chia thành tập huấn luyện, validation và kiểm thử. Cách này đảm bảo thông tin từ tập kiểm thử không bị lộ cho mô hình trong quá trình huấn luyện để tránh overfitting.
Hơn nữa, nếu dữ liệu huấn luyện quá lớn, một máy đơn không thể xử lý và nạp toàn bộ dữ liệu vào mô hình. Vì vậy, dữ liệu được chia thành các mảnh và đưa vào mô hình thông qua phân vùng dữ liệu.
Công cụ cho phân vùng dữ liệu
Phân vùng dữ liệu có thể được triển khai trong cả cơ sở dữ liệu SQL và NoSQL. Hãy cùng thảo luận trong phần này.
Cơ sở dữ liệu SQL
PostgreSQL
PostgreSQL cung cấp hỗ trợ sẵn cho phân vùng theo khoảng, theo danh sách và theo băm. Ví dụ, truy vấn sau tạo một phân vùng cho mỗi năm để truy cập hiệu quả lợi nhuận bán hàng và tổng doanh số theo từng năm tài chính.
CREATETABLE sales(
city_id intnotnull,
sales_year datenotnull,
total_sales int,
sales_profits int)PARTITIONBY RANGE (sales_year);Được hỗ trợ bởi
MySQL
MySQL hỗ trợ các loại phân vùng ngang khác nhau như theo khoảng, theo danh sách, theo băm và theo khóa. Tính đến hiện tại (phiên bản 8.4), MySQL chưa hỗ trợ phân vùng dọc.
Truy vấn MySQL dưới đây phân vùng dữ liệu nhân viên thành ba nhóm, p1, p2, và p3, theo ngày gia nhập. Tất cả nhân viên gia nhập trước năm 2000 thuộc phân vùng p1. Nhân viên gia nhập từ 2000 đến 2010 thuộc phân vùng p2, và từ 2010 đến 2020 thuộc phân vùng p3.
CREATETABLE employee(
firstname VARCHAR(25)NOTNULL,
username VARCHAR(16)NOTNULL,
email VARCHAR(35),
salary INT,
joined DATENOTNULL)PARTITIONBY RANGE(YEAR(joined))(PARTITION p1 VALUES LESS THAN (2000),PARTITION p2 VALUES LESS THAN (2010),PARTITION p3 VALUES LESS THAN (2020));Được hỗ trợ bởi
Microsoft SQL Server
SQL Server cung cấp tính năng phân vùng thông qua hàm phân vùng và lược đồ phân vùng. Hàm phân vùng xác định cách dữ liệu được chia, trong khi lược đồ phân vùng quyết định filegroup nơi phân vùng sẽ được lưu.
Trong các truy vấn sau:
Tên hàm: sales_by_year
Tên lược đồ: sales_filegroup
Tên filegroup: fg01, fg02, fg03, fg04
Hàm phân vùng:
createpartitionfunction sales_by_year (date)as range rightforvalues('2024-01-01','2024-02-01','2024-03-01', ‘2024-04-01’);Được hỗ trợ bởi
Vì chúng ta đã chỉ định range right trong truy vấn, mỗi ngày ranh giới sẽ được tính vào phân vùng kế tiếp.
Nếu bạn đang sử dụng SQL Server, hướng dẫn SQL Server này sẽ giới thiệu các khái niệm và công cụ chính để quản lý dữ liệu đã phân vùng. Với lộ trình học có cấu trúc, SQL Server Fundamentals giới thiệu các tính năng cốt lõi cần thiết để xây dựng cơ sở dữ liệu SQL hiệu năng.
Cơ sở dữ liệu NoSQL
Amazon DynamoDB
DynamoDB tự động xử lý phân vùng nội bộ. Khi bạn ghi một mục vào bảng DynamoDB, nó đi qua một bộ định tuyến yêu cầu. Bộ định tuyến phân tích khóa phân vùng và áp dụng hàm băm. Đầu ra của hàm băm xác định phân vùng cụ thể nơi bản ghi sẽ được lưu.
Toàn bộ quá trình này được tự động trong DynamoDB, nên người dùng không cần lo về hàm băm hay cách quản lý các phân vùng.
Mongodb
MongoDB phân phối dữ liệu qua các máy chủ bằng khái niệm sharding. Dữ liệu được phân vùng dựa trên shard key, khóa này cần được chọn cẩn thận để tránh phân phối không đều.
Thông thường, shard key nên có độ phân biệt cao và là cột thường được sử dụng trong truy vấn. Những câu hỏi phỏng vấn MongoDB này bao quát hầu như mọi chủ đề quan trọng, bao gồm cả sharding.
Apache Cassandra
Cassandra partitioner là một thuật toán băm xác định nút nào trong cụm sẽ lưu một phân vùng cụ thể. Khóa phân vùng được đưa qua thuật toán để tạo ra một token. Token này sau đó được so sánh với các giá trị token gán cho các nút. Cuối cùng, dữ liệu được lưu ở nút khớp với token.
Các thuật toán phân vùng phổ biến gồm Murmur3Partitioner, RandomPartitioner, và ByteOrderedPartitioner.
Cách triển khai phân vùng dữ liệu?
Giờ hãy thảo luận các bước cần thiết để triển khai phân vùng dữ liệu đúng cách.
Bước 1: Hiểu dữ liệu và mô hình truy cập
Đánh giá kỹ cách ứng dụng của bạn truy vấn cơ sở dữ liệu, dữ liệu nào thường xuyên được truy cập, kích thước dữ liệu và các nút thắt hiệu năng. Những hiểu biết này giúp bạn đặt mục tiêu rõ ràng cho phân vùng và xác định các cột khóa thường tham gia vào thao tác dữ liệu.
Bước 2: Chọn kỹ thuật phân vùng
Chúng ta đã đề cập các kỹ thuật phổ biến, và đây là cách quyết định giữa chúng:
Phân vùng ngang: Khi bạn có hàng triệu đến hàng tỷ hàng sẽ lưu trong một bảng duy nhất và gây vấn đề bộ nhớ, bạn nên chọn phân vùng ngang. Nó lưu các tập hàng khác nhau vào các bảng khác nhau.
Phân vùng dọc: Nếu một nhóm cột thường xuyên được truy cập còn các cột khác chỉ thỉnh thoảng, bạn có thể triển khai phân vùng dọc để lưu các cột riêng theo mô hình truy cập.
Cách tiếp cận lai: Khi bạn có tập dữ liệu lớn cần giảm số hàng đồng thời tối ưu truy vấn cho một tập con các cột, bạn nên chọn cách tiếp cận lai. Nó kết hợp ưu điểm của cả phân vùng ngang và dọc.
Bước 3: Tạo các phân vùng
Sau đây là ví dụ truy vấn SQL để tạo phân vùng bằng phân vùng băm.
CREATETABLE employees (
emp_id INTNOTNULL,
name VARCHAR(30),
hired DATENOTNULLDEFAULT'2024-01-01',
job_id INT,
location_id INT)PARTITIONBYHASH(location_id)
PARTITIONS 4;Được hỗ trợ bởi
Trong đoạn mã trên, cột ‘location_id’ được đưa vào hàm băm, và đầu ra quyết định bản ghi sẽ được gán vào phân vùng nào. Dòng mã partitions 4 chỉ định tổng số phân vùng cần tạo.
Đánh dấu trang tài liệu SQL Basics Cheat Sheet này để tham khảo cú pháp SQL cốt lõi khi bạn triển khai phân vùng.
Bước 4: Giám sát và tối ưu phân vùng
Liên tục giám sát các thao tác dữ liệu và đảm bảo các phân vùng được cập nhật và hợp lệ.
Khi ứng dụng mở rộng, bạn có thể cần thêm phân vùng hoặc chọn cách tiếp cận khác, như phân vùng lai, để đáp ứng nhu cầu thay đổi.
Đảm bảo kích thước và chiến lược phân vùng mang lại lợi ích cho các thao tác thường xuyên trên cơ sở dữ liệu.
Đảm bảo dữ liệu được phân phối đồng đều giữa các phân vùng; nếu không, bạn có thể cần cân bằng lại.
Thách thức và cân nhắc khi phân vùng dữ liệu
Tối ưu hóa luôn đi kèm đánh đổi và thách thức, như mọi thứ trong thế giới phần mềm. Dưới đây là những điều bạn nên cân nhắc:
Độ lệch phân vùng (partition skew): Độ lệch phân vùng nghĩa là một vài phân vùng nhận nhiều dữ liệu và khối lượng xử lý hơn trong khi những phân vùng khác thường nhàn rỗi. Để tránh điều này, hãy chọn khóa và chiến lược phân vùng phù hợp để phân phối dữ liệu đồng đều trên tất cả phân vùng.
Chi phí bảo trì:Khi dữ liệu tăng, bạn cần đánh giá lại các chiến lược phân vùng hiện tại và đảm bảo chúng còn phù hợp với dữ liệu hiện thời. Nếu không, bạn có thể cần phân vùng lại hoặc gộp phân vùng.
Di chuyển dữ liệu: Trong trường hợp di chuyển dữ liệu sang kiến trúc mới, cần đặc biệt chú ý để đảm bảo các phân vùng tương thích với môi trường mới. Ngoài ra, việc di chuyển dữ liệu giữa các phân vùng liên quan đến những phức tạp như quản lý tính nhất quán dữ liệu giữa các shard.
Độ khó học cao: Phân vùng dữ liệu làm tăng độ phức tạp cho hệ thống hoặc kiến trúc đám mây. Chúng không đơn giản để truy vấn, di chuyển hoặc phân tích, dẫn đến đường cong học tập dốc cho người mới.
Thực tiễn tốt nhất cho phân vùng dữ liệu
Như bạn thấy, phân vùng dữ liệu trở nên phức tạp khi khối lượng dữ liệu tăng. Tuy nhiên, áp dụng các thực tiễn sau sẽ đảm bảo phân vùng nâng cao hiệu quả mà không ảnh hưởng hiệu năng.
Căn chỉnh phân vùng với mô hình truy vấn:Chọn chiến lược phân vùng và khóa phân vùng phù hợp có thể cải thiện đáng kể hiệu năng cơ sở dữ liệu. Hiểu các thao tác dữ liệu và mô hình truy vấn phổ biến nhất trong cơ sở dữ liệu của bạn, và chọn khóa phân vùng thường xuyên xuất hiện trong truy vấn đồng thời đảm bảo phân phối dữ liệu đồng đều.
Giám sát thường xuyên: Ngày nay, ứng dụng mang tính động và liên tục biến đổi theo xu hướng và nhu cầu. Do đó, việc thường xuyên giám sát các phân vùng để phù hợp với mô hình truy cập hiện tại và phân vùng lại khi cần là rất quan trọng.
Giảm thiểu chi phí phụ trợ: Quản lý thủ công phân vùng ở quy mô lớn là phức tạp. Tuy nhiên, các cơ sở dữ liệu NoSQL như Apache Cassandra và Amazon DynamoDB tự động hóa quy trình mà không đòi hỏi quá nhiều công sức bổ sung. Hơn nữa, một số công cụ tự động sẽ điều chỉnh các phân vùng khi dữ liệu mở rộng, cho phép phân vùng lại hoặc gộp phân vùng theo nhu cầu của bạn.
Kết luận
Phân vùng dữ liệu hiệu quả là yếu tố then chốt để duy trì hiệu năng và khả năng mở rộng khi dữ liệu của bạn tăng trưởng. Với chiến lược phù hợp, bạn có thể giảm độ trễ truy vấn, tối ưu lưu trữ và đơn giản hóa bảo trì. Đây là một bước thực tế với tác động có thể đo lường.
Để tìm hiểu sâu hơn cách phân vùng giúp hệ thống phân tán mở rộng, hãy xem hướng dẫn về phân vùng Kafka. Để hiểu cách cấu trúc quan hệ ảnh hưởng đến quyết định phân vùng, hãy bắt đầu với khóa học cơ sở dữ liệu quan hệ.
Srujana là một cây bút công nghệ tự do với bằng Cử nhân Khoa học Máy tính. Việc viết về nhiều chủ đề như khoa học dữ liệu, điện toán đám mây, phát triển, lập trình, bảo mật và nhiều lĩnh vực khác đến với cô một cách tự nhiên. Cô yêu thích văn học kinh điển và khám phá những điểm đến mới.
Dù bạn đang xây dựng ứng dụng lấy khách hàng làm trung tâm hay vận hành các pipeline phân tích phức tạp, một điều trở nên rõ ràng: cách bạn lưu trữ và truy cập dữ liệu có thể quyết định hiệu năng.
Tôi đã chứng kiến tận mắt hệ thống hoạt động mượt mà hơn nhiều khi dữ liệu được cấu trúc hợp lý, và đó là lúc phân vùng dữ liệu phát huy tác dụng. Đây là một trong những kỹ thuật có thể cải thiện đáng kể tốc độ truy vấn, hiệu quả lưu trữ và khả năng mở rộng.
Trong bài viết này, tôi sẽ giải thích phân vùng dữ liệu, các loại phổ biến, và những thực tiễn tốt nhất tôi đã đúc kết.
Phân vùng dữ liệu là gì?
Phân vùng dữ liệu là kỹ thuật chia các tập dữ liệu lớn thành những phần nhỏ, dễ quản lý gọi là phân vùng. Mỗi phân vùng chứa một tập con dữ liệu và được phân phối trên nhiều nút hoặc máy chủ. Các phân vùng này có thể được lưu trữ, truy vấn và quản lý như các bảng riêng lẻ, dù về mặt logic chúng thuộc cùng một tập dữ liệu.
Phân vùng dữ liệu cải thiện hiệu năng và khả năng mở rộng của cơ sở dữ liệu. Ví dụ, tìm kiếm một điểm dữ liệu trong toàn bộ bảng sẽ mất nhiều thời gian và tài nguyên hơn so với tìm kiếm trong một phân vùng cụ thể. Đó là lý do dữ liệu được lưu dưới dạng các phân vùng.
Các loại phân vùng dữ liệu
Phân vùng dữ liệu bao gồm nhiều loại, mỗi loại có chiến lược và lợi ích riêng. Phần này tôi bàn về những loại phổ biến nhất.
Phân vùng ngang
Thay vì lưu tất cả dữ liệu trong một bảng duy nhất, phân vùng ngang chia dữ liệu theo hàng, nghĩa là các nhóm hàng khác nhau được lưu thành các phân vùng.
Tất cả phân vùng của phân vùng ngang chứa cùng tập cột nhưng các nhóm hàng khác nhau.
Nhiệt độ
Bang
Quốc gia
Mùa
-30° F
Alaska
USA
Đông
48.2° F
Queensland
Australia
Hè
100° F
Andhra Pradesh
India
Hè
35° F
California
USA
Đông
96° F
Texas
USA
Hè
62° F
Tasmania
Australia
Đông
Phân vùng ngang theo quốc gia:
Nhiệt độ
Bang
Quốc gia
Mùa
-30° F
Alaska
USA
Đông
35° F
California
USA
Đông
35° F
California
USA
Đông
Nhiệt độ
Bang
Quốc gia
Mùa
48.2° F
Queensland
Australia
Hè
62° F
Tasmania
Australia
Đông
Nhiệt độ
Bang
Quốc gia
Mùa
100° F
Andhra Pradesh
India
Hè
Phân vùng dọc
Phân vùng dọc chia dữ liệu theo cột, vì vậy mỗi phân vùng chứa cùng số hàng nhưng ít cột hơn.
Khóa phân vùng hoặc cột chính sẽ xuất hiện trong mọi phân vùng, duy trì mối quan hệ logic.
Phân vùng dọc phổ biến khi cần lưu trữ riêng thông tin nhạy cảm khỏi dữ liệu thông thường. Nó cho phép lưu các cột nhạy cảm trong một phân vùng và dữ liệu chuẩn ở phân vùng khác.
Một trường hợp sử dụng phổ biến khác là nhóm các cột thường xuyên được cập nhật vào một phân vùng và phần còn lại vào phân vùng riêng.
Emp_id
Emp_name
Chức danh
Emp_email
Emp_phone
Emp_salary
z0yu9h
Alex
Nhà khoa học dữ liệu
[email protected]
+101 890 456
250K
f8o5pj
Adam
Kỹ sư dữ liệu
[email protected]
+630 789 365
230K
z006yu
Matt
Nhà phân tích dữ liệu
[email protected]
+857 342 937
166K
a6u895
Elina
Kỹ sư vận hành
[email protected]
+892 494 782
190K
g68w90
Joseph
Kỹ sư phần mềm
[email protected]
+852 603 389
210K
Emp_idlà định danh duy nhất trong bảng trên, nên tất cả phân vùng đều có cột này.Phân vùng 1:
Emp_id
Emp_name
Chức danh
Emp_email
z0yu9h
Alex
Nhà khoa học dữ liệu
[email protected]
f8o5pj
Adam
Kỹ sư dữ liệu
[email protected]
z006yu
Matt
Nhà phân tích dữ liệu
[email protected]
a6u895
Elina
Kỹ sư vận hành
[email protected]
g68w90
Joseph
Kỹ sư phần mềm
[email protected]
Phân vùng 2:
Emp_id
Emp_phone
Emp_salary
z0yu9h
+101 890 456
250K
f8o5pj
+630 789 365
230K
z006yu
+857 342 937
166K
a6u895
+892 494 782
190K
g68w90
+852 603 389
210K
Phân vùng theo khoảng
Phân vùng theo khoảng chia dữ liệu dựa trên một khoảng giá trị của một cột cụ thể.
Thông thường, mỗi phân vùng có cận dưới và cận trên cho cột khóa, và bản ghi nằm trong khoảng này sẽ được gán vào phân vùng đó.
Product_id
Ngày
Lợi nhuận
z0yu9h
2021-03-17
$100K
f8o5pj
2022-04-04
$234K
z006yu
2022-09-13
$789K
a6u895
2021-07-23
$237K
g68w90
2022-02-26
$2345K
Phân vùng 1:
product_id
Ngày
Lợi nhuận
z0yu9h
2021-03-17
$100K
a6u895
2021-07-23
$237K
Phân vùng 2:
product_id
Ngày
Lợi nhuận
f8o5pj
2022-04-04
$234K
z006yu
2022-09-13
$789K
Phân vùng băm (hash)
Một hàm băm được áp dụng lên khóa phân vùng, và đầu ra quyết định bản ghi nào sẽ được lưu ở phân vùng nào. Với kỹ thuật này, số lượng phân vùng được xác định trước.
Phần dư thu được khi chia giá trị băm cho số phân vùng sẽ xác định bản ghi cụ thể đó nên lưu ở phân vùng nào. Hãy xem ví dụ:
z0yu9h,hash(‘z0yu9h’) = 101và số phân vùng = 4, thì 101%4 = 1. Vậy bản ghi này được lưu ở phân vùng thứ nhất.Theo cách này, giá trị băm được tính cho cột khóa phân vùng rồi chia cho số phân vùng, và kết quả quyết định phân vùng cuối cùng.
Phân vùng theo danh sách
Quy trình tương tự phân vùng theo khoảng, nhưng thay vì chia dữ liệu theo một khoảng giá trị, phân vùng theo danh sách chia dữ liệu dựa trên một tập giá trị định sẵn.
Lấy lại bảng nhiệt độ làm ví dụ.
Nhiệt độ
Bang
Quốc gia
Mùa
30° F
Alaska
USA
Đông
48.2° F
Queensland
Australia
Hè
100° F
Andhra Pradesh
India
Hè
35° F
California
USA
Đông
96° F
Texas
USA
Hè
62° F
Tasmania
Australia
Đông
Trong dữ liệu trên, cột ‘Mùa’ chứa một danh sách giá trị
[‘winter’, ‘summer’]. Vì vậy, phân vùng theo danh sách dựa trên mùa sẽ như sau:Phân vùng 1:
Nhiệt độ
Bang
Quốc gia
Mùa
30° F
Alaska
USA
Đông
35° F
California
USA
Đông
62° F
Tasmania
Australia
Đông
Phân vùng 2:
Nhiệt độ
Bang
Quốc gia
Mùa
48.2° F
Queensland
Australia
Hè
100° F
Andhra Pradesh
India
Hè
96° F
Texas
USA
Hè
Phân vùng kết hợp
Phân vùng kết hợp là sự kết hợp của hai kỹ thuật phân vùng. Một bảng được chia trước bằng một chiến lược, và mỗi phân vùng tiếp tục được chia nhỏ bằng kỹ thuật khác.
Các chiến lược phân vùng thường được hỏi trong phỏng vấn kỹ thuật — xem top câu hỏi phỏng vấn DBA cho 2025.
Trường hợp sử dụng phân vùng dữ liệu
Giờ đây khi đã đánh giá các loại chiến lược phân vùng khác nhau, hãy xem khi nào phân vùng dữ liệu hữu ích.
Cơ sở dữ liệu phân tán
Hệ thống phân tán là tập hợp các nút đặt trên những máy chủ tách biệt về mặt vật lý nhưng được liên kết qua mạng. Ví dụ gồm Apache Cassandra, Amazon DynamoDB và Google Bigtable.
Những hệ thống này sử dụng phân vùng dữ liệu nội bộ để tổ chức và phân phối dữ liệu trên các nút.
Tác vụ OLAP
OLAP biểu diễn dữ liệu đa chiều dưới dạng khối (cube), cho phép người dùng khám phá dữ liệu từ nhiều góc độ. Dù các khối này đại diện cho dữ liệu đã được tổng hợp sẵn, dữ liệu nền vẫn rất lớn, nên các truy vấn cần được tối ưu thêm bằng phân vùng dữ liệu.
Ví dụ, áp dụng phân vùng khối (một kỹ thuật phân vùng dữ liệu) chia dữ liệu thành các khối nhỏ hơn dựa trên tiêu chí cụ thể. Khi bạn truy vấn dữ liệu, việc tìm kiếm sẽ diễn ra trên một khối cụ thể bằng cách bỏ qua các khối không liên quan, giảm thao tác I/O.
Tương tự, có thể áp dụng phân vùng theo chiều (dimension) để chia dữ liệu theo cấp, hệ phân cấp hoặc cột.
Quản lý log
Log chứa thông tin về các sự kiện, giao dịch và hoạt động xảy ra trong hệ thống. Chúng được dùng để truy vết lỗi, bug, trường hợp biên và cả thông điệp thành công.
Phân vùng log tăng tốc quá trình gỡ lỗi và giúp bạn có thông tin cần thiết nhanh hơn. Ví dụ, nếu bạn phân vùng log theo thời gian, bạn có thể dễ dàng truy xuất theo ngày, tuần, tháng hoặc năm.
Pipeline học máy
Trong các trường hợp sử dụng học máy, dữ liệu được chia thành tập huấn luyện, validation và kiểm thử. Cách này đảm bảo thông tin từ tập kiểm thử không bị lộ cho mô hình trong quá trình huấn luyện để tránh overfitting.
Hơn nữa, nếu dữ liệu huấn luyện quá lớn, một máy đơn không thể xử lý và nạp toàn bộ dữ liệu vào mô hình. Vì vậy, dữ liệu được chia thành các mảnh và đưa vào mô hình thông qua phân vùng dữ liệu.
Công cụ cho phân vùng dữ liệu
Phân vùng dữ liệu có thể được triển khai trong cả cơ sở dữ liệu SQL và NoSQL. Hãy cùng thảo luận trong phần này.
Cơ sở dữ liệu SQL
PostgreSQL
PostgreSQL cung cấp hỗ trợ sẵn cho phân vùng theo khoảng, theo danh sách và theo băm. Ví dụ, truy vấn sau tạo một phân vùng cho mỗi năm để truy cập hiệu quả lợi nhuận bán hàng và tổng doanh số theo từng năm tài chính.
MySQL
MySQL hỗ trợ các loại phân vùng ngang khác nhau như theo khoảng, theo danh sách, theo băm và theo khóa. Tính đến hiện tại (phiên bản 8.4), MySQL chưa hỗ trợ phân vùng dọc.
Truy vấn MySQL dưới đây phân vùng dữ liệu nhân viên thành ba nhóm,
p1,p2, vàp3, theo ngày gia nhập. Tất cả nhân viên gia nhập trước năm 2000 thuộc phân vùngp1. Nhân viên gia nhập từ 2000 đến 2010 thuộc phân vùngp2, và từ 2010 đến 2020 thuộc phân vùngp3.Microsoft SQL Server
SQL Server cung cấp tính năng phân vùng thông qua hàm phân vùng và lược đồ phân vùng. Hàm phân vùng xác định cách dữ liệu được chia, trong khi lược đồ phân vùng quyết định filegroup nơi phân vùng sẽ được lưu.
Trong các truy vấn sau:
sales_by_yearsales_filegroupfg01,fg02,fg03,fg04Hàm phân vùng:
Lược đồ phân vùng:
Tại đây, dữ liệu được lưu trong các tệp như sau:
fg01- các ngày trước ‘2024-01-01’,fg02- ‘2024-01-01’ đến ‘2024-01-31’fg03- ‘2024-02-01’ đến ‘2024-02-29’fg04- ‘2024-03-01’ đến ‘2024-03-31’Vì chúng ta đã chỉ định
range righttrong truy vấn, mỗi ngày ranh giới sẽ được tính vào phân vùng kế tiếp.Nếu bạn đang sử dụng SQL Server, hướng dẫn SQL Server này sẽ giới thiệu các khái niệm và công cụ chính để quản lý dữ liệu đã phân vùng. Với lộ trình học có cấu trúc, SQL Server Fundamentals giới thiệu các tính năng cốt lõi cần thiết để xây dựng cơ sở dữ liệu SQL hiệu năng.
Cơ sở dữ liệu NoSQL
Amazon DynamoDB
DynamoDB tự động xử lý phân vùng nội bộ. Khi bạn ghi một mục vào bảng DynamoDB, nó đi qua một bộ định tuyến yêu cầu. Bộ định tuyến phân tích khóa phân vùng và áp dụng hàm băm. Đầu ra của hàm băm xác định phân vùng cụ thể nơi bản ghi sẽ được lưu.
Toàn bộ quá trình này được tự động trong DynamoDB, nên người dùng không cần lo về hàm băm hay cách quản lý các phân vùng.
Mongodb
MongoDB phân phối dữ liệu qua các máy chủ bằng khái niệm sharding. Dữ liệu được phân vùng dựa trên shard key, khóa này cần được chọn cẩn thận để tránh phân phối không đều.
Thông thường, shard key nên có độ phân biệt cao và là cột thường được sử dụng trong truy vấn. Những câu hỏi phỏng vấn MongoDB này bao quát hầu như mọi chủ đề quan trọng, bao gồm cả sharding.
Apache Cassandra
Cassandra partitioner là một thuật toán băm xác định nút nào trong cụm sẽ lưu một phân vùng cụ thể. Khóa phân vùng được đưa qua thuật toán để tạo ra một token. Token này sau đó được so sánh với các giá trị token gán cho các nút. Cuối cùng, dữ liệu được lưu ở nút khớp với token.
Các thuật toán phân vùng phổ biến gồm
Murmur3Partitioner,RandomPartitioner, vàByteOrderedPartitioner.Cách triển khai phân vùng dữ liệu?
Giờ hãy thảo luận các bước cần thiết để triển khai phân vùng dữ liệu đúng cách.
Bước 1: Hiểu dữ liệu và mô hình truy cập
Đánh giá kỹ cách ứng dụng của bạn truy vấn cơ sở dữ liệu, dữ liệu nào thường xuyên được truy cập, kích thước dữ liệu và các nút thắt hiệu năng. Những hiểu biết này giúp bạn đặt mục tiêu rõ ràng cho phân vùng và xác định các cột khóa thường tham gia vào thao tác dữ liệu.
Bước 2: Chọn kỹ thuật phân vùng
Chúng ta đã đề cập các kỹ thuật phổ biến, và đây là cách quyết định giữa chúng:
Bước 3: Tạo các phân vùng
Sau đây là ví dụ truy vấn SQL để tạo phân vùng bằng phân vùng băm.
Trong đoạn mã trên, cột ‘location_id’ được đưa vào hàm băm, và đầu ra quyết định bản ghi sẽ được gán vào phân vùng nào. Dòng mã
partitions 4chỉ định tổng số phân vùng cần tạo.Đánh dấu trang tài liệu SQL Basics Cheat Sheet này để tham khảo cú pháp SQL cốt lõi khi bạn triển khai phân vùng.
Bước 4: Giám sát và tối ưu phân vùng
Thách thức và cân nhắc khi phân vùng dữ liệu
Tối ưu hóa luôn đi kèm đánh đổi và thách thức, như mọi thứ trong thế giới phần mềm. Dưới đây là những điều bạn nên cân nhắc:
Thực tiễn tốt nhất cho phân vùng dữ liệu
Như bạn thấy, phân vùng dữ liệu trở nên phức tạp khi khối lượng dữ liệu tăng. Tuy nhiên, áp dụng các thực tiễn sau sẽ đảm bảo phân vùng nâng cao hiệu quả mà không ảnh hưởng hiệu năng.
Kết luận
Phân vùng dữ liệu hiệu quả là yếu tố then chốt để duy trì hiệu năng và khả năng mở rộng khi dữ liệu của bạn tăng trưởng. Với chiến lược phù hợp, bạn có thể giảm độ trễ truy vấn, tối ưu lưu trữ và đơn giản hóa bảo trì. Đây là một bước thực tế với tác động có thể đo lường.
Để tìm hiểu sâu hơn cách phân vùng giúp hệ thống phân tán mở rộng, hãy xem hướng dẫn về phân vùng Kafka. Để hiểu cách cấu trúc quan hệ ảnh hưởng đến quyết định phân vùng, hãy bắt đầu với khóa học cơ sở dữ liệu quan hệ.