Ngân hàng đề — Google Cloud Professional Cloud Database Engineer

Tìm thấy 169 câu.

Câu 161
You are using Memorystore for Redis to cache frequently accessed data and improve your application’s performance. In the event of a complete regional outage, the application will failover to another region. You want to ensure that the Memorystore instance in the new region does not start from an empty cache after failover. What should you do?
  1. A Use Memorystore Standard Tier. Disable read replicas.
  2. B Use Memorystore Standard Tier. Configure at least one read replica.
  3. C Schedule exports of the Memorystore instance. Specify a dual-region Cloud Storage bucket as the export destination.
  4. D Enable Redis RDB snapshots for Memorystore.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào tình huống sử dụng Memorystore for Redis (dịch vụ Redis được quản lý của Google Cloud) để cache dữ liệu truy cập thường xuyên, nhằm cải thiện hiệu suất ứng dụng. 📈 Trong trường hợp xảy ra sự cố outage toàn vùng (regional outage), ứng dụng sẽ failover sang vùng khác (another region). Yêu cầu chính là đảm bảo instance Memorystore ở vùng mới không bắt đầu từ cache rỗng (không empty cache), nghĩa là cần cơ chế sao lưu và khôi phục dữ liệu cache cross-region một cách đáng tin cậy.

🛠️ Vấn đề cốt lõi: Memorystore mặc định là regional (giới hạn trong một vùng), nên cần giải pháp để dữ liệu cache được đồng bộ hoặc export sang vùng khác, sẵn sàng import khi failover. Điều này đòi hỏi sử dụng các tính năng persistence và multi-region storage của Google Cloud, dựa trên phiên bản mới nhất (cập nhật đến 2024-2026, theo docs Google Cloud Memorystore Redis v1.XX với hỗ trợ export/import RDB snapshots).

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Schedule exports of the Memorystore instance. Specify a dual-region Cloud Storage bucket as the export destination.

Lý do:

  • Lập lịch exports định kỳ (schedule exports) từ Memorystore Redis sẽ tạo RDB snapshots và lưu vào Cloud Storage bucket dual-region (ví dụ: us-west1-us-east1). 🗄️ Bucket dual-region tự động replicate dữ liệu sang hai vùng, đảm bảo snapshot luôn có sẵn ở vùng failover mà không mất dữ liệu.
  • Sau failover, chỉ cần import snapshot từ bucket vào instance mới ở vùng khác → cache được khôi phục nhanh chóng, tránh empty cache.
  • Đây là best practice cho disaster recovery cross-region theo Google Cloud, hỗ trợ automation qua Cloud Scheduler + Cloud Functions. 🚀

📋 Giải thích tất cả các phương án (đúng/sai)

  • Use Memorystore Standard Tier. Disable read replicas.
    ❌ Sai: Standard Tier cung cấp high availability intra-region qua read replicas, nhưng disable read replicas làm mất tính năng replication nội vùng, không hỗ trợ cross-region. Trong regional outage, instance mới ở vùng khác vẫn empty vì không có dữ liệu sao chép tự động. Không giải quyết failover multi-region.

  • Use Memorystore Standard Tier. Configure at least one read replica.
    ❌ Sai: Read replicas trong Standard Tier chỉ replicate intra-region (cùng vùng), không cross-region. 🏠 Khi outage toàn vùng, replicas cũng mất theo → instance vùng mới không có dữ liệu. Không đảm bảo non-empty cache sau failover.

  • Schedule exports of the Memorystore instance. Specify a dual-region Cloud Storage bucket as the export destination.
    ✅ Đúng: Như giải thích ở trên. Export RDB snapshots định kỳ vào dual-region bucket (multi-zone/multi-region replication tự động), cho phép import nhanh ở vùng mới. Hỗ trợ RPO thấp (Recovery Point Objective) cho cache. 💾

  • Enable Redis RDB snapshots for Memorystore.
    ❌ Sai: RDB snapshots chỉ lưu persistence nội vùng (local storage), tự động hoặc thủ công nhưng không replicate cross-region. Khi outage, snapshot mất theo vùng → không thể dùng cho instance vùng mới mà không có backup external. Cần export explicit đến GCS multi-region mới hiệu quả.

📘 Tài liệu tham khảo (cập nhật mới nhất 2024-2026)

Giải pháp này tối ưu chi phí, scalable và tuân thủ GAIA framework của Google Cloud! 🌟

Câu 162
Your company is using a multi-region Spanner instance. The instance stores data from an application which does a lot of writes without reading the data. You are noticing a lot of latency regression. You want to reduce latency and improve performance. What should you do?
  1. A Enable leader-aware routing in the client library.
  2. B Add additional indexes to the table.
  3. C Disable leader-aware routing in the client library.
  4. D Increase the number of Spanner nodes.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi mô tả tình huống: Công ty bạn đang sử dụng một instance Spanner đa vùng (multi-region Spanner instance) trong Google Cloud Spanner. Ứng dụng thực hiện rất nhiều hoạt động ghi dữ liệu (writes) mà không đọc dữ liệu (without reading the data). Bạn nhận thấy độ trễ (latency) tăng cao (latency regression). Mục tiêu là giảm độ trễ và cải thiện hiệu suất (reduce latency and improve performance).

