PostgreSQL-เตฝ EAV-เดฏเต† JSONB เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดŸเดฟเดŽเตฝ; DR: JSONB-เดจเต เด…เดจเตเดตเต‡เดทเดฃ เดชเตเดฐเด•เดŸเดจเดคเตเดคเต† เดจเดทเตเดŸเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดคเต† เดคเดจเตเดจเต† เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตเด•เต€เดฎ เดตเดฟเด•เดธเดจเด‚ เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚.

เด†เดฎเตเด–เด‚

เด’เดฐเต เดฑเดฟเดฒเต‡เดทเดฃเตฝ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเดฟเตปเตเดฑเต† (เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต) เดฒเต‹เด•เดคเตเดคเดฟเดฒเต† เดเดฑเตเดฑเดตเตเด‚ เดชเดดเดฏ เด‰เดชเดฏเต‹เด— เด•เต‡เดธเตเด•เดณเตเดŸเต† เด’เดฐเต เดฎเดฟเด•เดšเตเดš เด‰เดฆเดพเดนเดฐเดฃเด‚ เดจเตฝเด•เดพเด‚: เดžเด™เตเด™เตพเด•เตเด•เต เด’เดฐเต เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟเดฏเตเดฃเตเดŸเต, เดˆ เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟเดฏเตเดŸเต† เดšเดฟเดฒ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ (เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เตพ) เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดŽเดจเตเดจเดพเตฝ เดŽเดฒเตเดฒเดพ เดธเด‚เดญเดตเด™เตเด™เตพเด•เตเด•เตเด‚ เด’เดฐเต‡ เดธเต†เดฑเตเดฑเต เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดฃเดฎเต†เดจเตเดจเดฟเดฒเตเดฒ, เดญเดพเดตเดฟเดฏเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เดšเต‡เตผเดคเตเดคเต‡เด•เตเด•เดพเด‚.

เด“เดฐเต‹ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟ เดฎเต‚เดฒเตเดฏเดคเตเดคเดฟเดจเตเด‚ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เด’เดฐเต เด•เต‹เดณเด‚ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด•, เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เดจเดฟเตผเดฆเตเดฆเดฟเดทเตเดŸ เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟ เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏเดต เดชเต‚เดฐเดฟเดชเตเดชเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดˆ เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เดŽเดณเตเดชเตเดชเดตเดดเดฟ. เด•เตŠเดณเตเดณเดพเด‚! เดชเตเดฐเดถเตเดจเด‚ เดชเดฐเดฟเดนเดฐเดฟเดšเตเดšเต... เดจเดฟเด™เตเด™เดณเตเดŸเต† เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดฆเดถเดฒเด•เตเดทเด•เตเด•เดฃเด•เตเด•เดฟเดจเต เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเตเดตเดฐเต† เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดชเตเดคเดฟเดฏ เดฑเต†เด•เตเด•เต‹เตผเดกเต เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

