TL; DR: JSONB เบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบซเปเบเบฒเบเบเบฑเบเบเบฐเบเบฒ schema เบเบฒเบเบเปเปเบกเบนเบเบเปเบฒเบเบเบฒเบเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบเปเบเบเบเปเปเบกเบตเบเบฒเบเปเบชเบเบชเบฐเบฅเบฐเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบชเบญเบเบเบฒเบก.
เบเบฒเบเบเปเบฒเบชเบฐเปเบซเบเบต
เปเบซเปเบเบงเบเปเบฎเบปเบฒเบเบปเบเบเบปเบงเบขเปเบฒเบเบเบฅเบฒเบชเบชเบดเบเบเบญเบเบญเบฒเบเบเบฐเปเบเบฑเบเบเปเบฅเบฐเบเบตเบเบฒเบเบเปเบฒเปเบเปเบเบตเปเปเบเบปเปเบฒเปเบเปเบเบตเปเบชเบธเบเปเบเปเบฅเบเบเบญเบเบเบฒเบเบเปเปเบกเบนเบเบเบตเปเบเปเบฝเบงเบเปเบญเบ (เบเบฒเบเบเปเปเบกเบนเบ): เบเบงเบเปเบฎเบปเบฒเบกเบตเบซเบเปเบงเบเบเบฒเบ, เปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเบเบฐเบซเบเบฑเบเบเบธเบเบชเบปเบกเบเบฑเบ (เบเบธเบเบฅเบฑเบเบชเบฐเบเบฐ) เบเบญเบเบซเบเปเบงเบเบเบฒเบเบเบตเป. เปเบเปเบเปเปเปเบกเปเบเบเบธเบเบเบปเบงเบขเปเบฒเบเบญเบฒเบเบเบฐเบกเบตเบเบธเบเบชเบปเบกเบเบฑเบเบเบฝเบงเบเบฑเบ, เปเบฅเบฐเบเบธเบเบชเบปเบกเบเบฑเบเปเบเบตเปเบกเปเบเบตเบกเบญเบฒเบเบเบฐเบเบทเบเปเบเบตเปเบกเปเบเบญเบฐเบเบฒเบเบปเบ.
เบงเบดเบเบตเบเบตเปเบเปเบฒเบเบเบตเปเบชเบธเบเบเบตเปเบเบฐเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเปเบกเปเบเบเบฒเบเบชเปเบฒเบเบเปเบฅเปเบฒเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบฒเบเบเปเปเบกเบนเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบกเบนเบเบเปเบฒเบเบฑเบเบชเบดเบ, เปเบฅเบฐเบเบฝเบเปเบเปเบเบทเปเบกเบเปเปเบกเบนเบเบเบตเปเบเปเบฒเปเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบซเบเปเบงเบเบเบฒเบเบชเบฐเปเบเบฒเบฐ. เบเบดเปเบเปเบซเบเป! เบเบฑเบเบซเบฒเปเบเปเบฎเบฑเบเบเบฒเบเปเบเปเปเบ ... เบเบปเบเบเปเบงเบฒเบเบฒเบเบฐเบฅเบฒเบเบเบญเบเบเปเบฒเบเบกเบตเบเบฑเบเบเบถเบเบซเบผเบฒเบเบฅเปเบฒเบเปเบฅเบฐเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเบตเปเบกเบเบฑเบเบเบถเบเปเบซเบกเป.
เบเบดเบเบฒเบฅเบฐเบเบฒเบฎเบนเบเปเบเบ EAV (), เบกเบฑเบเปเบเบตเบเบเบทเปเบเปเบฅเบทเปเบญเบเป. เบเบฒเบเบฐเบฅเบฒเบเบซเบเบถเปเบเบเบฐเบเบญเบเบเปเบงเบเบซเบเปเบงเบเบเบฒเบ (เบเบฑเบเบเบถเบ), เบเบฒเบเบฐเบฅเบฒเบเบญเบทเปเบเบกเบตเบเบทเปเบเบฑเบเบชเบดเบ (เบเบธเบเบฅเบฑเบเบชเบฐเบเบฐ), เปเบฅเบฐเบเบฒเบเบฐเบฅเบฒเบเบเบตเบชเบฒเบก entities เบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบธเบเบฅเบฑเบเบชเบฐเบเบฐเบเบญเบเปเบเบปเบฒเปเบเบปเปเบฒเปเบฅเบฐเบเบฐเบเบญเบเบเปเบงเบเบกเบนเบเบเปเบฒเบเบญเบเบเบธเบเบฅเบฑเบเบชเบฐเบเบฐเปเบซเบผเบปเปเบฒเบเบฑเปเบเบชเปเบฒเบฅเบฑเบเบซเบเปเบงเบเบเบฒเบเบเบฐเบเบธเบเบฑเบ. เบเบตเปเปเบฎเบฑเบเปเบซเปเบเปเบฒเบเบกเบตเบเบงเบฒเบกเบชเบฒเบกเบฒเบเบเบตเปเบเบฐเบกเบตเบเบธเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบชเปเบฒเบฅเบฑเบเบงเบฑเบเบเบธเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบ, เปเบฅเบฐเบเบฑเบเปเบเบตเปเบกเบเบธเบเบชเบปเบกเบเบฑเบเปเบเบเบฒเบเบเบดเบเปเบเบเบเปเปเบกเบตเบเบฒเบเบเปเบฝเบเปเบเบเปเบเบเบชเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบ.
เบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบเปเบญเบเบเบฐเบเปเปเปเบเปเบเบฝเบเบเปเปเบเบงเบฒเบกเบเบตเปเบเปเบฒเบเปเปเบกเบตเบเปเปเบเบปเบเบเปเบญเบเบเบฒเบเบขเปเบฒเบเบเบญเบเบงเบดเบเบตเบเบฒเบ EVA. เบเบฑเปเบเบเบฑเปเบ, เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบปเบเบเบปเบงเบขเปเบฒเบ, เปเบเบทเปเบญเปเบซเปเปเบเปเบฎเบฑเบเบซเบเบถเปเบเบซเบผเบทเบซเบผเบฒเบเบซเบเปเบงเบเบเบฒเบเบเบตเปเบกเบต 1 attribute เปเบเปเบฅเบฐเบเบปเบ, 2 Joins เปเบกเปเบเบเปเบญเบเบเบฒเบเปเบเบเบฒเบเบชเบญเบเบเบฒเบก: เบเปเบฒเบญเบดเบเปเบกเปเบเปเบเบปเปเบฒเบฎเปเบงเบกเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบเบเบธเบเบฅเบฑเบเบชเบฐเบเบฐ, เบญเบฑเบเบเบตเบชเบญเบเปเบกเปเบเปเบเบปเปเบฒเบฎเปเบงเบกเบเบฑเบเบเบฒเบเบฐเบฅเบฒเบเบเปเบฒ. เบเปเบฒเบเบดเบเบดเบเบธเบเบเบปเบเบกเบต 2 เบเบธเบเบฅเบฑเบเบชเบฐเบเบฐ, เบเปเบญเบเบเบฒเบ 4 เปเบเบปเปเบฒเบฎเปเบงเบก! เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบธเบเบฅเบฑเบเบชเบฐเบเบฐเบเบฑเบเปเบปเบเปเบกเปเบเบเบทเบเปเบเบฑเบเบฎเบฑเบเบชเบฒเปเบงเปเปเบเบเบเบปเบเบเบฐเบเบดเปเบเบฑเบเบชเบฐเบเบฃเบดเบ, เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเบเบฒเบเบชเบปเปเบเบชเบฑเบเบเบฒเบเบเบฐเปเบเบเบชเปเบฒเบฅเบฑเบเบเบฑเบเบเบปเบเปเบเปเบฎเบฑเบ เปเบฅเบฐเบเบฐเปเบซเบเบ WHERE. เบเปเบฒเบเปเบฒเบเบเบฝเบเปเบเบเบชเบญเบเบเบฒเบกเบซเบผเบฒเบ, เบเบตเปเปเบกเปเบเบเปเบญเบเบเปเบฒเบเปเบชเบเปเบเบดเบเปเบเปเบเปเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบเบฑเบเบเบฐเบเบฒเบเบญเบ.
เปเบเบดเบเบงเปเบฒเบเบฐเบกเบตเบเปเปเบเบปเบเบเปเบญเบเบเบตเปเบเบฑเบเปเบเบเปเบซเบผเบปเปเบฒเบเบตเป, EAV เปเบเปเบเบทเบเบเปเบฒเปเบเปเบกเบฒเบเบปเบเบเบฒเบเปเบเบทเปเบญเปเบเปเปเบเบเบฑเบเบซเบฒเบเบฐเปเบเบเปเบซเบผเบปเปเบฒเบเบตเป. เปเบซเบผเบปเปเบฒเบเบตเปเปเบกเปเบเบเปเปเบเบปเบเบเปเบญเบเบเบตเปเบซเบผเบตเบเบฅเปเบฝเบเบเปเปเปเบเป, เปเบฅเบฐเบเปเปเบกเบตเบเบฒเบเปเบฅเบทเบญเบเบเบตเปเบเบตเบเบงเปเบฒ.
เปเบเปเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ "เปเบเบฑเบเปเบเปเบฅเบขเบต" เปเบซเบกเปเปเบเปเบเบฒเบเบปเบเบขเบนเปเปเบ PostgreSQL ...
เปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบ PostgreSQL 9.4, เบเบฐเปเบเบเบเปเปเบกเบนเบ JSONB เปเบเปเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเปเบเบเบฒเบเปเบเบฑเบเบเปเปเบกเบนเบเบเบนเป JSON. เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฒเบเปเบเบฑเบเบฎเบฑเบเบชเบฒ JSON เปเบเบฎเบนเบเปเบเบเบเบตเปเปเบเบเบเบปเบเบเบฐเบเบดเบเบฐเปเบเปเบเบทเปเบเบเบตเปเปเบฅเบฐเปเบงเบฅเบฒเบซเบผเบฒเบเบเปเบงเบฒ JSON เบเปเปเบเบงเบฒเบกเบเปเบฒเบกเบฐเบเบฒเปเบฅเบฑเบเบเปเบญเบ, เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเบกเบฑเบเปเบกเปเบเปเบงเบเบงเปเบฒเบซเบผเบฒเบ. JSONB เบเบฑเบเบชเบฐเบซเบเบฑเบเบชเบฐเบซเบเบนเบเบเบฒเบเบเบฑเบเบชเบฐเบเบต, เปเบเบดเปเบเปเบฎเบฑเบเปเบซเปเบเบฒเบเบชเบญเบเบเบฒเบกเปเบงเบเบถเปเบ.
เบเบฐเปเบเบเบเปเปเบกเบนเบ JSONB เบเปเบงเบเปเบซเปเบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบเปเบฝเบเบฎเบนเบเปเบเบ EAV เบเบตเปเบซเบเบธเปเบเบเบฒเบเปเบเปเปเบเบเบเบฒเบเปเบเบตเปเบกเบเบฑเบ JSONB เบเบฝเบเบญเบฑเบเบเบฝเบงเปเบชเปเบเบฒเบเบฐเบฅเบฒเบเบซเบปเบงเปเปเบงเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ, เปเบฎเบฑเบเปเบซเปเบเบฒเบเบญเบญเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบเบเปเบฒเบเบเบถเปเบเบซเบผเบฒเบ. เปเบเปเบซเบผเบฒเบเบเบปเบเปเบเปเบเบฝเบเบงเปเบฒเบเบตเปเบเบงเบเบเบฐเบกเบฒเบเปเบญเบกเบเบฑเบเบเบฒเบเบซเบผเบธเบเบฅเบปเบเบเบญเบเบเบปเบเบเบฐเบฅเบดเบ ... เบเบฑเปเบเปเบกเปเบเปเบซเบเบเบปเบเบเบตเปเบเปเบญเบเบเบฝเบเบเบปเบเบเบงเบฒเบกเบเบตเป.
เบเบฒเบโเบเบฑเปเบโเบเปเบฒโเบเบฒเบโเบเปเปโเบกเบนเบโเบเบฒเบโเบเบปเบโเบชเบญเบโ
เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบฝเบเบเบฝเบเบเบตเป, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบชเปเบฒเบเบเบฒเบเบเปเปเบกเบนเบเปเบเบเบฒเบเบเบดเบเบเบฑเปเบเปเบซเบกเปเบเบญเบ PostgreSQL 9.5 เปเบเบเบฒเบเบเปเปเบชเปเบฒเบ $80. Ubuntu 14.04 เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฒเบฅเบฒเบกเบดเปเบเบตเบเบฒเบเบขเปเบฒเบเปเบ postgresql.conf เบเปเบญเบเปเบเปเปเบฅเปเบ script เปเบเบเปเบเป psql. เบเบฒเบเบฐเบฅเบฒเบเบเปเปเปเบเบเบตเปเปเบเปเบเบทเบเบชเปเบฒเบเบเบทเปเบเปเบเบทเปเบญเบเปเบฒเบชเบฐเปเบซเบเบตเบเปเปเบกเบนเบเปเบเบฎเบนเบเปเบเบ EAV:
CREATE TABLE entity (
id SERIAL PRIMARY KEY,
name TEXT,
description TEXT
);
CREATE TABLE entity_attribute (
id SERIAL PRIMARY KEY,
name TEXT
);
CREATE TABLE entity_attribute_value (
id SERIAL PRIMARY KEY,
entity_id INT REFERENCES entity(id),
entity_attribute_id INT REFERENCES entity_attribute(id),
value TEXT
);
เบเปเบฒเบเบฅเบธเปเบกเบเบตเปเปเบกเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบตเปเบเปเปเบกเบนเบเบเบฝเบงเบเบฑเบเบเบฐเบเบทเบเปเบเบฑเบเปเบงเป, เปเบเปเบกเบตเบเบธเบเบฅเบฑเบเบชเบฐเบเบฐเปเบเบเบฑเบเบเบฐเปเบเบ JSONB - เบเบธเบเบชเบปเบกเบเบฑเบ.
CREATE TABLE entity_jsonb (
id SERIAL PRIMARY KEY,
name TEXT,
description TEXT,
properties JSONB
);
เปเบเบดเปเบเบเปเบฒเบเบเบงเปเบฒเบซเบผเบฒเบ, เบเปเปเปเบกเปเบเบเป? เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบกเบฑเบเบเบทเบเปเบเบตเปเบกเปเบเบปเปเบฒเปเบเบเบฒเบเบฐเบฅเบฒเบ entity (เบเบดเบเบดเบเบธเบเบเบปเบ & entity_jsonb) 10 เบฅเปเบฒเบเบเบฑเบเบเบถเบ, เปเบฅเบฐเบเบฒเบกเบเบงเบฒเบกเปเบซเบกเบฒเบฐเบชเบปเบก, เบเบฒเบเบฐเบฅเบฒเบเปเบกเปเบเปเบเบฑเบกเปเบเบเปเบงเบเบเปเปเบกเบนเบเบเบฝเบงเบเบฑเบเปเบเบเปเบเปเบฎเบนเบเปเบเบ EAV เปเบฅเบฐเบงเบดเบเบตเบเบฒเบเบเบตเปเบกเบตเบเบฑเบ JSONB - entity_jsonb.properties. เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเปเปเบกเบนเบเบซเบผเบฒเบเบเบฐเปเบเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเปเบเบเบฑเบเบเบฒเบเบธเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบฑเบเบซเบกเบปเบ. เบเบปเบงเบขเปเบฒเบเบเปเปเบกเบนเบ:
{
id: 1
name: "Entity1"
description: "Test entity no. 1"
properties: {
color: "red"
lenght: 120
width: 3.1882420
hassomething: true
country: "Belgium"
}
}เบเบฑเปเบเบเบฑเปเบเปเบเบเบฑเบเบเบธเบเบฑเบเบเบงเบเปเบฎเบปเบฒเบกเบตเบเปเปเบกเบนเบเบเบฝเบงเบเบฑเบเบชเปเบฒเบฅเบฑเบเบเบฑเบเบชเบญเบเบเบฒเบเปเบฅเบทเบญเบ. เบกเบฒเปเบฅเบตเปเบกเบเบฝเบเบเบฝเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเปเบเบเปเบญเบเปเบฎเบฑเบเบงเบฝเบ!
เปเบฎเบฑเบเปเบซเปเบเบฒเบเบญเบญเบเปเบเบเบเบญเบเบเปเบฒเบเบเปเบฒเบเบเบฒเบ
เบกเบฑเบเปเบเปเบเบทเบเบฅเบฐเบเบธเปเบงเปเบเปเบญเบเบซเบเปเบฒเบเบตเปเบงเปเบฒเบเบฒเบเบญเบญเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบเปเบกเปเบเบเปเบฒเบเบเบฒเบเบซเบผเบฒเบ: เบเบฒเบเบฐเบฅเบฒเบเบซเบเบถเปเบ, เปเบเบเปเบเปเบเบฑเบ JSONB เบชเปเบฒเบฅเบฑเบเบเบธเบเบชเบปเบกเบเบฑเบ, เปเบเบเบเบตเปเบเบฐเปเบเปเบชเบฒเบกเบเบฒเบเบฐเบฅเบฒเบเบชเปเบฒเบฅเบฑเบ EAV. เปเบเปเบเบตเปเบชเบฐเบเปเบญเบเปเบซเปเปเบซเบฑเบเปเบเบงเปเบเปเบเบเบฒเบเบฎเปเบญเบเบเป? เบเบฒเบเบเบฑเบเบเบธเบเบเบธเบเบชเบปเบกเบเบฑเบเปเบถเปเบเบเบญเบเบเบดเบเบดเบเบธเบเบเบปเบเบกเบตเบฅเบฑเบเบชเบฐเบเบฐเบเบฑเปเบเบเบตเป:
-- EAV
UPDATE entity_attribute_value
SET value = 'blue'
WHERE entity_attribute_id = 1
AND entity_id = 120;
-- JSONB
UPDATE entity_jsonb
SET properties = jsonb_set(properties, '{"color"}', '"blue"')
WHERE id = 120;
เบเบฑเปเบเบเบตเปเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเปเบซเบฑเบเปเบเป, เบเปเบฒเบฎเปเบญเบเบเปเบชเบธเบเบเปเบฒเบเบเปเปเปเบเปเปเบเบดเปเบเบเปเบฒเบเบเบงเปเบฒ. เปเบเบทเปเบญเบเบฑเบเบเบธเบเบกเบนเบเบเปเบฒเบเบญเบเบเบฑเบเบชเบดเบเปเบเบงเบฑเบเบเบธ JSONB เบเบงเบเปเบฎเบปเบฒเบเปเบญเบเปเบเปเบเบฑเบเบเบฑเบ , เปเบฅเบฐเบเบงเบเบเบฐเบเปเบฒเบเบกเบนเบเบเปเบฒเปเบซเบกเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบฑเบเบงเบฑเบเบเบธ JSONB. เปเบเบงเปเบเบเปเปเบเบฒเบก, เบเบงเบเปเบฎเบปเบฒเบเปเปเบเบณเปเบเบฑเบเบเปเบญเบเบฎเบนเปเบเบปเบงเบฅเบฐเบเบธเบฅเปเบงเบเปเปเบฒ. เบเบญเบเบซเบฒเบขเบนเปเปเบเบเบปเบงเบขเปเบฒเบ EAV, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเบฎเบนเปเบเบฑเบ entity_id เปเบฅเบฐ entity_attribute_id เปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฑเบเบเบธเบ. เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเบเบฑเบเบเบธเบเบเบฑเบเบชเบดเบเปเบเบเบฑเบ JSONB เปเบเบเบญเบตเบเปเบชเปเบเบทเปเบงเบฑเบเบเบธ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบกเบฑเบเบเบฑเบเบซเบกเบปเบเปเบกเปเบเปเบฎเบฑเบเปเบเปเบเบงเบเบฝเบง.
เบเบญเบเบเบตเปเปเบซเปเปเบฎเบปเบฒเปเบฅเบทเบญเบเบฅเบฒเบเบเบฒเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบซเบฒเบเปเบญเบฑเบเปเบเบเปเบเบเบญเบตเบเปเบชเปเบชเบตเปเปเปเบเบญเบเบกเบฑเบ:
-- EAV
SELECT e.name
FROM entity e
INNER JOIN entity_attribute_value eav ON e.id = eav.entity_id
INNER JOIN entity_attribute ea ON eav.entity_attribute_id = ea.id
WHERE ea.name = 'color' AND eav.value = 'blue';
-- JSONB
SELECT name
FROM entity_jsonb
WHERE properties ->> 'color' = 'blue';
เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเบเบดเบโเบงเปเบฒโเบเบงเบโเปเบฎเบปเบฒโเบชเบฒโเบกเบฒเบโเบเบปเบโเบฅเบปเบโเบงเปเบฒโเบญเบฑเบโเบเบตโเบชเบญเบโเปเบกเปเบโเบชเบฑเปเบโเบเบงเปเบฒ (เบเปเปโเบกเบตโเบเบฒเบโเปเบเบปเปเบฒโเบฎเปเบงเบก!), เปเบฅเบฐโเบเบฑเปเบโเบเบฑเปเบโเบชเบฒโเบกเบฒเบโเบญเปเบฒเบโเปเบเปโเบซเบผเบฒเบ. JSONB เบเบฐเบเบฐเบขเบนเปเบเบตเปเบเบตเป! เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบ JSON ->> เปเบเบทเปเบญเปเบซเปเปเบเปเบชเบตเปเบเบฑเบเบเปเบฒเบเปเปเบเบงเบฒเบกเบเบฒเบเบงเบฑเบเบเบธ JSONB. เบเบฑเบเบกเบตเบงเบดเบเบตเบเบตเบชเบญเบเปเบเบทเปเบญเบเบฑเบเบฅเบธเบเบปเบเปเบเปเบฎเบฑเบเบเบฝเบงเบเบฑเบเปเบเบฎเบนเบเปเบเบ JSONB เปเบเบเปเบเปเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบ @>:
-- JSONB
SELECT name
FROM entity_jsonb
WHERE properties @> '{"color": "blue"}';
เบเบตเปเปเบกเปเบเบเบงเบฒเบกเบชเบฑเบเบชเบปเบเปเบฅเบฑเบเบเปเบญเบ: เบเบงเบเปเบฎเบปเบฒเบเบงเบเปเบเบดเปเบเบงเปเบฒเบงเบฑเบเบเบธ JSON เปเบเบเบฑเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบญเบเบกเบฑเบเบเบฐเบเบญเบเบเปเบงเบเบงเบฑเบเบเบธเบเบตเปเบขเบนเปเปเบเบทเปเบญเบเบเบงเบฒเบเบญเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบ @>. เบญเปเบฒเบเปเปเบญเบเบฅเบปเบ, เบกเบตเบเบฐเปเบซเบเบเบซเบผเบฒเบ (เปเบเบดเปเบเบเปเบฒเบเบฅเบธเปเบกเบเบตเป).
เบกเบฒเปเบเป JSONB เบเปเบฒเบเบเบถเปเบเปเบกเบทเปเบญเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบฅเบทเบญเบเบเบธเบเบชเบปเบกเบเบฑเบเบซเบผเบฒเบเบญเบฑเบเบเปเบญเบกเบเบฑเบ. เบเบตเปเปเบกเปเบเบเปเบญเบเบเบตเปเบงเบดเบเบตเบเบฒเบ JSONB เปเบเบปเปเบฒเบกเบฒเปเบเปเป: เบเบงเบเปเบฎเบปเบฒเบเบฝเบเปเบเปเปเบฅเบทเบญเบเบเบธเบเบชเบปเบกเบเบฑเบเปเบเบฑเบเบเบฑเบเปเบเบตเปเบกเปเบเบตเบกเปเบเบเบธเบเบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบเบเปเปเบเปเบฒเปเบเบฑเบเบเปเบญเบเบกเบตเบเบฒเบเปเบเบปเปเบฒเบฎเปเบงเบก:
-- JSONB
SELECT name
, properties ->> 'color'
, properties ->> 'country'
FROM entity_jsonb
WHERE id = 120;
เบเปเบงเบ EAV เบเปเบฒเบเบเบฐเบเปเบญเบเบเบฒเบ 2 เปเบเบปเปเบฒเบฎเปเบงเบกเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเบฑเบเบชเบดเบเบเบตเปเบเปเบฒเบเบเปเบญเบเบเบฒเบเบชเบญเบเบเบฒเบก. เปเบเบเบงเบฒเบกเบเบดเบเปเบซเบฑเบเบเบญเบเบเปเบญเบ, เบเบฒเบเบชเบญเบเบเบฒเบกเบเปเบฒเบเปเบเบดเบเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบงเบฒเบกเบเปเบฒเบเบเบฒเบเบเบตเปเบเบตเปเบเบเบฒเบเบญเบญเบเปเบเบเบเบฒเบเบเปเปเบกเบนเบ. เปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเปเบเบตเปเบกเปเบเบตเบกเบเบญเบเบงเบดเบเบตเบเบฒเบเบเบฝเบเบเปเบฒเบเบฒเบก JSONB, เบขเบนเปเปเบ เบเบญเบ.
เปเบเบเบฑเบเบเบธเบเบฑเบเบกเบฑเบเปเบเบฑเบเปเบงเบฅเบฒเบเบตเปเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ.
เบเบฐเบฅเบดเบเบเบฐเบเบฑเบ
เปเบเบทเปเบญเบเบฝเบเบเบฝเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบเปเบญเบเปเบเป เปเบเบเบฒเบเบชเบญเบเบเบฒเบก, เปเบเบทเปเบญเบเบดเบเปเบฅเปเปเบงเบฅเบฒเบเบฐเบเบดเบเบฑเบ. เปเบเปเบฅเบฐเปเบเบเบชเบญเบเบเบฒเบกเปเบเปเบเบทเบเบเบฐเบเบดเบเบฑเบเบขเปเบฒเบเบซเบเปเบญเบเบชเบฒเบกเบเบฑเปเบเปเบเบฒเบฐเบงเปเบฒเบเบนเปเบงเบฒเบเปเบเบเบเบฒเบเบชเบญเบเบเบฒเบกเปเบเปเปเบงเบฅเบฒเบเบปเบเบเบงเปเบฒเบเบฑเปเบเบเปเบฒเบญเบดเบ. เบเปเบฒเบญเบดเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเบฒเปเบเบตเบเบเบฒเบเบชเบญเบเบเบฒเบกเปเบเบเบเปเปเบกเบตเบเบฒเบเบเบฑเบเบชเบฐเบเบตเปเบเป. เปเบเปเบเบญเบ, เบเบตเปเปเบกเปเบเบเปเปเปเบเปเบเบฝเบเบเบญเบ JSONB, เบเบฑเบเบเบฑเปเบเปเบเปเบเบฒเบเปเบเบปเปเบฒเบฎเปเบงเบกเบเบตเปเบเปเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ EAV เบเปเปเบชเบฒเบกเบฒเบเปเบเปเบเบฑเบเบชเบฐเบเบต (เบเปเบญเบเบเปเปเบกเบนเบเบเบตเปเบชเปเบฒเบเบฑเบเบเบญเบเบเปเบฒเบเบเบฐเปเบเบเบเปเปเปเบเปเบเบทเบเบเบฑเบเบชเบฐเบเบต). เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบชเปเบฒเบเบเบฑเบเบชเบฐเบเบตเปเบ 2 เบเปเบฅเปเบฒเบเบตเปเบชเปเบฒเบเบฑเบเบเปเบฒเบเบเบฐเปเบเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบเบกเบนเบเบเปเบฒ EAV, เปเบเบฑเปเบเบเบฝเบงเบเบฑเบเบเบฑเบเบเบฑเบเบชเบฐเบเบต. เบชเปเบฒเบฅเบฑเบเบเบฑเบ JSONB.
เบเบฒเบเบเบฑเบเบเบธเบเบเปเปเบกเบนเบเบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบเบปเบเปเบเปเบฎเบฑเบเบเปเปเปเบเบเบตเปเปเบเปเบเบทเปเบญเบเปเบเบเบญเบเปเบงเบฅเบฒ (เปเบ ms). เปเบซเปเบชเบฑเบเปเบเบเบงเปเบฒเบเบฐเบซเบเบฒเบเปเบกเปเบ logarithmic:

