Trong hai năm qua, sự bùng nổ của mô hình làm việc từ xa đã…
Các phương pháp hay nhất để đạt được khả năng mở rộng và độ khả dụng cao trong Google Cloud SQL.
Đối với các doanh nghiệp hiện nay, khả năng mở rộng và độ khả dụng cao của cơ sở dữ liệu là yếu tố then chốt để đảm bảo hoạt động liên tục và đáp ứng nhu cầu tăng trưởng của doanh nghiệp. Google Cloud SQL, với các tính năng mạnh mẽ và linh hoạt, mang đến giải pháp tối ưu cho việc quản lý cơ sở dữ liệu trên đám mây. Bài viết này sẽ đi sâu vào các phương pháp hay nhất để đạt được khả năng mở rộng và độ khả dụng cao trong Google Cloud SQL, giúp bạn xây dựng hệ thống cơ sở dữ liệu vững chắc và hiệu quả.
Giới thiệu
Hiện nay, nhiều cơ sở dữ liệu vector chuyên dụng yêu cầu bạn phải tạo các quy trình và ứng dụng phức tạp để lấy được dữ liệu cần thiết. AlloyDB for PostgreSQL cung cấp ScaNN, chỉ mục tìm kiếm vector tiên tiến từ Google Research, giúp bạn tối ưu hóa quá trình truy xuất dữ liệu mới nhất và phù hợp nhất chỉ với một câu lệnh SQL.
Giờ đây, Google giới thiệu một loạt cải tiến mới để giúp bạn tận dụng tốt hơn khả năng tìm kiếm vector trong AlloyDB. Đầu tiên, Google ra mắt lọc nội tuyến (inline filtering), một cải tiến lớn về hiệu suất cho tìm kiếm vector có bộ lọc trong AlloyDB. Một trong những tính năng mạnh mẽ nhất của AlloyDB là khả năng thực hiện tìm kiếm vector có bộ lọc ngay trong cơ sở dữ liệu, thay vì xử lý sau trên phía ứng dụng. Lọc nội tuyến giúp đảm bảo các truy vấn này nhanh chóng, chính xác và hiệu quả — tự động kết hợp tối ưu giữa chỉ mục vector và chỉ mục truyền thống trên các cột siêu dữ liệu để nâng cao hiệu suất truy vấn.
Thứ hai, Google ra mắt bộ công cụ quan sát và quản lý cấp doanh nghiệp dành cho vector indexes, giúp bạn đảm bảo hiệu suất ổn định và kết quả tìm kiếm có chất lượng cao nhất. Điều này bao gồm một công cụ đánh giá độ nhớ (recall evaluator) mới, giúp đo lường chất lượng tìm kiếm vector mà không cần xây dựng quy trình đánh giá riêng. Ngoài ra, Google giới thiệu thống kê phân phối chỉ mục vector, cho phép các khách hàng có dữ liệu thay đổi liên tục theo thời gian thực đạt được hiệu suất ổn định và nhất quán hơn.
Những cải tiến này tiếp tục củng cố sứ mệnh của Google trong việc cung cấp các giải pháp tìm kiếm vector mạnh mẽ, linh hoạt và chất lượng cao mà các doanh nghiệp có thể tin cậy.
Đánh giá về tìm kiếm vector có bộ lọc trong AlloyDB
Nhiều khách hàng bắt đầu hành trình tìm kiếm vector bằng cách thử nghiệm tìm kiếm đơn giản trên một cột duy nhất. Ví dụ, một nhà bán lẻ có thể muốn thực hiện tìm kiếm ngữ nghĩa trên mô tả sản phẩm để hiển thị các sản phẩm phù hợp với truy vấn của người dùng cuối.
SELECT * FROM product
ORDER BY embedding <=> embedding(‘text-embedding-005’, ‘red cotton crew neck shirt’)::vector
LIMIT 50;
Tuy nhiên, khi bạn muốn đưa các giải pháp này vào sản xuất và cải thiện chất lượng kết quả, bạn có thể nhận thấy rằng các truy vấn trở nên phức tạp hơn. Bạn có thể lặp lại quy trình — thêm bộ lọc, thực hiện phép join với các bảng khác và tổng hợp dữ liệu. Ví dụ, nhà bán lẻ có thể muốn cho phép người dùng lọc theo kích thước, giá cả và nhiều tiêu chí khác.
SELECT * FROM product
WHERE category=’shirt’&& size=’S’&& price<100
ORDER BY embedding <=> embedding(‘text-embedding-005’, ‘red cotton crew neck’)::vector
LIMIT 50;
Giao diện PostgreSQL của AlloyDB mang lại trải nghiệm phát triển mạnh mẽ cho các loại khối lượng công việc này. Vì tìm kiếm vector được tích hợp trực tiếp vào giao diện SQL, các nhà phát triển có thể dễ dàng truy vấn dữ liệu có cấu trúc và phi cấu trúc trong một câu lệnh SQL duy nhất, thay vì phải viết mã ứng dụng phức tạp để lấy dữ liệu từ nhiều nguồn khác nhau.
Hơn nữa, khi yêu cầu thay đổi, chẳng hạn như thêm bộ lọc truy vấn mới, thường không cần cập nhật lược đồ (schema) hoặc chỉ mục (index). Ví dụ, nếu nhà bán lẻ muốn chỉ hiển thị các mặt hàng còn hàng tại cửa hàng địa phương của người dùng cuối, họ có thể dễ dàng kết hợp bảng sản phẩm của mình với bảng tồn kho cửa hàng hiện có thông qua giao diện SQL.
SELECT * FROM product p
JOIN product_inventory pi ON p.id = pi.product_id
WHERE category=’shirt’ && pi.inventory>0
ORDER BY embedding <=> embedding(‘text-embedding-005’, ‘red cotton crew neck’)::vector
LIMIT 50;
Lọc nội tuyến
Nhưng với tư cách là một nhà phát triển, bạn không chỉ muốn thực thi truy vấn — bạn còn muốn có hiệu suất cao và độ nhớ tốt. Để mang lại hiệu suất tối ưu, trình tối ưu hóa truy vấn (query optimizer) của AlloyDB sẽ tự động lựa chọn cách thực thi truy vấn có bộ lọc.
Lọc nội tuyến (Inline filtering) là một kỹ thuật tối ưu hóa truy vấn mới, cho phép trình tối ưu hóa của AlloyDB đánh giá đồng thời cả điều kiện lọc siêu dữ liệu và tìm kiếm vector, tận dụng cả chỉ mục vector và chỉ mục trên các cột siêu dữ liệu. Lọc nội tuyến hiện đã có sẵn cho chỉ mục ScaNN trong AlloyDB, một công nghệ tìm kiếm dựa trên hơn một thập kỷ nghiên cứu của Google về các thuật toán tìm kiếm ngữ nghĩa.
AlloyDB tự động áp dụng kỹ thuật này khi nó mang lại lợi ích cao nhất. Tùy thuộc vào truy vấn và phân bố dữ liệu, bộ lập kế hoạch truy vấn (query planner) sẽ tự động chọn phương án thực thi có hiệu suất tốt nhất:
- Khi bộ lọc có độ chọn lọc cao (high selectivity) – tức là chỉ có một số ít hàng thỏa mãn điều kiện lọc, trình lập kế hoạch thường thực hiện lọc trước (pre-filter). Cách này tận dụng chỉ mục trên cột siêu dữ liệu để tìm tập hợp con nhỏ các hàng phù hợp, sau đó mới thực hiện tìm kiếm láng giềng gần nhất (nearest-neighbor search) trên các hàng này.
- Khi bộ lọc có độ chọn lọc thấp (low selectivity) – tức là phần lớn các hàng đều khớp với điều kiện lọc, trình lập kế hoạch có thể chọn lọc sau (post-filter). Phương pháp này bắt đầu với chỉ mục vector để tìm danh sách các kết quả phù hợp, sau đó loại bỏ các kết quả không đáp ứng điều kiện trên các cột siêu dữ liệu.
- Lọc nội tuyến (Inline filtering) hoạt động tốt nhất với độ chọn lọc trung bình (medium selectivity). Khi AlloyDB tìm kiếm qua chỉ mục vector, nó chỉ tính toán khoảng cách cho các vector thỏa mãn điều kiện lọc trên siêu dữ liệu. Điều này giúp cải thiện đáng kể hiệu suất truy vấn, bổ sung lợi thế của cả phương pháp lọc trước và lọc sau.
Với tính năng này, AlloyDB mang lại hiệu suất vượt trội trên toàn bộ phổ chọn lọc của bộ lọc khi kết hợp với tìm kiếm vector.
Xem video demo để tìm hiểu thêm về cách hoạt động của tính năng này: https://www.youtube.com/watch?v=L5XRdSHEE3I
Quan sát và giám sát cấp doanh nghiệp
Nếu bạn đang chạy tìm kiếm tương đồng (similarity search) hoặc khối lượng công việc AI tạo sinh (generative AI) trong môi trường sản xuất, bạn cần hiệu suất ổn định và chất lượng kết quả cao, giống như với bất kỳ khối lượng công việc cơ sở dữ liệu nào khác. Công cụ quan sát và quản lý là yếu tố then chốt để đạt được điều này.
Với công cụ đánh giá độ nhớ (recall evaluator) mới, được tích hợp trực tiếp trong cơ sở dữ liệu, bạn có thể đo lường một cách hệ thống và tối ưu hóa chất lượng tìm kiếm chỉ với một thủ tục lưu trữ (stored procedure) duy nhất trong cơ sở dữ liệu, thay vì phải xây dựng các quy trình đánh giá tùy chỉnh.
Độ nhớ (recall) trong tìm kiếm tương đồng là tỷ lệ các kết quả phù hợp được truy xuất từ một truy vấn tìm kiếm và là chỉ số phổ biến nhất để đánh giá chất lượng tìm kiếm. Một trong những nguyên nhân gây mất độ nhớ là sự khác biệt giữa tìm kiếm láng giềng gần nhất xấp xỉ (approximate nearest neighbor – aNN) và tìm kiếm k láng giềng gần nhất chính xác (k exact nearest neighbor – kNN). Chỉ mục vector như ScaNN của AlloyDB triển khai các thuật toán aNN, giúp tăng tốc tìm kiếm vector trên tập dữ liệu lớn với một sự đánh đổi nhỏ về độ nhớ. Giờ đây, AlloyDB cho phép bạn đo lường mức độ đánh đổi này trực tiếp trong cơ sở dữ liệu cho từng truy vấn, đảm bảo rằng độ nhớ vẫn ổn định theo thời gian. Bạn có thể điều chỉnh các tham số truy vấn và chỉ mục dựa trên thông tin này để đạt được kết quả và hiệu suất tốt hơn. Công cụ quản lý này rất quan trọng nếu bạn quan tâm đến việc duy trì kết quả ổn định và chất lượng cao.
Bên cạnh việc cải thiện độ nhớ, Google cũng giới thiệu thống kê phân phối chỉ mục vector (vector index distribution statistics) cho chỉ mục ScaNN, giúp các nhà phát triển theo dõi phân bố các vector trong chỉ mục. Điều này đặc biệt hữu ích đối với các khối lượng công việc có tốc độ ghi cao hoặc dữ liệu thay đổi nhanh. Trong những trường hợp này, dữ liệu thời gian thực mới được tự động thêm vào chỉ mục và sẵn sàng để truy vấn ngay lập tức. Giờ đây, bạn có thể giám sát mọi thay đổi trong phân bố chỉ mục vector và đảm bảo rằng hiệu suất vẫn ổn định bất kể dữ liệu có thay đổi như thế nào.
Kết luận
Tóm lại, việc đạt được khả năng mở rộng và độ khả dụng cao trong Google Cloud SQL đòi hỏi sự kết hợp giữa thiết kế hệ thống thông minh, tối ưu hóa cấu hình và sử dụng hiệu quả các tính năng của nền tảng. Bằng cách áp dụng các phương pháp hay nhất được trình bày trong bài viết, doanh nghiệp có thể xây dựng một hệ thống cơ sở dữ liệu mạnh mẽ, linh hoạt và đáng tin cậy, đáp ứng nhu cầu tăng trưởng và đảm bảo hoạt động liên tục trong môi trường kinh doanh đầy biến động.
Hãy nhớ rằng, không có một giải pháp duy nhất phù hợp với tất cả các trường hợp. Doanh nghiệp cần đánh giá kỹ lưỡng yêu cầu cụ thể của mình và lựa chọn các phương pháp phù hợp nhất để đạt được mục tiêu về khả năng mở rộng và độ khả dụng cao.