EAV เดชเดพเดฑเตเดฑเต‡เตบ เดชเดฐเดฟเด—เดฃเดฟเด•เตเด•เตเด• (เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟ-เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต-เดฎเต‚เดฒเตเดฏเด‚), เด‡เดคเต เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดธเด‚เดญเดตเดฟเด•เตเด•เดพเดฑเตเดฃเตเดŸเต. เด’เดฐเต เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟเด•เตพ (เดฑเต†เด•เตเด•เต‹เตผเดกเตเด•เตพ) เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดฎเดฑเตเดฑเตŠเดฐเต เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟ เดจเดพเดฎเด™เตเด™เตพ (เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เตพ) เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เดŸเต‡เดฌเดฟเดณเดฟเตฝ เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟเด•เดณเต† เด…เดตเดฏเตเดŸเต† เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เดณเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดคเตเดคเตเด•เดฏเตเด‚ เดจเดฟเดฒเดตเดฟเดฒเต† เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟเด•เตเด•เตเดณเตเดณ เด† เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เดณเตเดŸเต† เดฎเต‚เดฒเตเดฏเด‚ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดค เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดค เดธเต†เดฑเตเดฑเต เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเดฟเด•เตเด•เดพเดจเตเดณเตเดณ เด•เดดเดฟเดตเต เด‡เดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดจเตฝเด•เตเดจเตเดจเต, เด•เต‚เดŸเดพเดคเต† เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เด˜เดŸเดจ เดฎเดพเดฑเตเดฑเดพเดคเต† เดคเดจเตเดจเต† เดˆเดšเตเดšเดฏเดฟเตฝ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เดšเต‡เตผเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, EVA เดธเดฎเต€เดชเดจเดคเตเดคเดฟเดจเต เดšเดฟเดฒ เดชเต‹เดฐเดพเดฏเตเดฎเด•เตพ เด‡เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เดžเดพเตป เดˆ เดชเต‹เดธเตเดฑเตเดฑเต เดŽเดดเตเดคเตเด•เดฏเดฟเดฒเตเดฒ. เด…เดคเดฟเดจเดพเตฝ, เด‰เดฆเดพเดนเดฐเดฃเดคเตเดคเดฟเดจเต, 1 เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต เด‰เดณเตเดณ เด’เดจเตเดจเต‹ เด…เดคเดฟเดฒเดงเดฟเด•เดฎเต‹ เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟเด•เตพ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เด…เดจเตเดตเต‡เดทเดฃเดคเตเดคเดฟเตฝ 2 เดœเต‹เดฏเดฟเดจเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต: เด†เดฆเตเดฏเดคเตเดคเต‡เดคเต เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต เดŸเต‡เดฌเดฟเดณเตเดฎเดพเดฏเดฟ เดšเต‡เดฐเตเดจเตเดจเดคเดพเดฃเต, เดฐเดฃเตเดŸเดพเดฎเดคเตเดคเต‡เดคเต เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดŸเต† เดชเดŸเตเดŸเดฟเด•เดฏเตเดฎเดพเดฏเดฟ เดšเต‡เดฐเตเดจเตเดจเดคเดพเดฃเต. เด’เดฐเต เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟเด•เตเด•เต 2 เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เตพ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, 4 เดœเต‹เดฏเดฟเดจเตเด•เตพ เด†เดตเดถเตเดฏเดฎเดพเดฃเต! เด•เต‚เดŸเดพเดคเต†, เดŽเดฒเตเดฒเดพ เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเตเด•เดณเตเด‚ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดธเตเดŸเตเดฐเดฟเด‚เด—เตเด•เดณเดพเดฏเดฟ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เดซเดฒเดคเตเดคเดฟเดจเตเด‚ WHERE เด•เตเดฒเต‹เดธเดฟเดจเตเด‚ เดŸเตˆเดชเตเดชเต เด•เดพเดธเตเดฑเตเดฑเดฟเด‚เด—เดฟเดจเต เด•เดพเดฐเดฃเดฎเดพเด•เตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพ เดงเดพเดฐเดพเดณเด‚ เดšเต‹เดฆเตเดฏเด™เตเด™เตพ เดŽเดดเตเดคเตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดตเดฟเดญเดต เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเตปเตเดฑเต† เด•เดพเดฐเตเดฏเดคเตเดคเดฟเตฝ เด‡เดคเต เดตเดณเดฐเต† เดชเดพเดดเดพเดฏเดคเดพเดฃเต.