🛠️ Bối cảnh kỹ thuật chính:

  • Google Cloud Spanner là cơ sở dữ liệu phân tán toàn cầu, hỗ trợ multi-region để đảm bảo tính sẵn sàng cao và độ bền dữ liệu.
  • Trong multi-region setup, dữ liệu được replicate qua nhiều vùng (regions), với leader node cho mỗi shard chịu trách nhiệm xử lý writes (ghi dữ liệu phải đi qua leader trước khi replicate sang followers).
  • Với workload write-heavy (nhiều writes, ít reads), latency thường tăng do client library mặc định có thể route writes đến follower nodes (không phải leader), dẫn đến redirect và thêm độ trễ mạng.
  • Giải pháp cần tập trung vào tối ưu hóa routing writes để tránh lãng phí thời gian redirect, đặc biệt trong môi trường multi-region (có thể cách xa hàng nghìn km).

📘 Kiến thức cập nhật đến 2026: Theo tài liệu Google Cloud Spanner mới nhất (phiên bản client libraries v2.x trở lên, cập nhật 2024-2026), leader-aware routing là tính năng khuyến nghị cho write-heavy workloads để giảm latency lên đến 50-70% trong multi-region setups. (Nguồn: Google Cloud Spanner Client Libraries Docs, Spanner Best Practices for Performance).

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Enable leader-aware routing in the client library.

Lý do chi tiết:

  • Trong Spanner multi-region, mỗi shard có một leader node duy nhất xử lý writes. Client library mặc định không leader-aware có thể gửi writes đến follower nodes, gây redirect (chuyển hướng) qua mạng, dẫn đến latency cao (đặc biệt với writes cross-region).
  • Enable leader-aware routing cho phép client tự động phát hiện và route trực tiếp đến leader node gần nhất, giảm số hop mạng và loại bỏ redirect overhead.
  • Phù hợp hoàn hảo với workload write-heavy mà ít reads, giúp cải thiện latency ngay lập tức mà không cần scale resources. Đây là best practice từ Google cho multi-region instances (giảm latency từ 100-500ms xuống dưới 50ms tùy region distance).

🧩 Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn một cách chi tiết, giữ nguyên văn bản gốc bằng tiếng Anh:

  • ✅ Enable leader-aware routing in the client library.
    Đúng 🟢: Như giải thích trên, tính năng này tối ưu hóa writes bằng cách route trực tiếp đến leader, giảm latency regression trong multi-region write-heavy workloads. Không ảnh hưởng đến reads và dễ implement qua client config (ví dụ: Session.withLeaderRouting() trong Java/Python libs). Best practice từ Google (Nguồn: Spanner Routing Docs).

  • ❌ Add additional indexes to the table.
    Sai 🔴: Indexes chủ yếu tối ưu queries reads (đọc dữ liệu) bằng cách tăng tốc lookup, nhưng không giúp writes (thậm chí có thể làm writes chậm hơn do overhead maintain indexes). Workload này ít reads, nên indexes vô ích và không giải quyết latency writes/redirect.

  • ❌ Disable leader-aware routing in the client library.
    Sai 🔴: Leader-aware routing mặc định đã enable ở một số libs mới, nhưng disable nó sẽ tệ hơn, buộc tất cả writes phải redirect thường xuyên từ followers về leader, tăng latency thêm thay vì giảm. Hoàn toàn ngược với mục tiêu.

  • ❌ Increase the number of Spanner nodes.
    Sai 🔴: Tăng nodes cải thiện throughput tổng thể (xử lý nhiều requests hơn) và phân tán load, nhưng không giải quyết latency per-write do vấn đề routing/redirect vẫn tồn tại. Chi phí cao (nodes multi-region đắt đỏ), và chỉ hữu ích nếu đã hit node limits, không phải trường hợp latency regression từ writes.

💡 Lời khuyên thực tế: Sau khi enable leader-aware, monitor qua Cloud Monitoring (metrics như spanner.googleapis.com/transaction/leader_redirect_count) để xác nhận cải thiện. Nếu cần, kết hợp autoscaling nodes cho throughput cao hơn! (Nguồn: Spanner Monitoring Docs).

Câu 163
You are designing a new ecommerce application on Google Cloud. You expect high and bursty write volumes during peak sales periods. You need to configure Spanner to ensure consistent database performance during this sales period. What should you do?
  1. A Implement sharding to distribute the write load across multiple Spanner instances.
  2. B Configure read-only transactions to improve read performance during peak periods.
  3. C Use interleaved tables to reduce the number of cross-node transactions.
  4. D Enable autoscaling in the Spanner instance, and set the maximum number of nodes to match the peak write volume.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc thiết kế ứng dụng thương mại điện tử (ecommerce) trên Google Cloud, cụ thể là sử dụng Cloud Spanner – một cơ sở dữ liệu quan hệ phân tán toàn cầu, hỗ trợ ACID transactions và scale ngang tự động.

🔍 Tình huống vấn đề:

  • Ứng dụng dự kiến có khối lượng ghi (write volumes) cao và đột biến (bursty) trong các giai đoạn bán hàng đỉnh điểm (peak sales periods), ví dụ như Black Friday hoặc lễ hội mua sắm.
  • Yêu cầu: Cấu hình Spanner để đảm bảo hiệu suất database nhất quán (consistent performance), đặc biệt là khả năng xử lý write mà không bị nghẽn hoặc chậm trễ.