เบเบงเบเปเบฎเบปเบฒเปเบซเบฑเบเบงเปเบฒ JSONB เบซเบผเบฒเบ (> 50000-x) เปเบงเบเบงเปเบฒ EAV เบเปเบฒเบเปเบฒเบเบเปเปเปเบเปเบเบฑเบเบชเบฐเบเบต, เบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเบตเปเปเบเปเบเปเบฒเบงเปเบงเปเบเปเบฒเบเปเบเบดเบ. เปเบกเบทเปเบญเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบชเบฐเบเบตเบเบฑเบเบเปเบงเบเบฅเบฐเบซเบฑเบเบซเบผเบฑเบ, เบเบงเบฒเบกเปเบเบเบเปเบฒเบเปเบเบทเบญเบเบเบฐเบซเบฒเบเปเบ, เปเบเป JSONB เบเบฑเบเปเบงเบเบงเปเบฒ EAV 1,3 เปเบเบปเปเบฒ. เปเบซเปเบชเบฑเบเปเบเบเบงเปเบฒเบเบฑเบเบเบฐเบเบตเปเบเบเบฑเบ JSONB เบเปเปเบกเบตเบเบปเบเบเบฐเบเบปเบเบเบตเปเบเบตเปเปเบเบฒเบฐเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเปเปเบเปเบเปเบฅเปเบฒเบเบธเบเบชเบปเบกเบเบฑเบเปเบเปเบเบทเปเบญเบเปเบเบเบฒเบเบเบฐเปเบกเบตเบเบเบปเบ.
เบชเปเบฒเบฅเบฑเบเบเบฒเบเปเบฅเบทเบญเบเบเปเปเบกเบนเบเปเบเบเบญเบตเบเปเบชเปเบกเบนเบเบเปเบฒเบเบฑเบเบชเบดเบ, เบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบปเบเปเบเปเบฎเบฑเบเบเปเปเปเบเบเบตเป (เบเบฐเบซเบเบฒเบเบเบปเบเบเบฐเบเบด):