เดˆ เดตเตเดฏเด•เตเดคเดฎเดพเดฏ เดชเต‹เดฐเดพเดฏเตเดฎเด•เตพ เด‰เดฃเตเดŸเดพเดฏเดฟเดฐเตเดจเตเดจเดฟเดŸเตเดŸเตเด‚, เด‡เดคเตเดคเดฐเดคเตเดคเดฟเดฒเตเดณเตเดณ เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เดพเตป EAV เดตเดณเดฐเต†เด•เตเด•เดพเดฒเดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเตเดตเดฐเตเดจเตเดจเต. เด‡เดต เด…เดจเดฟเดตเดพเดฐเตเดฏเดฎเดพเดฏ เดชเต‹เดฐเดพเดฏเตเดฎเด•เดณเดพเดฏเดฟเดฐเตเดจเตเดจเต, เดฎเดฟเด•เดšเตเดš เดฌเดฆเตฝ เด’เดจเตเดจเตเดฎเดฟเดฒเตเดฒ.
เดŽเดจเตเดจเดพเตฝ PostgreSQL-เตฝ เด’เดฐเต เดชเตเดคเดฟเดฏ "เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏ" เดชเตเดฐเดคเตเดฏเด•เตเดทเดชเตเดชเต†เดŸเตเดŸเต...

PostgreSQL 9.4 เดฎเตเดคเตฝ, JSON เดฌเตˆเดจเดฑเดฟ เดกเดพเดฑเตเดฑ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต JSONB เดกเดพเดฑเตเดฑ เดคเดฐเด‚ เดšเต‡เตผเดคเตเดคเต. เดˆ เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ JSON เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ JSON เดŽเดจเตเดจ เดชเตเดฒเต†เดฏเดฟเตป เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเดฟเดจเต‡เด•เตเด•เดพเตพ เด•เตเดฑเดšเตเดšเต เดธเตเดฅเดฒเดตเตเด‚ เดธเดฎเดฏเดตเตเด‚ เดŽเดŸเตเด•เตเด•เตเดจเตเดจเตเดฃเตเดŸเต†เด™เตเด•เดฟเดฒเตเด‚, เด…เดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดจเด™เตเด™เตพ เดจเดŸเดคเตเดคเตเดจเตเดจเดคเต เดตเดณเดฐเต† เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเดฃเต. เด…เดจเตเดตเต‡เดทเดฃเด™เตเด™เดณเต† เด•เต‚เดŸเตเดคเตฝ เดตเต‡เด—เดคเตเดคเดฟเดฒเดพเด•เตเด•เตเดจเตเดจ เดธเต‚เดšเดฟเด•เดฏเต† JSONB เดชเดฟเดจเตเดคเตเดฃเดฏเตเด•เตเด•เตเดจเตเดจเต.

เดžเด™เตเด™เดณเตเดŸเต† เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟ เดŸเต‡เดฌเดฟเดณเดฟเตฝ เด’เดฐเต JSONB เด•เต‹เดณเด‚ เดฎเดพเดคเตเดฐเด‚ เดšเต‡เตผเดคเตเดคเต เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเตเดณเตเดณ EAV เดชเดพเดฑเตเดฑเต‡เตบ เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เดพเตป JSONB เดกเดพเดฑเตเดฑ เดคเดฐเด‚ เดžเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต, เด‡เดคเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดกเดฟเดธเตˆเตป เดตเดณเดฐเต† เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต. เดชเด•เตเดทเต‡, เด‡เดคเต‹เดŸเตŠเดชเตเดชเด‚ เด‰เตฝเดชเตเดชเดพเดฆเดจเด•เตเดทเดฎเดค เด•เตเดฑเดฏเตเด•เดฏเตเด‚ เดตเต‡เดฃเด‚ เดŽเดจเตเดจเต เดชเดฒเดฐเตเด‚ เดตเดพเดฆเดฟเด•เตเด•เตเดจเตเดจเต... เด…เดคเตเด•เตŠเดฃเตเดŸเดพเดฃเต เดˆ เดฒเต‡เด–เดจเด‚ เดŽเดดเตเดคเดฟเดฏเดคเต.

เด’เดฐเต เดŸเต†เดธเตเดฑเตเดฑเต เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