🛠️ Mục tiêu chính: Tối ưu hóa cho write-heavy workload với tính bursty, tận dụng các tính năng scale của Spanner để tự động điều chỉnh tài nguyên (nodes) mà không gián đoạn dịch vụ.

📘 Kiến thức cập nhật (đến 2026): Cloud Spanner hỗ trợ autoscaling nodes từ năm 2023 (stable GA), cho phép instance tự động scale từ 1 node lên đến 20.000 nodes dựa trên CPU utilization và query latency. Điều này lý tưởng cho bursty workloads, giúp duy trì performance nhất quán mà không cần can thiệp thủ công (theo tài liệu Google Cloud Spanner: Autoscaling in Cloud Spanner).

✅ Đáp án đúng

Enable autoscaling in the Spanner instance, and set the maximum number of nodes to match the peak write volume.

Lý do chọn đáp án này:

  • Spanner autoscaling tự động tăng/giảm số nodes dựa trên metrics như CPU >70% hoặc latency cao, rất phù hợp với bursty write volumes trong peak periods.
  • Việc set maximum nodes dự đoán peak (ví dụ: 100-1000 nodes tùy quy mô) đảm bảo scale nhanh chóng lên mức cần thiết, tránh bottleneck write (Spanner xử lý ~2.000 QPS/node cho writes).
  • Kết quả: Consistent performance với zero-downtime scaling, tiết kiệm chi phí vì scale down sau peak.
  • Đây là best practice cho ecommerce workloads theo Google Cloud recommendations (2026 updates vẫn giữ nguyên core feature).

❌ Giải thích tất cả các phương án

  • [SAI] Implement sharding to distribute the write load across multiple Spanner instances.
    ❌ Sai vì: Spanner tự động sharding dữ liệu qua splits và directories trên các nodes trong một instance duy nhất, không cần implement thủ công. Sử dụng multiple instances sẽ tạo data inconsistency, tăng complexity quản lý replication, và không giải quyết bursty writes (vi phạm global consistency của Spanner). Không khuyến khích theo docs.

  • [SAI] Configure read-only transactions to improve read performance during peak periods.
    ❌ Sai vì: Read-only transactions (như Read hoặc SQL queries với READ TIMESTAMP) chỉ tối ưu đọc, không ảnh hưởng đến write performance. Peak periods có write-heavy, nên cách này làm tình hình tệ hơn bằng cách tăng read contention trên nodes đang overload writes.

  • [SAI] Use interleaved tables to reduce the number of cross-node transactions.
    ❌ Sai vì: Interleaved tables giúp giảm cross-node joins cho queries đọc/ghi liên quan parent-child relationships, cải thiện locality. Tuy nhiên, nó không scale write volumes hay xử lý bursty loads – chỉ tối ưu schema design, không phải dynamic scaling cho peak traffic.

  • [ĐÚNG] Enable autoscaling in the Spanner instance, and set the maximum number of nodes to match the peak write volume.
    ✅ Đúng như đã giải thích ở trên – giải pháp trực tiếp, scalable và native cho Spanner.

📚 Tài liệu tham khảo

Hy vọng phân tích này giúp bạn ôn thi chứng chỉ hiệu quả! 🚀 Nếu cần thêm ví dụ code hoặc demo, hãy hỏi nhé!

Câu 164
Your application uses a Cloud SQL for MySQL instance. Recently, you have noticed performance degradation during peak hours, leading to slow response times and frustrated users. You suspect that inefficient queries might be contributing to these issues. You want to pinpoint and analyze these problematic queries and pass them to the application team for optimizations. What should you do?
  1. A Use the underprovisioned instance recommender.
  2. B Increase the Cloud SQL instance read_buffer_size flag.
  3. C Enable and use Query Insights.
  4. D Create a Cloud Monitoring alert based on the database/mysql/queries metric.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi mô tả một tình huống thực tế trong Google Cloud: Ứng dụng của bạn đang sử dụng Cloud SQL for MySQL (một dịch vụ cơ sở dữ liệu quan hệ được quản lý trên GCP). Gần đây, hiệu suất giảm sút vào giờ cao điểm (peak hours), dẫn đến thời gian phản hồi chậm (slow response times) và người dùng thất vọng. Bạn nghi ngờ nguyên nhân là các truy vấn không hiệu quả (inefficient queries). Mục tiêu là xác định chính xác (pinpoint) và phân tích các truy vấn có vấn đề này, sau đó chuyển cho đội ngũ ứng dụng để tối ưu hóa (optimizations).

🛠️ Vấn đề cốt lõi: Cần công cụ chuyên sâu để theo dõi, phân tích query-level (mức truy vấn cụ thể), không chỉ là theo dõi tổng quát hoặc tuning cơ bản. Đây là bài toán về performance troubleshooting cho database queries trong Cloud SQL (cập nhật đến năm 2026, Query Insights vẫn là tính năng chính thức và được khuyến nghị trong docs GCP mới nhất).

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Enable and use Query Insights.