เบเปเบฒเบเบชเบฒเบกเบฒเบเบชเบฑเบเปเบเบเปเบซเบฑเบเบงเปเบฒ JSONB เบญเบตเบเปเบเบทเปเบญเบซเบเบถเปเบเปเบฎเบฑเบเบงเบฝเบเปเบงเบเบงเปเบฒ EAV เปเบเบเบเปเปเบกเบตเบเบฑเบเบชเบฐเบเบต, เปเบเปเปเบกเบทเปเบญ EAV เบเบฑเบเบเบฑเบเบชเบฐเบเบต, เบกเบฑเบเบเบฑเบเปเบฎเบฑเบเบงเบฝเบเปเบงเบเบงเปเบฒ JSONB. เปเบเปเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบซเบฑเบเบงเปเบฒเปเบงเบฅเบฒเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบญเบเบเบฒเบก JSONB เปเบกเปเบเบเบทเบเบฑเบ, เบเบตเปเปเบเปเบเบฐเบเบธเปเบเปเบซเปเบเปเบญเบเบฎเบนเปเบงเปเบฒเบเบฑเบเบเบฐเบเบต GIN เบเปเปเปเบฎเบฑเบเบงเบฝเบ. เบเบฒเบเบปเบเบเบทเปเบเปเบเปเบงเบฅเบฒเบเบตเปเบเปเบฒเบเปเบเปเบเบฑเบเบเบฐเบเบต GIN เบขเบนเปเปเบเบเบฑเบเบเบตเปเบกเบตเบเบธเบเบชเบปเบกเบเบฑเบเบเบตเปเบกเบตเบเบฐเบเบฒเบเบญเบ, เบกเบฑเบเบเบฝเบเปเบเปเบกเบตเบเบปเบเปเบเปเบงเบฅเบฒเบเบตเปเปเบเปเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฐเบเบญเบเบกเบต @>. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเปเบฒเปเบเปเบเบตเปเปเบเบเบฒเบเบเบปเบเบชเบญเบเปเบซเบกเปเปเบฅเบฐเบกเบฑเบเบกเบตเบเบปเบเบเบฐเบเบปเบเบญเบฑเบเปเบซเบเปเบซเบผเบงเบเปเบเปเบงเบฅเบฒ: เบเบฝเบเปเบเป 0,153ms! เบเบตเปเปเบกเปเบ 15000 เปเบเบทเปเบญเปเบงเบเบงเปเบฒ EAV เปเบฅเบฐ 25000 เปเบเบทเปเบญเปเบงเบเบงเปเบฒเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบ ->>.
เบเปเบญเบเบเบดเบเบงเปเบฒเบกเบฑเบเปเบงเบเป!
เบเบฐเบซเบเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบเบฒเบเบเปเปเบกเบนเบ
เปเบซเปเบเบฝเบเบเบฝเบเบเบฐเบซเบเบฒเบเบเบฒเบเบฐเบฅเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฑเบเบชเบญเบเบงเบดเบเบตเบเบฒเบ. เปเบ psql เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบชเบฐเปเบเบเบเบฐเบซเบเบฒเบเบเบญเบเบเบฒเบเบฐเบฅเบฒเบเปเบฅเบฐเบเบฑเบเบชเบฐเบเบตเบเบฑเบเบซเบกเบปเบเปเบเบเปเบเปเบเปเบฒเบชเบฑเปเบ dti+