เดˆ เดคเดพเดฐเดคเดฎเตเดฏเดคเตเดคเดฟเดจเดพเดฏเดฟ, $9.5 เดฌเดฟเตฝเดกเดฟเตฝ PostgreSQL 80 เตปเตเดฑเต† เดชเตเดคเดฟเดฏ เด‡เตปเดธเตเดฑเตเดฑเดพเดณเต‡เดทเดจเดฟเตฝ เดžเดพเตป เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต. เดฆเดฟเด—เดฟเดคเดฒเตŠเดšเต†เด…เดจเต Ubuntu 14.04. ะŸะพัะปะต ะฝะฐัั‚ั€ะพะนะบะธ ะฝะตะบะพั‚ะพั€ั‹ั… ะฟะฐั€ะฐะผะตั‚ั€ะพะฒ ะฒ postgresql.conf ั ะทะฐะฟัƒัั‚ะธะป เด‡เดคเต 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_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_set(), เด•เต‚เดŸเดพเดคเต† เดžเด™เตเด™เดณเตเดŸเต† เดชเตเดคเดฟเดฏ เดฎเต‚เดฒเตเดฏเด‚ เด’เดฐเต 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 เด‡เดตเดฟเดŸเต† เดตเดฟเดœเดฏเดฟเดšเตเดšเต! JSONB เด’เดฌเตโ€Œเดœเด•เตโ€Œเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเต เดฎเต‚เดฒเตเดฏเดฎเดพเดฏเดฟ เดจเดฟเดฑเด‚ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เดžเด™เตเด™เตพ JSON ->> เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต. @> เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต 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-เดจเต เด†เดตเดถเตเดฏเดฎเดพเดฏ เดœเต‹เดฏเดฟเดจเตเด•เตพเด•เตเด•เต เดธเต‚เดšเดฟเด•เด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเดฟเดฒเตเดฒ (เดตเดฟเดฆเต‡เดถ เด•เต€ เดซเต€เตฝเดกเตเด•เตพ เดธเต‚เดšเดฟเด•เดฏเดฟเดฒเดพเด•เตเด•เดฟเดฏเดฟเดŸเตเดŸเดฟเดฒเตเดฒ). เด‡เดคเดฟเดจเต เดถเต‡เดทเด‚ เดžเดพเตป EAV เดฎเต‚เดฒเตเดฏ เดชเดŸเตเดŸเดฟเด•เดฏเตเดŸเต† 2 เดตเดฟเดฆเต‡เดถ เด•เต€ เด•เต‹เดณเด™เตเด™เดณเดฟเตฝ เด’เดฐเต เดธเต‚เดšเดฟเด•เดฏเตเด‚ เด’เดฐเต เดธเต‚เดšเดฟเด•เดฏเตเด‚ เดธเตƒเดทเตเดŸเดฟเดšเตเดšเต. เดœเดฟเตป เด’เดฐเต JSONB เด•เต‹เดณเดคเตเดคเดฟเดจเดพเดฏเดฟ.

เดกเดพเดฑเตเดฑ เด…เดชเตโ€Œเดกเต‡เดฑเตเดฑเต เดธเดฎเดฏเดคเตเดคเดฟเตปเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเตฝ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดซเดฒเด™เตเด™เตพ เด•เดพเดฃเดฟเดšเตเดšเต (เดฎเดฟ.เดธเดฟ.เดฏเดฟเตฝ). เดธเตเด•เต†เดฏเดฟเตฝ เดฒเต‹เด—เดฐเดฟเดฅเดฎเดฟเด•เต เด†เดฃเต†เดจเตเดจเต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•:

PostgreSQL-เตฝ EAV-เดฏเต† JSONB เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดฎเตเด•เดณเดฟเตฝ เดชเดฑเดžเตเดž เด•เดพเดฐเดฃเดคเตเดคเดพเตฝ, เดจเดฟเด™เตเด™เตพ เดธเต‚เดšเดฟเด•เด•เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, JSONB EAV-เดฏเต†เด•เตเด•เดพเตพ เดตเดณเดฐเต† (> 50000-x) เดตเต‡เด—เดคเดฏเตเดณเตเดณเดคเดพเดฃเต†เดจเตเดจเต เดžเด™เตเด™เตพ เด•เดพเดฃเตเดจเตเดจเต. เดžเด™เตเด™เตพ เดชเตเดฐเดพเดฅเดฎเดฟเด• เด•เต€เด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเดฐเด•เตพ เดธเต‚เดšเดฟเด•เดฏเดฟเดฒเดพเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดตเตเดฏเดคเตเดฏเดพเดธเด‚ เดเดคเดพเดฃเตเดŸเต เด…เดชเตเดฐเดคเตเดฏเด•เตเดทเดฎเดพเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ JSONB เด‡เดชเตเดชเต‹เดดเตเด‚ EAV-เดฏเต†เด•เตเด•เดพเตพ 1,3 เดฎเดŸเด™เตเด™เต เดตเต‡เด—เดคเดฏเตเดณเตเดณเดคเดพเดฃเต. เดฎเต‚เดฒเตเดฏเดจเดฟเตผเดฃเตเดฃเดฏ เดฎเดพเดจเดฆเดฃเตเดกเดคเตเดคเดฟเตฝ เดžเด™เตเด™เตพ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟ เด•เต‹เดณเด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดคเตเดคเดคเดฟเดจเดพเตฝ JSONB เด•เต‹เดณเดคเตเดคเดฟเดฒเต† เดธเต‚เดšเดฟเด•เดฏเตเด•เตเด•เต เด‡เดตเดฟเดŸเต† เดฏเดพเดคเตŠเดฐเต เดธเตเดตเดพเดงเต€เดจเดตเตเดฎเดฟเดฒเตเดฒเต†เดจเตเดจ เด•เดพเดฐเตเดฏเด‚ เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เตเด•.

เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟ เดฎเต‚เดฒเตเดฏเดคเตเดคเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ เดกเดพเดฑเตเดฑ เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เตพเด•เตเด•เต เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เดซเดฒเด™เตเด™เตพ เดฒเดญเดฟเด•เตเด•เตเด‚ (เดธเดพเดงเดพเดฐเดฃ เดธเตเด•เต†เดฏเดฟเตฝ):

PostgreSQL-เตฝ EAV-เดฏเต† JSONB เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต

เดธเต‚เดšเดฟเด•เด•เดณเดฟเดฒเตเดฒเดพเดคเต† EAV-เดฏเต†เด•เตเด•เดพเตพ เดตเต‡เด—เดคเตเดคเดฟเตฝ JSONB เดตเต€เดฃเตเดŸเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดถเตเดฐเดฆเตเดงเดฟเด•เตเด•เดพเดจเดพเด•เตเด‚, เดŽเดจเตเดจเดพเตฝ EAV เดธเต‚เดšเดฟเด•เด•เดณเตเดณเตเดณเดชเตเดชเต‹เตพ, เด…เดคเต JSONB-เดฏเต†เด•เตเด•เดพเตพ เดตเต‡เด—เดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดพเตฝ JSONB เด…เดจเตเดตเต‡เดทเดฃเด™เตเด™เดณเตเดŸเต† เดธเดฎเดฏเด™เตเด™เตพ เด’เดจเตเดจเตเดคเดจเตเดจเต†เดฏเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด•เดฃเตเดŸเต, เด‡เดคเต GIN เดธเต‚เดšเดฟเด•เด•เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒ เดŽเดจเตเดจ เดตเดธเตเดคเตเดคเดฏเดฟเดฒเต‡เด•เตเด•เต เดŽเดจเตเดจเต† เดชเตเดฐเต‡เดฐเดฟเดชเตเดชเดฟเดšเตเดšเต. เดœเดจเดธเด‚เด–เตเดฏเดฏเตเดณเตเดณ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เด‰เดณเตเดณ เด’เดฐเต เด•เต‹เดณเดคเตเดคเดฟเตฝ เดจเดฟเด™เตเด™เตพ เด’เดฐเต GIN เดธเต‚เดšเดฟเด• เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, @> เดŽเดจเตเดจ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตฝ เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ เดฎเดพเดคเตเดฐเดฎเต‡ เด…เดคเต เดชเตเดฐเดพเดฌเดฒเตเดฏเดคเตเดคเดฟเตฝ เดตเดฐเดฟเด•เดฏเตเดณเตเดณเต‚. เดžเดพเตป เด‡เดคเต เด’เดฐเต เดชเตเดคเดฟเดฏ เดŸเต†เดธเตเดฑเตเดฑเดฟเตฝ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต, เด…เดคเต เดธเดฎเดฏเดคเตเดคเดฟเตฝ เดตเดฒเดฟเดฏ เดธเตเดตเดพเดงเต€เดจเด‚ เดšเต†เดฒเตเดคเตเดคเดฟ: 0,153 เดฎเดฟ. เด‡เดคเต EAV-เดฏเต†เด•เตเด•เดพเตพ 15000 เดฎเดŸเด™เตเด™เตเด‚ ->> เด“เดชเตเดชเดฑเต‡เดฑเตเดฑเดฑเดฟเดจเต‡เด•เตเด•เดพเตพ 25000 เดฎเดŸเด™เตเด™เตเด‚ เดตเต‡เด—เดคเดฏเตเดณเตเดณเดคเดพเดฃเต.