Lý do:

  • Query Insights là tính năng chuyên biệt của Cloud SQL (MySQL/PostgreSQL/SQL Server) giúp pinpoint và analyze các truy vấn chậm nhất theo các chỉ số như CPU, I/O, latency, execution count.
  • Nó cung cấp dashboard trực quan với top queries, query text, execution plans, và recommendations tự động – lý tưởng để chia sẻ với dev team.
  • Dễ enable qua console/CLI/API, không downtime, và tích hợp Cloud Monitoring/Logging. Đây là giải pháp best practice theo docs GCP 2026 cho query optimization. 🏆

📋 Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích từng lựa chọn một cách chi tiết:

  • ❌ Use the underprovisioned instance recommender.
    Sai vì: Recommender này (trong Cloud SQL Insights hoặc Recommender API) chỉ kiểm tra xem instance có bị underprovisioned (thiếu CPU/RAM/storage) so với workload hay không, và gợi ý scale up. Nó không phân tích queries cụ thể, chỉ nhìn tổng quát resource usage. Không giải quyết inefficient queries mà chỉ fix hardware. 🛑

  • ❌ Increase the Cloud SQL instance read_buffer_size flag.
    Sai vì: read_buffer_size là database flag MySQL để tăng buffer cho sequential scans, có thể cải thiện một số workload read-heavy. Tuy nhiên, đây là tuning thủ công mù quáng, không giúp pinpoint queries nào đang chậm. Có nguy cơ làm tăng memory usage dẫn đến OOM, và không cung cấp analysis để dev team optimize code. Không phải giải pháp root cause. ⚠️

  • ✅ Enable and use Query Insights.
    Đúng vì: Như đã giải thích ở trên, đây là công cụ chính xác nhất để identify top problematic queries với metrics chi tiết (CPU time, I/O bytes, rows scanned), visualizations, và export data. Enable chỉ cần vài click trong console, hỗ trợ MySQL 8.0+ (tiêu chuẩn 2026). Hoàn hảo cho việc pass insights cho app team. 🌟

  • ❌ Create a Cloud Monitoring alert based on the database/mysql/queries metric.
    Sai vì: Metric database/mysql/queries (trong Cloud Monitoring) chỉ đếm tổng số queries per second (QPS), không breakdown theo query cụ thể hay inefficient ones. Alert chỉ notify khi QPS cao, nhưng không pinpoint/analyze query text hoặc plans. Thiếu depth so với Query Insights. 📉

🧠 Kết luận: Chọn Query Insights để giải quyết triệt để, giúp cải thiện performance bền vững mà không cần đoán mò! Nếu cần lab thực hành, dùng GCP Free Tier với Cloud SQL. 🚀

Câu 165
You are migrating your on-premises PostgreSQL database to Spanner. You need to identify a solution for handling existing integer-based table primary keys. You want minimal changes to the applications while also following Google-recommended practices. What should you do?
  1. A Use application generated sequential integer values as primary keys.
  2. B Update default primary key values to max(primary_key) + 1.
  3. C Use a UUID function that generates UUID Version 4 values as primary keys.
  4. D Generate values by using BIT_REVERSED_POSITIVE sequences.
Xem giải thích

🧩 Phân tích chi tiết câu hỏi

📘 Nội dung câu hỏi:
Câu hỏi tập trung vào việc di chuyển (migrate) cơ sở dữ liệu PostgreSQL từ on-premises lên Google Cloud Spanner. Vấn đề chính là xử lý các primary key (PK) dựa trên kiểu integer hiện có trong bảng. Yêu cầu là tìm giải pháp tối thiểu hóa thay đổi cho ứng dụng (minimal changes to applications) đồng thời tuân thủ thực hành tốt nhất được Google khuyến nghị (Google-recommended practices).

Spanner là cơ sở dữ liệu phân tán toàn cầu (distributed database), nên PK cần được thiết kế để tránh hot spots (điểm nóng - nơi nhiều writes tập trung vào một shard, gây bottleneck). Các PK sequential integer thông thường (tăng dần) sẽ gây vấn đề này vì tất cả inserts mới đều ghi vào cuối range, dẫn đến hiệu suất kém. Giải pháp phải tạo giá trị PK phân tán đều, dễ migrate từ PostgreSQL mà không thay đổi lớn code ứng dụng.

(Kiến thức cập nhật: Theo tài liệu Spanner mới nhất 2026, khuyến nghị chính thức cho PK integer là sử dụng sequences đặc biệt để đảm bảo tính phân tán - x.v. BIT_REVERSED_POSITIVE.)

✅ Đáp án đúng và lý do chọn

Đáp án đúng: Generate values by using BIT_REVERSED_POSITIVE sequences.

🛠️ Lý do chi tiết:

  • BIT_REVERSED_POSITIVE sequences là tính năng được Google Cloud Spanner khuyến nghị chính thức cho PK kiểu integer khi migrate từ RDBMS truyền thống như PostgreSQL.
  • Nó tạo ra các giá trị tăng dần về mặt logic (positive và sequential-like) nhưng bit-reversed (đảo bit) để phân tán đều trên các shard, tránh hot spots hoàn toàn.
  • Minimal changes: Ứng dụng chỉ cần thay đổi cách generate PK từ nextval() PostgreSQL sang GENERATE_UUIDV4() hoặc sequence tương tự trong Spanner SQL, nhưng giữ nguyên kiểu integer (64-bit). Không cần refactor lớn.
  • Hiệu suất cao: Tăng throughput writes lên gấp nhiều lần so với sequential IDs.