เบชเปเบฒเบฅเบฑเบเบงเบดเบเบตเบเบฒเบ EAV, เบเบฐเบซเบเบฒเบเบเบฒเบเบฐเบฅเบฒเบเปเบกเปเบเบเบฐเบกเบฒเบ 3068 MB เปเบฅเบฐเบเบฑเบเบชเบฐเบเบตเปเบเบดเบ 3427 MB เบชเปเบฒเบฅเบฑเบเบเปเบฒเบเบงเบเบเบฑเบเบซเบกเบปเบ 6,43 GB. เบงเบดเบเบตเบเบฒเบ JSONB เปเบเป 1817 MB เบชเปเบฒเบฅเบฑเบเบเบฒเบเบฐเบฅเบฒเบเปเบฅเบฐ 318 MB เบชเปเบฒเบฅเบฑเบเบเบฑเบเบชเบฐเบเบต, เปเบเบดเปเบเปเบกเปเบ 2,08 GB. เบกเบฑเบ turns เบญเบญเบ 3 เปเบเบปเปเบฒ! เบเบงเบฒเบกเบเบดเบเบเบตเปเปเบฎเบฑเบเปเบซเปเบเปเบญเบเปเบเบเปเบเปเบฅเบฑเบเบเปเบญเบเปเบเบฒเบฐเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบทเปเบเบฑเบเบชเบดเบเบขเบนเปเปเบเบเบธเบเปเบงเบฑเบเบเบธ JSONB.
เปเบเปเบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบเบปเบงเปเบฅเบเปเบงเบปเปเบฒเบชเปเบฒเบฅเบฑเบเบเบปเบงเปเบญเบ: เปเบ EAV เบเบงเบเปเบฎเบปเบฒเปเบเบฑเบเบฎเบฑเบเบชเบฒเบฅเบฐเบซเบฑเบเบเปเบฒเบเบเบฐเปเบเบ 2 เบเบปเบงเปเบฅเบเบเปเปเบกเบนเบเบเปเบฒเบเบธเบเบฅเบฑเบเบชเบฐเบเบฐ, เบชเบปเปเบเบเบปเบเปเบซเป 8 bytes เบเบญเบเบเปเปเบกเบนเบเปเบเบตเปเบกเปเบเบตเบก. เบเบญเบเบเบฒเบเบเบฑเปเบ, EAV เปเบเบฑเบเบฎเบฑเบเบชเบฒเบกเบนเบเบเปเบฒเบเบฑเบเบชเบดเบเบเบฑเบเบซเบกเบปเบเปเบเบฑเบเบเปเปเบเบงเบฒเบก, เปเบเบเบฐเบเบฐเบเบตเป JSONB เบเบฐเปเบเปเบเบปเบงเปเบฅเบเปเบฅเบฐเบเปเบฒ boolean เบเบฒเบเปเบเบเปเบญเบเบเบตเปเปเบเบฑเบเปเบเปเบเป, เปเบฎเบฑเบเปเบซเปเบกเบตเบฎเบญเบเบเบตเบเบเปเบญเบเบฅเบปเบ.
เบเบปเบเปเบเปเบฎเบฑเบ
เปเบเบเบฅเบงเบก, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบดเบเบงเปเบฒเบเบฒเบเบเบฐเบซเบเบฑเบเบเบฑเบเบชเบดเบเปเบเบฎเบนเบเปเบเบ JSONB เบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบซเปเบเบฒเบเบญเบญเบเปเบเบเปเบฅเบฐเบเบฒเบเบฎเบฑเบเบชเบฒเบเบฒเบเบเปเปเบกเบนเบเบเบญเบเบเปเบฒเบเบเปเบฒเบเบเบถเปเบเบซเบผเบฒเบ. เบเปเบฒเบเปเบฒเบเบเปเบฒเบฅเบฑเบเบเปเบฒเปเบเบตเบเบเบฒเบเบชเบญเบเบเบฒเบกเบซเบผเบฒเบ, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบฒเบเบฎเบฑเบเบชเบฒเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบขเบนเปเปเบเบเบฒเบเบฐเบฅเบฒเบเบเบฝเบงเบเบฑเบเบเบฑเบเบซเบเปเบงเบเบเบฒเบเบเบปเบงเบเบดเบเบเบฐเปเบฎเบฑเบเบงเบฝเบเปเบเปเบเบฐเบชเบดเบเบเบดเบเบฒเบเบซเบผเบฒเบ. เปเบฅเบฐเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเบตเปเปเบฎเบฑเบเปเบซเปเบเบฒเบเปเบเปเบเบญเบเบฅเบฐเบซเบงเปเบฒเบเบเปเปเบกเบนเบเบเปเบฒเบเบเบฒเบเปเบกเปเบเปเบฅเปเบงเบเบงเบ, เปเบเปเบเบฒเบเบเปเปเบกเบนเบเบเบปเบเปเบเปเบฎเบฑเบเปเบกเปเบ 3 เปเบเบปเปเบฒเปเบเบเบฐเบฅเบดเบกเบฒเบเบเบฐเบซเบเบฒเบเบเปเบญเบ.
เบเบญเบเบเบฒเบเบเบฑเปเบ, เปเบเบเบญเบตเบเปเบชเปเบเบฒเบเบเบปเบเบชเบญเบเบเบตเปเบเปเบฒเปเบเบตเบ, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเบชเบฐเบซเบผเบธเบเปเบเปเบงเปเบฒเบเบฒเบเบชเบนเบเปเบชเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบกเปเบเบเปเปเบชเปเบฒเบเบฑเบเบซเบผเบฒเบ. เปเบเบเบฒเบเบเปเบฅเบฐเบเบต, JSONB เปเบกเปเบเปเบงเบเบงเปเบฒ EAV, เปเบฎเบฑเบเปเบซเปเบกเบฑเบเบเบตเบเบงเปเบฒ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเบฑเบเบเบฐเบเบตเบเบตเปเปเบเปเบเบญเบเบเปเปเปเบเปเบเบงเบกเปเบญเบปเบฒเบเบธเบเบเปเบฒเบ (เปเบเบฑเปเบ: เบซเบเปเบงเบเบเบฒเบเบเบตเปเบกเบตเบเปเบฒเบเบงเบเบเบธเบเบชเบปเบกเบเบฑเบเบซเบผเบฒเบ, เบเปเบฒเบเบงเบเบเบธเบเบชเบปเบกเบเบฑเบเบเบญเบเบเปเปเบกเบนเบเบเบตเปเบกเบตเบขเบนเป, เปเบเบตเปเบกเบเบถเปเบเบขเปเบฒเบเบซเบผเบงเบเบซเบผเบฒเบ, ...), เบเบฑเปเบเบเบฑเปเบเบเปเบฒเบเปเบฒเบเบกเบตเบเปเบฒเปเบเบฐเบเปเบฒเปเบเปเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเบเบเบธเบเบเบงเบเบกเบฑเบ. , เบเบฐเบฅเบธเบเบฒเบฎเบนเปเบชเบถเบเบงเปเบฒเบเปเปเปเบชเบเบเปเบฒเบเบตเปเบเบฐเบญเบญเบเปเบเบเปเบฒเปเบซเบฑเบ!
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com