เด‡เดคเต เดฎเดคเดฟเดฏเดพเดฏ เดตเต‡เด—เดคเดฏเตเดณเตเดณเดคเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต!

เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดชเดŸเตเดŸเดฟเด•เดฏเตเดŸเต† เดตเดฒเตเดชเตเดชเด‚

เดฐเดฃเตเดŸเต เดธเดฎเต€เดชเดจเด™เตเด™เดณเตเดŸเต†เดฏเตเด‚ เดชเดŸเตเดŸเดฟเด• เดตเดฒเตเดชเตเดชเด™เตเด™เตพ เดคเดพเดฐเดคเดฎเตเดฏเด‚ เดšเต†เดฏเตเดฏเดพเด‚. psql-เตฝ, เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฎเตเด•เตเด•เต เดŽเดฒเตเดฒเดพ เดชเดŸเตเดŸเดฟเด•เด•เดณเตเดŸเต†เดฏเตเด‚ เดธเต‚เดšเดฟเด•เด•เดณเตเดŸเต†เดฏเตเด‚ เดตเดฒเตเดชเตเดชเด‚ เด•เดพเดฃเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ dti+

PostgreSQL-เตฝ EAV-เดฏเต† JSONB เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตเดจเตเดจเต

EAV เดธเดฎเต€เดชเดจเดคเตเดคเดฟเดจเต, เดŸเต‡เดฌเดฟเตพ เดตเดฒเตเดชเตเดชเด™เตเด™เตพ เดเด•เดฆเต‡เดถเด‚ 3068 MB เด‰เด‚ เดธเต‚เดšเดฟเด•เด•เตพ 3427 MB เดตเดฐเต†เดฏเตเด‚ เดฎเตŠเดคเตเดคเด‚ 6,43 GB เด†เดฃเต. JSONB เดธเดฎเต€เดชเดจเด‚ เดŸเต‡เดฌเดฟเดณเดฟเดจเดพเดฏเดฟ 1817 MB เด‰เด‚ เดธเต‚เดšเดฟเด•เด•เตพเด•เตเด•เต 318 MB เด‰เด‚ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดพเดฏเดคเต 2,08 GB. เด‡เดคเต 3 เดฎเดŸเด™เตเด™เต เด•เตเดฑเดตเดพเดฃเต! เดŽเดฒเตเดฒเดพ JSONB เด’เดฌเตโ€Œเดœเด•เตเดฑเตเดฑเดฟเดฒเตเด‚ เดžเด™เตเด™เตพ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟ เดจเดพเดฎเด™เตเด™เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ เดˆ เดตเดธเตเดคเตเดค เดŽเดจเตเดจเต† เด…เตฝเดชเตเดชเด‚ เด†เดถเตเดšเดฐเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเดฟ.