📚 Tài liệu tham khảo:

❌ Giải thích tất cả các phương án (đúng/sai)

  • [SAI] Use application generated sequential integer values as primary keys.
    ❌ Sai vì: Giá trị sequential integer do ứng dụng tự generate (như auto-increment) sẽ gây hot spots nghiêm trọng trong Spanner. Tất cả inserts mới tập trung vào cuối range số, làm một shard overload. Không tuân thủ best practices của Google, vi phạm yêu cầu "Google-recommended practices".

  • [SAI] Update default primary key values to max(primary_key) + 1.
    ❌ Sai vì: Cách này vẫn tạo ra sequential values (tăng dần từ max hiện tại), dẫn đến cùng vấn đề hot spots như trên. Migrate sẽ phức tạp (cần query max mỗi lần), không scalable và không được Spanner khuyến nghị cho production.

  • [SAI] Use a UUID function that generates UUID Version 4 values as primary keys.
    ❌ Sai vì: UUID v4 là random hoàn toàn, giúp tránh hot spots nhưng không minimal changes - ứng dụng PostgreSQL dùng integer phải refactor toàn bộ để dùng STRING(36) UUID. Overhead lưu trữ cao (36 bytes vs 8 bytes integer), hiệu suất kém hơn bit-reversed sequences. Google ưu tiên bit-reversed cho trường hợp integer PK.

  • [ĐÚNG] Generate values by using BIT_REVERSED_POSITIVE sequences.
    ✅ Đúng vì: Như giải thích ở phần đáp án đúng - hoàn hảo cân bằng giữa tính tương thích migrate, tránh hot spots và best practices Spanner. Dễ implement: CREATE TABLE ... PRIMARY KEY (id) WITH (sequence: BIT_REVERSED_POSITIVE(64)).

🧩 Kết luận: Giải pháp này đảm bảo high availability, scalability của Spanner mà không làm ứng dụng "phá sản". Nếu migrate thực tế, khuyến nghị test với Spanner Emulator trước! 🚀

Câu 166
You have a Cloud SQL for MySQL instance with a table of product information including a column of product descriptions. Your application development team is building a customer facing chatbot and would like to find the product that most closely matches a freeform text description provided by the customer. How should you enable this functionality?
  1. A Create a stored procedure that uses a regular expression to match the customer’s search text to values in the product description column.
  2. B Create and populate a column of product description embeddings on the product table and perform an approximate nearest neighbor search using the customer’s search text.
  3. C Use the LIKE operator to match the customer’s search text to the product description and return similar rows.
  4. D Create a SQL script that compares the product description and the customer’s search text by using the SOUNDEX function.
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm

📖 Nội dung câu hỏi:
Câu hỏi mô tả một tình huống thực tế trong Google Cloud: Bạn có một instance Cloud SQL for MySQL chứa bảng thông tin sản phẩm, bao gồm cột mô tả sản phẩm (product descriptions). Đội ngũ phát triển ứng dụng đang xây dựng một chatbot hướng đến khách hàng, và họ cần chức năng tìm kiếm sản phẩm gần giống nhất (most closely matches) với mô tả văn bản tự do (freeform text description) do khách hàng cung cấp.
Vấn đề cốt lõi là thực hiện tìm kiếm ngữ nghĩa (semantic search) hiệu quả trên dữ liệu văn bản không cấu trúc, thay vì tìm kiếm chính xác từ khóa, để chatbot có thể hiểu và khớp ý nghĩa gần nhất. Cloud SQL for MySQL hỗ trợ các tính năng vector search hiện đại để xử lý điều này.
✅ Mục tiêu: Kích hoạt chức năng tìm kiếm thông minh, nhanh chóng và chính xác cho chatbot.

✅ Đáp án đúng:
Create and populate a column of product description embeddings on the product table and perform an approximate nearest neighbor search using the customer’s search text.

🛠️ Lý do lựa chọn đáp án đúng (dựa trên kiến thức cập nhật đến 2026):

  • Phương án này sử dụng embeddings (vector biểu diễn ngữ nghĩa của văn bản) được tạo từ mô hình AI như Vertex AI Embeddings, lưu trữ trong một cột vector trên bảng sản phẩm trong Cloud SQL for MySQL.
  • Sau đó, thực hiện Approximate Nearest Neighbor (ANN) search trên vector của text tìm kiếm từ khách hàng để tìm sản phẩm có độ tương đồng cao nhất về ý nghĩa (semantic similarity), không phụ thuộc vào từ khóa chính xác.
  • Lợi ích: Hiệu suất cao (O(log n) thời gian query), hỗ trợ quy mô lớn, và phù hợp với chatbot cần hiểu ngôn ngữ tự nhiên. Cloud SQL for MySQL đã hỗ trợ vector indexes và ANN search từ phiên bản 8.0+ (cập nhật 2024-2026), tích hợp trực tiếp với Vertex AI Vector Search.
  • Đây là best practice cho Retrieval-Augmented Generation (RAG) trong chatbot.

