Bəzən data strukturu adi sətrlər və rəqəmlərə sığmır. Məsələn, istifadəçinin hobbilər siyahısı, profil üçün istənilən ayarlar və ya sifarişin içində nested parametrlər ola bilər. Bunun üçün ayrıca cədvəllər yaratmaq — rahat deyil. Burada JSON köməyə gəlir.
PostgreSQL belə datalarla işləmək üçün iki formatı dəstəkləyir: JSON və JSONB. Hər ikisi bir sütunda strukturlu data saxlamağa imkan verir, amma aralarında vacib fərqlər var.
Gəlin baxaq, bu necə işləyir, hansı formatı nə vaxt istifadə etmək lazımdır və onlar hansı imkanlar açır.
JSON nədir
JSON (JavaScript Object Notation) — strukturlu datanı rahat göstərmək üçün yaradılmış mətn formatıdır. Bu format hər bir web developer üçün tanışdır və onu belə təsvir etmək olar: "insan üçün oxunaqlı" və "kompüter üçün asan parse olunan". PostgreSQL-də bu format strukturlu datanı saxlamaq və işləmək üçün istifadə olunur.
JSON obyektinə nümunə:
{
"name": "Alex Lin",
"age": 25,
"skills": ["SQL", "PostgreSQL", "JavaScript"],
"address": {
"city": "Berlin",
"postal_code": "10115"
}
}
Qeyd: JSON — sadəcə mətn formatıdır, amma qaydaları var. Məsələn, açar adları həmişə dırnaq içində olmalıdır.
JSONB: Binary JSON
JSONB — "binary JSON"-dur və PostgreSQL-də dəstəklənir. JSON-dan fərqli olaraq, JSONB indekslənir və sürətli axtarış və dəyişiklik üçün optimallaşdırılıb. PostgreSQL-də JSON və JSONB arasındakı əsas fərq onların saxlanma üsulundadır:
- JSON datanı sən necə göndərmisənsə, mətn sətri kimi saxlayır.
- JSONB datanı binary formata çevirir və bu, əksər əməliyyatlar üçün daha effektivdir.
JSONB sənə belə fitchalar verir: filtrasiya, indeksləmə, mürəkkəb nested strukturların müqayisəsi.
JSONB-nin əsas üstünlükləri
Niyə JSON yox, məhz JSONB seçmək lazımdır? Bir neçə səbəb:
- Axtarış və filtrasiya sürətlənir
JSONB datanı tez çıxarmaq üçün nəzərdə tutulub. Məsələn, böyük obyekt massivində JSONB ilə istədiyin elementi tam dövr etmədən tez tapa bilərsən.
- İndeksləmə imkanı
İndeks sayəsində JSONB içində açar və dəyərlərə görə axtarış edə bilərsən, sorğular çox sürətli olur. JSON-u mətn kimi saxlamaq (JSON formatında) indeksləməyə imkan vermir.
- Nested datalarla rahat işləmək
JSONB nested strukturlarla əla işləyir. İerarxik datalar üçün əlavə cədvəllər yaratmağa ehtiyac yoxdur — hər şey bir yerdə saxlanıla bilər.
JSON nə vaxt, JSONB nə vaxt istifadə olunur
- JSON — datanı "olduğu kimi" mətn formatında saxlamaq istəyirsənsə istifadə et. Məsələn, dəqiq data yazısı vacibdirsə və ya minimal işləmə lazımdırsa.
- JSONB — əgər tez-tez seçim, filtrasiya və dəyişiklik edəcəksənsə və ya indeksləmə lazımdırsa, JSONB daha uyğundur.
JSON obyektlərinə nümunələr
Gəlin bir neçə JSON obyekt nümunəsinə baxaq və onların struktur imkanlarını görək.
Sadə JSON obyekti.
Açar-dəyər strukturu:
{
"name": "Ekaterina",
"age": 29
}
JSON-da massivlər
JSON massivləri dəstəkləyir:
{
"skills": ["Python", "SQL", "Data Analysis"]
}
Nested obyektlər
JSON mürəkkəb dataları saxlamaq üçün kompozisiyalar yaratmağa imkan verir:
{
"name": "Andrey",
"contacts": {
"email": "andrey@example.com",
"phone": "+79012345678"
}
}
Massiv və obyektlərin kombinasiyası
Massiv və obyektləri bir yerdə istifadə edə bilərsən:
{
"team": [
{
"name": "Elena",
"role": "menecer"
},
{
"name": "Pavel",
"role": "developer"
}
]
}
JSON və PostgreSQL
PostgreSQL JSON ilə işləmək üçün iki ayrıca data tipi dəstəkləyir:
JSON: mətn formatı.JSONB: binary format.
JSON və JSONB sütunları olan cədvəl yaratmaq
Görək, PostgreSQL cədvəllərində JSON/JSONB necə istifadə olunur. Məsələn, şirkət əməkdaşları haqqında məlumat saxlamaq üçün cədvəl yaradaq:
-- JSON və JSONB sütunları ilə cədvəl yaradırıq
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
details JSON, -- mətn JSON
profile JSONB -- binary JSON
);
İlk baxışda bu sütunlar arasında fərq yoxdur kimi görünür. Amma belə deyil: JSON dəyişməyən datanı saxlamaq üçün idealdır, JSONB isə filtrasiya və axtarış üçün daha yaxşıdır.
-- Data əlavə edirik
INSERT INTO employees (name, details, profile)
VALUES
('Alex Lin', '{"age": 30, "city": "Tallinn"}', '{"skills": ["SQL", "PostgreSQL"], "hobby": "football"}'),
('Maya Novak', '{"age": 25, "city": "Riga"}', '{"skills": ["Python", "Machine Learning"], "hobby": "reading"}');
JSONB datalarını çıxarmaq
JSONB-dən data çıxarmaq üçün xüsusi funksiyalardan istifadə edə bilərsən, bunları növbəti dərsdə öyrənəcəyik. Məsələn, əməkdaşların bacarıqları barədə məlumat almaq üçün:
-- Bacarıqları çıxarmaq
SELECT name, profile->'skills' AS skills
FROM employees;
Nəticə:
| name | skills |
|---|---|
| Alex Lin | ["SQL", "PostgreSQL"] |
| Maya Novak | ["Python", "Machine Learning"] |
JSON-un real həyatda tətbiqi
JSON (və JSONB) real tətbiqlərdə geniş istifadə olunur. Bir neçə nümunə:
- API və mikrosistemlər. JSON RESTful API-də data ötürmək üçün standart formatdır. PostgreSQL onu saxlama və işləmə səviyyəsində dəstəkləyir.
- Data inteqrasiyası. Əgər bazana müxtəlif sistemlərdən data gəlirsə, JSONB ilə işləmək daha rahatdır.
- Mürəkkəb strukturlara sahib olmaq. Məsələn, JSONB anket dataları, istifadəçi ayarları və ya korporativ metadata saxlamaq üçün uyğundur.
GO TO FULL VERSION