- vừa được xem lúc

Sử dụng các tính năng NoSQL trong PostgreSQL

0 0 2

Người đăng: Thái Thịnh

Theo Viblo Asia

Bạn có thực sự cần sử dụng cơ sở dữ liệu NoSQL? Hay một cơ sở dữ liệu quan hệ có thể đáp ứng các yêu cầu dữ liệu bán cấu trúc của bạn?

PostgreSQL là một cơ sở dữ liệu quan hệ rất đầy đủ tính năng và phổ biến — nhưng bạn có biết rằng nó cũng hỗ trợ nhiều chức năng như một cơ sở dữ liệu phi quan hệ?

PostgreSQL hỗ trợ dữ liệu phi quan hệ như thế nào?

PostgreSQL hỗ trợ dữ liệu phi quan hệ theo 3 cách khác nhau:

  • XML
  • JSON
  • JSONB

XML

PostgreSQL hỗ trợ XML thông qua kiểu dữ liệu xml gốc. Bạn có thể lưu trữ và truy vấn dữ liệu XML bằng XPath.

CREATE TABLE products ( id SERIAL PRIMARY KEY, data XML
); INSERT INTO products (data)
VALUES ( '<product><name>Smartphone</name><price>999.99</price></product>'
); -- Extract the product name using XPath
SELECT xpath('//name/text()', data) AS name
FROM products;

Khi nào dùng XML?

Rất hữu ích khi bạn tích hợp với hệ thống cũ hoặc API bên ngoài vẫn dùng định dạng XML. Tuy nhiên, so với JSON thì nó kém hiệu quả hơn trong hầu hết các tình huống hiện đại.

JSON

PostgreSQL hỗ trợ kiểu dữ liệu json để lưu trữ cấu trúc JSON dưới dạng văn bản thuần (plain text). Rất phù hợp cho dữ liệu bán cấu trúc.

CREATE TABLE users ( id SERIAL PRIMARY KEY, profile JSON
); INSERT INTO users (profile)
VALUES ( '{ "name": "John Doe", "age": 21, "skills": ["golang", "typescript", "clickhouse"] }'
); -- Querying JSON data
SELECT profile->>'name' AS name, profile->'skills' AS skills
FROM users;

Ưu điểm của JSON:

Dữ liệu được giữ nguyên định dạng ban đầu, bao gồm cả khoảng trắng và thứ tự khóa — điều này hữu ích cho logging hoặc lưu dữ liệu thô. Tuy nhiên, khả năng truy vấn không tối ưu dù tốc độ ghi rất tốt.

JSONB

jsonb là viết tắt của JSON dạng nhị phân (binary JSON). Nó lưu trữ JSON ở định dạng nhị phân — tối ưu hơn cho việc lập chỉ mục và truy vấn.

CREATE TABLE events ( id SERIAL PRIMARY KEY, metadata JSONB
); INSERT INTO events (metadata)
VALUES ( '{ "type": "click", "user_id": 42, "timestamp": "2025-06-18T09:00:00Z" }'
); -- Filter events by user_id
SELECT *
FROM events
WHERE metadata->>'user_id' = '42'; -- Create a GIN index for better performance
CREATE INDEX idx_metadata ON events USING GIN (metadata);

Ưu điểm của JSONB:

Hỗ trợ chỉ mục GIN (Generalized Inverted Index), giúp tăng tốc truy vấn tài liệu JSON lớn. Ngoài ra, nó cũng loại bỏ các khóa trùng và bỏ qua khoảng trắng. Nếu GIN chưa đủ, bạn có thể sử dụng chỉ mục B-Tree hoặc Hash — dù hiệu quả có thể không cao bằng.

So sánh tổng quan

image.png

Kết luận

PostgreSQL cung cấp một bộ công cụ mạnh mẽ để xử lý dữ liệu bán cấu trúc, giúp nó có thể đảm nhận vai trò như một cơ sở dữ liệu NoSQL khi cần. Nếu bạn đang lên kế hoạch xây dựng một hệ thống mới có nhu cầu xử lý dữ liệu bán cấu trúc và PostgreSQL đã nằm trong tech stack của nhóm bạn, thì nó hoàn toàn là một lựa chọn đáng cân nhắc — vừa tiết kiệm chi phí học công cụ mới, vừa không tăng độ phức tạp hệ thống.

Tuy nhiên, cũng cần lưu ý rằng có nhiều trường hợp bạn thực sự cần một cơ sở dữ liệu NoSQL chuyên biệt như MongoDB, Cassandra, hoặc Scylla. Vì vậy, hãy luôn đánh giá kỹ ưu và nhược điểm của từng lựa chọn trước khi đưa ra quyết định kiến trúc.

Bình luận

Bài viết tương tự

- vừa được xem lúc

The Twelve-Factor App, cẩm nang gối đầu giường trong xây dựng application (Phần 1)

Giới thiệu. Ngày nay các phần mềm được triển khai dưới dạng các dịch vụ, chúng được gọi là các web apps hay software-as-a-service (SaaS).

0 0 47

- vừa được xem lúc

8 Sai lầm phổ biến khi lập trình Android

1. Hard code.

0 0 207

- vừa được xem lúc

Popular interview question: What is the difference between Process and Thread? 10 seconds a day

Video được đăng tại channel Tips Javascript

0 0 45

- vừa được xem lúc

Thuật toán và ứng dụng - P1

Mục đích series. . Những bài toán gắn liền với thực tế. Từ đó thấy được tầm quan trọng của thuật toán trong lập trình.

0 0 48

- vừa được xem lúc

Tác dụng của Docker trong quá trình học tập

Docker bây giờ gần như là kiến thức bắt buộc đối với các anh em Dev và Devops, nhưng mà đối với sinh viên IT nói chung vẫn còn khá mơ hồ và không biết tác dụng thực tế của nó. Hôm nay mình sẽ chia sẻ

0 0 55

- vừa được xem lúc

Làm giàu trong ngành IT

Hầu như mọi người đều đi làm để kiếm tiền, ít người đi làm vì thấy cái nghề đó thú vị lắm. Bây giờ vất cho mình 100 tỷ bảo mình bỏ nghề thì mình cũng bỏ thôi.

0 0 58