📘 Tài liệu tham khảo:

❌ Phân tích tất cả các phương án

  • Create a stored procedure that uses a regular expression to match the customer’s search text to values in the product description column.
    ❌ Sai vì: Regex chỉ khớp mẫu ký tự chính xác (pattern matching), không hiểu ngữ nghĩa hay đồng nghĩa (ví dụ: "red shoe" không khớp "giày đỏ"). Hiệu suất kém với dữ liệu lớn, dễ lỗi với text tự do, và không phù hợp cho chatbot semantic. Không hỗ trợ ANN hay embeddings.

  • Create and populate a column of product description embeddings on the product table and perform an approximate nearest neighbor search using the customer’s search text.
    ✅ Đúng vì: Như đã giải thích ở trên, đây là cách hiện đại nhất, tận dụng vector embeddings và ANN search trong Cloud SQL for MySQL để đạt độ chính xác cao về ý nghĩa văn bản.

  • Use the LIKE operator to match the customer’s search text to the product description and return similar rows.
    ❌ Sai vì: LIKE chỉ tìm từ khóa con (substring matching, ví dụ: '%red%'), không đánh giá độ tương đồng ngữ nghĩa. Dẫn đến kết quả kém (false positives/negatives), hiệu suất chậm với full-table scan trên dữ liệu lớn, không lý tưởng cho freeform text.

  • Create a SQL script that compares the product description and the customer’s search text by using the SOUNDEX function.
    ❌ Sai vì: SOUNDEX chỉ khớp âm thanh tương tự (phonetic matching cho tên riêng, lỗi chính tả), không xử lý ngữ nghĩa hay mô tả phức tạp (ví dụ: không phân biệt "apple fruit" vs "Apple phone"). Giới hạn ở MySQL, không hiệu quả cho chatbot text tự do.

🔍 Kết luận: Phương án đúng tận dụng công nghệ AI vector mới nhất của Google Cloud, đảm bảo chatbot hoạt động mượt mà và thông minh! 🚀

Câu 167
You are migrating an on-premises online transactional process (OLTP) PostgreSQL database to Google Cloud. You want to reduce the administrative overhead on database maintenance activities, such as vacuum and memory tuning. You are also planning to introduce analytic use cases in this database. You need the migration to have minimal schema and application changes. What should you do?
  1. A Use Spanner with PGAdapter.
  2. B Use Cloud SQL for PostgreSQL.
  3. C Use AlloyDB for PostgreSQL.
  4. D Deploy a self-managed PostgreSQL database on Compute Engine.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc di chuyển (migrate) một cơ sở dữ liệu PostgreSQL OLTP (Online Transactional Processing) từ on-premises lên Google Cloud. Các yêu cầu chính bao gồm:

  • Giảm gánh nặng quản trị (administrative overhead) cho các hoạt động bảo trì như vacuum (dọn dẹp dữ liệu chết) và memory tuning (tối ưu hóa bộ nhớ).
  • Giới thiệu các use case phân tích (analytic use cases) trên cùng cơ sở dữ liệu này.
  • Migration với thay đổi schema và ứng dụng tối thiểu (minimal schema and application changes), nghĩa là giữ nguyên tính tương thích cao với PostgreSQL gốc.

📘 Bối cảnh kiến thức cập nhật (đến 2026): AlloyDB for PostgreSQL là dịch vụ PostgreSQL managed thế hệ mới của Google Cloud (ra mắt 2022, cập nhật lớn năm 2024-2025 với hỗ trợ columnar engine và zero-ETL cho analytics). Nó vượt trội trong OLTP cao hiệu suất, tự động hóa bảo trì (autovacuum thông minh, auto-tuning), và hỗ trợ analytic workloads mà không cần thay đổi lớn.

Nguồn tham khảo:

✅ Đáp án đúng: Use AlloyDB for PostgreSQL

Lý do lựa chọn:

  • AlloyDB for PostgreSQL là lựa chọn hoàn hảo vì nó là dịch vụ fully managed PostgreSQL với tương thích 100% PostgreSQL (hỗ trợ PostgreSQL 15+ đến 2026), cho phép migration không thay đổi schema hay ứng dụng (binary compatibility).
  • Giảm administrative overhead: Tự động hóa vacuum (parallel vacuum nhanh gấp 10x), auto-tuning memory/CPU, và scaling tự động mà không cần can thiệp thủ công. ✅
  • Hỗ trợ analytic use cases: Tích hợp columnar engine (storage columnar cho query analytics nhanh), vector search cho AI/ML, và zero-ETL integration với BigQuery/Bigtable cho phân tích real-time mà không cần duplicate data. 🛠️
  • Hiệu suất OLTP cao gấp 4x so với Cloud SQL, lý tưởng cho transactional workloads.

