Có vấn đề về độ dài khóa
Chìa khóa càng lớn, càng có nhiều không gian để lưu trữ. JSONB không làm gì đặc biệt đối với các khóa.
Kiểm tra diễn viên
Dữ liệu mẫu
# CREATE TABLE foo AS SELECT '{"f":true}'::jsonb FROM generate_series(1,1e6);
SELECT 1000000
# CREATE TABLE bar AS SELECT '{"very_long_key_not_premature_optimization_at_all":true}'::jsonb FROM generate_series(1,1e6);
SELECT 1000000
Kích thước bảng
Bây giờ hãy nhìn vào các bảng
# \dt+ foo;
List of relations
Schema | Name | Type | Owner | Size | Description
--------+------+-------+----------+-------+-------------
public | foo | table | ecarroll | 42 MB |
(1 row)
test=# \dt+ bar;
List of relations
Schema | Name | Type | Owner | Size | Description
--------+------+-------+----------+-------+-------------
public | bar | table | ecarroll | 89 MB |
(1 row)
Mã nguồn
Bạn có thể thấy nó trong nguồn ở đây
str = TextDatumGetCString(in_datums[i * 2 + 1]);
len = strlen(str);
v.type = jbvString;
v.val.string.len = len;
Gia hạn ZSON
Bạn có thể xem xét kiểm tra tiện ích mở rộng ZSON cung cấp nén từ điển hàng ngang JSONB
ZSON là một phần mở rộng PostgreSQL để nén JSONB trong suốt. Nén dựa trên một từ điển chung của các chuỗi được sử dụng thường xuyên nhất trong các tài liệu JSONB cụ thể (không chỉ các khóa, mà cả các giá trị, các phần tử mảng, v.v.).
Trong một số trường hợp, ZSON có thể tiết kiệm một nửa dung lượng ổ đĩa của bạn và cung cấp cho bạn thêm khoảng 10% TPS. Bộ nhớ cũng được lưu lại. Xem tài liệu / điểm chuẩn.md. Tất cả mọi thứ phụ thuộc vào dữ liệu và khối lượng công việc của bạn mặc dù. Đừng tin bất kỳ điểm chuẩn nào, kiểm tra lại mọi thứ trên dữ liệu, cấu hình, phần cứng, khối lượng công việc và phiên bản PostgreQuery của bạn.