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

[POSTGRES] Tìm Hiểu BRIN Index Trong Database

0 0 5

Người đăng: Open Dev

Theo Viblo Asia

Postgres BRIN(Block Range Index) Index - Tối ưu hiệu năng với Storage nhỏ nhất

Trong bài viết này mình tập trung giải thích loại index BRIN (Block Range Index). Mục đích sử dụng và nó có những điểm nổi bật hơn những loại index khác ở điểm nào. Sẽ demo sql đơn giản để so sánh với các index phổ biến khác trong postgresql

Block Range Index Là gì.

Block Range Index được viết tắt là BRIN, trong postgres block là 1 đơn vị của việc storage và được sét mặc định là 8kb. BRIN đơn giản là một chuỗi block (mặc định là 128kb). BRIN index là 1 cách dễ dàng để tăng tóc độ, nó đặc biệt hữu ích cho data tuần tự hoặc sắp xếp các đặc điểm như kiểu time-series hoặc một kiểu sắp xếp.

Một vài điểm của BRIN

  • sẽ hoạt động tốt khi data được sắp xếp hoặc khi scans 1 cách tuần tự (tốt hơn khi index scans)
  • thay vì lưu trữ độc lập mỗi record, BRIN sẽ lưu trữ theo từng block-level summaries, điều này làm size sẽ nhỏ hơn các loại index khác
  • mỗi block sẽ chứa 1 khoảng giá trị, index sẽ lưu giá trị min và max tương ứng với mỗi block.
  • sẽ chia table vào trong những khối và lưu trữ thông tin cho mỗi khối.

Create BRIN index

  • để tạo BRIN ta chỉ cần sử dụng CREATE INDEX với USING BRIN
CREATE INDEX ind_column_timestamp ON table_name USING BRIN (column_name);

Khi nào chúng ta cần sử dụng nó.

Rất nhiều ứng dụng ngày nay luôn muốn record data từ devices, tracking-information, real-time transaction banking và tổng thể các nguồn khác - tất cả điều chung 1 thành phần là timestamp, và timestamp là luôn luôn tăng. Timestamps là cực kì hữu ích, hỗ trợ rất lớn các loại cơ bản như phân tích, query and ...

BRIN không chỉ có hiệu năng tốt hơn BTree mà còn tiết kiệm hơn 99% của space of disk.

demo

  • để bắt đầu demo thì cần phải có 1 postgres
  • Tạo 1 table tracking
CREATE TABLE ticketing ( id BIGSERIAL, tracking_id VARCHAR(32), count int, created_at timestamptz NOT NULL
);

insert data mẫu

DO $FN$ BEGIN FOR counter IN 1..3000000 LOOP insert into trackings(count, tracking_id, created_at ) values( floor(random() * 10 + 1)::int, uuid_in(overlay(overlay(md5(random()::text || ':' || random()::text) placing '4' from 13) placing to_hex(floor(random()*(11-8+1) + 8)::int)::text from 17)::cstring), now()::timestamptz ); END LOOP; END; $FN$
  • create btree index:
CREATE INDEX in_trackings_btree ON trackings(created_at);

select size disk space:

SELECT pg_size_pretty(pg_relation_size('in_trackings_btree'));

kết quả:

  • create brin index:
CREATE INDEX in_trackings_brin ON trackings USING brin(created_at);

select size disk space:

SELECT pg_size_pretty(pg_relation_size('in_trackings_brin'));

kết quả:

Kết luận.

  • BRIN sẽ mang lại hiệu năng tốt hơn nếu data sequence hoặc sắp xếp
  • Tối ưu về disk space hơn.

Bình luận

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

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

Performance Optimization 105: Database bottleneck - Đuổi bắt kẻ tội đồ

Hành trình đuổi bắt giáo sư Moriarty của thế giới bottleneck: database. Cuộc chiến không hồi kết này rút cục sẽ ra sao? Liệu mọi chuyện có kết thúc tại thác Reichenback không hay Moriarty sẽ mãi là bóng ma ám ảnh service của chúng ta mãi.

0 0 47

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

003: Hiểu về Index để tăng performance với PostgreSQL P2

Bài viết nằm trong series Performance optimization với PostgreSQL. . . B-Tree index.

0 0 502

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

004: Hiểu về Index để tăng performance với PostgreSQL P3

Bài viết nằm trong series Performance optimization với PostgreSQL. . 1) What. Trước khi đi vào chi tiết, cùng xem lại nhiệm vụ, tính chất của hash function:.

0 0 105

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

Case Study tối ưu sử dụng Partition và Index để tối ưu câu lệnh từ 30 phút xuống còn 0.01s như thế nào?

Đây là một bài toán tối ưu thực tế , tôi đã áp dụng kỹ thuật tối ưu này cho rất nhiều doanh nghiệp lớn: hệ thống Core chứng khoán, cơ sở dữ liệu core billing của đơn vị viễ

0 0 23

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

[POSTGRES] Tìm Hiểu Nâng Cao Về Index Trong Database

indexing trong postgres là một tiến trình tạo một data-structure hỗ trợ cho việc optimized để search cũng như retrieve data từ table. khi một câu query được thực hiện, postgres sẽ kiểm tra xem indexes

0 0 4

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

Setup cho dự án NestJS - Phần 10: Indexes trong MongoDB 📑

Đây là bài viết nằm trong Series NestJS thực chiến, các bạn có thể xem toàn bộ bài viết ở link: https://viblo.asia/s/nestjs-thuc-chien-MkNLr3kaVgA.

0 0 4