❌ Giải thích tất cả các phương án

  • Use Spanner with PGAdapter
    ❌ Sai: Spanner là cơ sở dữ liệu SQL phân tán toàn cầu (global distributed SQL), không phải PostgreSQL native. PGAdapter chỉ là lớp tương thích (compatibility layer) cho phép kết nối PostgreSQL client, nhưng yêu cầu thay đổi schema lớn (không hỗ trợ extensions PostgreSQL đầy đủ, foreign keys hạn chế). Không giảm overhead bảo trì (vẫn cần tuning thủ công), và không tối ưu cho analytic trên cùng DB (Spanner tập trung OLTP/OLAP global). Không phù hợp minimal changes.

  • Use Cloud SQL for PostgreSQL
    ❌ Sai: Cloud SQL là managed PostgreSQL tốt cho OLTP, tự động hóa một phần vacuum/tuning, nhưng không mạnh analytic use cases (query analytics chậm hơn AlloyDB do thiếu columnar engine). Vẫn cần tuning thủ công nhiều hơn (flags thủ công cho memory), và migration đơn giản nhưng không giới thiệu analytics seamless như AlloyDB. Phù hợp basic OLTP, không phải hybrid OLTP+analytics.

  • Use AlloyDB for PostgreSQL
    ✅ Đúng (như đã giải thích chi tiết ở trên): Đáp ứng toàn bộ yêu cầu với managed PostgreSQL cao cấp, zero-downtime migration via Database Migration Service (DMS), và analytics tích hợp.

  • Deploy a self-managed PostgreSQL database on Compute Engine
    ❌ Sai: Đây là triển khai tự quản lý (self-managed) trên VM, tăng gánh nặng administrative overhead cao nhất (phải tự vacuum, tuning memory, patching, backup thủ công). Không giảm overhead, migration có thể minimal nhưng không hỗ trợ analytic tự động, và tốn kém vận hành. Không khuyến nghị cho managed cloud migration. 🚫

Câu 168
You are developing a Python application that will connect to AlloyDB for PostgreSQL as the backend datastore. Your organization’s security requirements do not allow the use of usernames and passwords for database authentication. How should you develop your application?
  1. A Use any PostgreSQL-compatible Python client. Connect to the AlloyDB cluster by using Identity-Aware Proxy (IAP).
  2. B Use the AlloyDB Python connector. Use automated IAM authentication for connectivity.
  3. C Use the AlloyDB Python connector. Enforce SSL connectivity to AlloyDB by using the gcloud alloydb instance update command with the --ssl-mode=ENCRYPTED_ONLY option.
  4. D Use any PostgreSQL-compatible Python client. Use a service account name and credential as the username and password respectively during connection.
Xem giải thích

🧩 Phân tích chi tiết nội dung câu hỏi

Câu hỏi tập trung vào việc phát triển ứng dụng Python kết nối với AlloyDB for PostgreSQL (dịch vụ cơ sở dữ liệu PostgreSQL được quản lý bởi Google Cloud) làm backend datastore. Yêu cầu bảo mật của tổ chức không cho phép sử dụng username và password để xác thực cơ sở dữ liệu. Do đó, cần tìm cách phát triển ứng dụng sao cho tránh hoàn toàn việc sử dụng mật khẩu, đồng thời đảm bảo kết nối an toàn và tuân thủ các tính năng của AlloyDB.

AlloyDB hỗ trợ xác thực IAM (Identity and Access Management) tự động, đặc biệt qua AlloyDB Python connector chuyên dụng, giúp ứng dụng sử dụng quyền IAM của service account mà không cần hardcode username/password. Đây là phương pháp khuyến nghị theo tài liệu chính thức của Google Cloud (cập nhật đến 2026, với AlloyDB phiên bản mới nhất hỗ trợ IAM database authentication tự động).

📘 Tài liệu tham khảo:

✅ Đáp án đúng và lý do lựa chọn

Đáp án đúng: Use the AlloyDB Python connector. Use automated IAM authentication for connectivity.

Lý do:

  • AlloyDB cung cấp AlloyDB Python connector chuyên biệt (dựa trên pg8000), hỗ trợ automated IAM authentication tự động. Connector này sử dụng quyền IAM của service account đang chạy ứng dụng để tạo ephemeral token (mã thông báo tạm thời) làm username cho kết nối PostgreSQL, hoàn toàn không cần password.
  • Phương pháp này tuân thủ yêu cầu bảo mật cao nhất, dễ tích hợp và được Google khuyến nghị cho các ứng dụng Python. Không dùng connector thông thường vì chúng yêu cầu cấu hình thủ công phức tạp hơn.

🛠️ Giải thích tất cả các phương án (đúng/sai)