เดŽเดจเตเดจเดฟเดŸเตเดŸเตเด‚, เด…เด•เตเด•เด™เตเด™เตพ เดธเตเดตเดฏเด‚ เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เตเดจเตเดจเต: EAV-เดฏเดฟเตฝ เด“เดฐเต‹ เด†เดŸเตเดฐเดฟเดฌเตเดฏเต‚เดŸเตเดŸเต เดฎเต‚เดฒเตเดฏเดคเตเดคเดฟเดจเตเด‚ เดžเด™เตเด™เตพ 2 เด‡เตปเตเดฑเดฟเด—เตผ เดตเดฟเดฆเต‡เดถ เด•เต€เด•เตพ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเดฟเตปเตเดฑเต† เดซเดฒเดฎเดพเดฏเดฟ 8 เดฌเตˆเดฑเตเดฑเตเด•เตพ เด…เดงเดฟเด• เดกเดพเดฑเตเดฑ เดฒเดญเดฟเด•เตเด•เตเด‚. เด•เต‚เดŸเดพเดคเต†, EAV เดŽเดฒเตเดฒเดพ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเด‚ เดŸเต†เด•เตโ€Œเดธเตโ€Œเดฑเตเดฑเดพเดฏเดฟ เดธเด‚เดญเดฐเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดคเต‡เดธเดฎเดฏเด‚ JSONB เดธเดพเดงเตเดฏเดฎเดพเด•เตเดจเตเดจเดฟเดŸเดคเตเดคเต เดธเด‚เด–เตเดฏเดพ, เดฌเต‚เดณเดฟเดฏเตป เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เด†เดจเตเดคเดฐเดฟเด•เดฎเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚, เด…เดคเดฟเตปเตเดฑเต† เดซเดฒเดฎเดพเดฏเดฟ เด’เดฐเต เดšเต†เดฑเดฟเดฏ เด•เดพเตฝเดชเตเดชเดพเดŸเต เดฒเดญเดฟเด•เตเด•เตเด‚.

เดซเดฒเด™เตเด™เตพ

เดฎเตŠเดคเตเดคเดคเตเดคเดฟเตฝ, JSONB เดซเต‹เตผเดฎเดพเดฑเตเดฑเดฟเตฝ เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดจเดฟเด™เตเด™เดณเตเดŸเต† เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเด‚ เดชเดฐเดฟเดชเดพเดฒเดฟเด•เตเด•เตเดจเตเดจเดคเตเด‚ เดตเดณเดฐเต† เดŽเดณเตเดชเตเดชเดฎเดพเด•เตเด•เตเดฎเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต. เดจเดฟเด™เตเด™เตพ เดงเดพเดฐเดพเดณเด‚ เดšเต‹เดฆเตเดฏเด™เตเด™เตพ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•เดฏเดพเดฃเต†เด™เตเด•เดฟเตฝ, เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟเดฏเตเดŸเต† เด…เดคเต‡ เดชเดŸเตเดŸเดฟเด•เดฏเดฟเตฝ เดŽเดฒเตเดฒเดพเด‚ เดธเต‚เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเต เดฏเดฅเดพเตผเดคเตเดฅเดคเตเดคเดฟเตฝ เด•เต‚เดŸเตเดคเตฝ เด•เดพเดฐเตเดฏเด•เตเดทเดฎเดฎเดพเดฏเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเด‚. เด‡เดคเต เดกเดพเดฑเตเดฑ เดคเดฎเตเดฎเดฟเดฒเตเดณเตเดณ เด‡เดŸเดชเต†เดŸเตฝ เดฒเดณเดฟเดคเดฎเดพเด•เตเด•เตเดจเตเดจเต เดŽเดจเตเดจเดคเต เด‡เดคเดฟเดจเด•เด‚ เด’เดฐเต เดชเตเดฒเดธเต เด†เดฃเต, เดŽเดจเตเดจเดพเตฝ เดคเดคเตเดซเดฒเดฎเดพเดฏเตเดฃเตเดŸเดพเด•เตเดจเตเดจ เดกเดพเดฑเตเดฑเดพเดฌเต‡เดธเต เดตเต‹เดณเดฟเดฏเดคเตเดคเดฟเตฝ 3 เดฎเดŸเด™เตเด™เต เดšเต†เดฑเตเดคเดพเดฃเต.