Dưới đây là phân tích chi tiết từng lựa chọn. Tôi giữ nguyên nội dung văn bản gốc bằng tiếng Anh, chỉ giải thích lý do đúng/sai bằng tiếng Việt:

  • ❌ Use any PostgreSQL-compatible Python client. Connect to the AlloyDB cluster by using Identity-Aware Proxy (IAP).
    Sai vì: IAP chỉ là lớp proxy TCP bảo mật kết nối mạng (sử dụng OAuth 2.0 cho truy cập), nhưng không thay thế xác thực database. Client PostgreSQL thông thường (như psycopg2) vẫn cần username/password để authenticate với AlloyDB. IAP không giải quyết yêu cầu tránh password.

  • ✅ Use the AlloyDB Python connector. Use automated IAM authentication for connectivity.
    Đúng vì: Như đã giải thích ở phần đáp án đúng. Connector này tự động xử lý IAM token làm username, không cần password, và được thiết kế dành riêng cho AlloyDB.

  • ❌ Use the AlloyDB Python connector. Enforce SSL connectivity to AlloyDB by using the gcloud alloydb instance update command with the --ssl-mode=ENCRYPTED_ONLY option.
    Sai vì: Lệnh gcloud này chỉ enforce SSL mã hóa kết nối (bảo mật dữ liệu truyền), nhưng không liên quan đến authentication. Vẫn cần username/password để xác thực, vi phạm yêu cầu bảo mật. SSL chỉ là mã hóa, không thay thế auth.

  • ❌ Use any PostgreSQL-compatible Python client. Use a service account name and credential as the username and password respectively during connection.
    Sai vì: Sử dụng service account JSON key như password chính là hardcode credentials, vi phạm nghiêm trọng yêu cầu "không dùng username/password". Đây không phải IAM auth thực thụ mà là cách không an toàn, dễ bị lộ key.

📚 Lời khuyên bổ sung

🛡️ Để triển khai thực tế: Gán IAM role roles/alloydb.client cho service account, cài đặt connector qua pip install alloydb-connector, và sử dụng alloydb.connect() với IAM settings. Kiểm tra logs AlloyDB để xác nhận kết nối IAM thành công. Phương pháp này vẫn áp dụng đến 2026 với các bản cập nhật AlloyDB 2.x.

Câu 169
Your company is migrating from an on-premises database to a single-region Spanner instance. The current database supports 40,000 reads each second, and 7,000 writes each second, at 1 KB row sizes at peak. You need to determine the most cost-effective size for the Spanner instance to handle the equivalent current workload. What should you do?
  1. A Select a 4-node Spanner instance.
  2. B Select a 6-node Spanner instance.
  3. C Select a 1-node Spanner instance.
  4. D Recommend a multi-region Spanner instance.
Xem giải thích

🧩 Phân tích chi tiết câu hỏi trắc nghiệm về Google Cloud Spanner

📘 Nội dung câu hỏi được giải thích rõ ràng:
Câu hỏi mô tả tình huống công ty đang di chuyển cơ sở dữ liệu từ on-premises sang một instance Spanner single-region (cấu hình khu vực đơn lẻ).
Workload hiện tại tại peak:

  • 40.000 reads/giây (mỗi row 1 KB).
  • 7.000 writes/giây (mỗi row 1 KB).
    Nhiệm vụ là xác định kích thước instance Spanner tiết kiệm chi phí nhất (most cost-effective) để xử lý workload tương đương.
    🛠️ Các yếu tố chính cần tính toán: Theo tài liệu Google Cloud Spanner (cập nhật mới nhất 2024-2026), mỗi node trong Spanner regional config cung cấp:
  • ~10.000 reads/giây (1 KB row).
  • ~2.000 writes/giây (1 KB row).
    Ta phải tính số node tối thiểu để đáp ứng cả reads VÀ writes (lấy giá trị lớn hơn), vì writes thường là bottleneck. Spanner tính phí theo node-giờ, nên chọn đúng số node là tiết kiệm nhất.

✅ Đáp án đúng:
[ĐÚNG] Select a 4-node Spanner instance.
Lý do lựa chọn (tính toán chi tiết):

  • Reads: 40.000 / 10.000 = 4 nodes.
  • Writes: 7.000 / 2.000 = 3.5 nodes → làm tròn lên 4 nodes (Spanner yêu cầu số nguyên).
    4 nodes vừa đủ xử lý peak workload, không dư thừa → tiết kiệm chi phí nhất. Nếu ít hơn sẽ thiếu capacity, nhiều hơn sẽ tốn kém không cần thiết.

🔍 Giải thích tất cả các phương án (đúng/sai):

  • ✅ [ĐÚNG] Select a 4-node Spanner instance.
    Như trên: Tính toán chính xác khớp capacity (reads: 40k → 4 nodes; writes: 7k → 4 nodes). Đây là lựa chọn tối ưu cho single-region, tránh over-provisioning.

  • ❌ [SAI] Select a 6-node Spanner instance.
    6 nodes cung cấp 60.000 reads/s và 12.000 writes/s → dư thừa capacity (over-provision 50%). Dẫn đến chi phí cao hơn 50% so với 4 nodes, không "most cost-effective".

  • ❌ [SAI] Select a 1-node Spanner instance.
    1 node chỉ hỗ trợ 10.000 reads/s và 2.000 writes/s → không đủ (thiếu 30.000 reads/s và 5.000 writes/s). Workload sẽ bị throttle hoặc lỗi, không đáp ứng yêu cầu.

  • ❌ [SAI] Recommend a multi-region Spanner instance.
    Câu hỏi chỉ định single-region, multi-region (như nam-eur3) đắt hơn ~2-3 lần (do replication cross-region), và không cần thiết cho workload này (không yêu cầu HA đa vùng). Vi phạm yêu cầu "single-region".

📚 Tài liệu tham khảo (cập nhật mới nhất 2026):

💡 Lời khuyên từ Professional Cloud Database Engineer: Sử dụng Spanner Capacity Planner tool trong Console để verify trước khi provision! 🚀