เด•เต‚เดŸเดพเดคเต†, เดจเดŸเดคเตเดคเดฟเดฏ เดชเดฐเดฟเดถเต‹เดงเดจเด•เดณเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดฎเดพเด•เตเด•เดฟ, เดชเตเดฐเด•เดŸเดจ เดจเดทเตเดŸเด‚ เดตเดณเดฐเต† เดจเดฟเดธเตเดธเดพเดฐเดฎเดพเดฃเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เดจเดฟเด—เดฎเดจเด‚ เดšเต†เดฏเตเดฏเดพเด‚. เดšเดฟเดฒ เดธเดจเตเดฆเตผเดญเด™เตเด™เดณเดฟเตฝ, JSONB EAV-เดฏเต†เด•เตเด•เดพเตพ เดตเต‡เด—เดคเดฏเตเดณเตเดณเดคเดพเดฃเต, เด‡เดคเต เด•เต‚เดŸเตเดคเตฝ เดฎเดฟเด•เดšเตเดšเดคเดพเด•เตเด•เตเดจเตเดจเต. เดŽเดจเตเดจเดฟเดฐเตเดจเตเดจเดพเดฒเตเด‚, เดคเต€เตผเดšเตเดšเดฏเดพเดฏเตเด‚ เดˆ เดฎเดพเดจเดฆเดฃเตเดกเด‚ เดŽเดฒเตเดฒเดพ เดตเดถเด™เตเด™เดณเตเด‚ เด‰เตพเด•เตเด•เตŠเดณเตเดณเตเดจเตเดจเดฟเดฒเตเดฒ (เด‰เดฆเดพ. เดตเดณเดฐเต† เดตเดฒเดฟเดฏ เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เตพ เด‰เดณเตเดณ เดŽเตปเตเดฑเดฟเดฑเตเดฑเดฟเด•เตพ, เดจเดฟเดฒเดตเดฟเดฒเตเดณเตเดณ เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดชเตเดฐเต‹เดชเตเดชเตผเดŸเตเดŸเดฟเด•เดณเตเดŸเต† เดŽเดฃเตเดฃเดคเตเดคเดฟเตฝ เด—เดฃเตเดฏเดฎเดพเดฏ เดตเตผเดฆเตเดงเดจเดตเต,...), เด…เดคเดฟเดจเดพเตฝ เด…เดต เดŽเด™เตเด™เดจเต† เดฎเต†เดšเตเดšเดชเตเดชเต†เดŸเตเดคเตเดคเดพเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดŽเดจเตเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เด‰เดฃเตเดŸเต†เด™เตเด•เดฟเตฝ , เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเดฟเตฝ เด‡เดŸเดพเตป เดฎเดŸเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเดฟเดฒเตเดฒ!

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

DDoS เดชเดฐเดฟเดฐเด•เตเดทเดฏเตเดณเตเดณ เดธเตˆเดฑเตเดฑเตเด•เตพเด•เตเด•เดพเดฏเดฟ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เตเด•, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ ๐Ÿ”ฅ DDoS เดชเดฐเดฟเดฐเด•เตเดท, VPS VDS เดธเต†เตผเดตเดฑเตเด•เตพ เด‰เดณเตเดณ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฏ เดตเต†เดฌเตโ€Œเดธเตˆเดฑเตเดฑเต เดนเต‹เดธเตเดฑเตเดฑเดฟเด‚เด—เต เดตเดพเด™เตเด™เต‚ | ProHoster