Ի՞նչ է Postgres-ը։ Շատ հավելվածների տվյալների բազան, բացատրված
Postgres-ը (պաշտոնապես PostgreSQL) անվճար, բաց կոդով հարաբերական տվյալների բազա է՝ ծրագիր, որը պահում է հավելվածի տվյալները աղյուսակներում՝ տողերով և սյունակներով, կապում է այդ աղյուսակները միմյանց և պատասխանում է դրանց մասին հարցերին SQL լեզվով։ Հայտնի է իր հուսալիությամբ, տվյալների ճշտության խիստ պահպանմամբ և բավարար ճկունությամբ՝ ցանկացած բանի համար, սկսած մուտքագրված անունների ցուցակից մինչև մեծ ընկերության գրառումները։ Շատ վեբ հավելվածներ, և շատ ծառայություններ, որոնք հյուրընկալում են դրանք, կառուցված են դրա վրա։
Ինչու է կարևոր AI-ով կառուցելիս
Երբ AI հավելվածի կառուցողը ձեր նախագծին ավելացնում է «տվյալների բազա», մեծ է հավանականությունը, որ դա Postgres-ն է։ SQL գրելու կարիք չունեք, բայց մի փոքր իմացությունը շատ է օգնում․
- Կարող եք տվյալները նկարագրել այնպես, ինչպես բազան է պահանջում։ «Հաճախորդները ունեն շատ պատվերներ, յուրաքանչյուր պատվեր ունի շատ ապրանքներ» ուղղակիորեն թարգմանվում է աղյուսակների։
- Կարող եք խնդրել ճիշտ պաշտպանությունները։ Postgres-ը կարող է մերժել սխալ տվյալները իր ուժով՝ կրկնվող էլ. հասցե, պատվեր անգոյ հաճախորդի համար, եթե AI-ն սահմանել է կանոնները։
- Կարող եք կարդալ, թե ինչ արեց AI-ն։ Աղյուսակների անունները, սյունակները և կապերը հեշտ է ստուգել աղյուսակների դիտիչում, նույնիսկ եթե երբեք կոդին չեք դիպչում։
Ամենօրյա անալոգիա՝ շատ խիստ արխիվային գրասենյակ
Պատկերացրեք արխիվային գրասենյակ, որտեղ յուրաքանչյուր տեսակի բանի համար կա պահարան՝ մեկը հաճախորդների, մեկը պատվերների, մեկը ապրանքների համար։ Յուրաքանչյուր քարտ նույն տպված վանդակները պետք է լրացնի։ Յուրաքանչյուր քարտ ունի յուրահատուկ համար, և պատվերի քարտը չի կրկնում հաճախորդի տվյալները․ այն պարզապես ասում է «հաճախորդ #214», որը ցույց է տալիս հաճախորդների պահարանին։
Գրասենյակի պաշտոնյան խիստ է։ Նա չի ընդունի պատվեր, որը ցույց է տալիս անգոյ հաճախորդի։ Չի ընդունի քարտ, որում պարտադիր ամսաթիվի վանդակը դատարկ է։ Եվ եթե խնդրեք փոխանցել գումար մի հաշվի քարտից մյուսին, կամ կկատարի երկու մասերը, կամ ոչ մեկը՝ երբեք միայն մեկը։
Այդ պաշտոնյան Postgres-ն է։ Պահարանները աղյուսակներն են, տպված վանդակները՝ սյունակները, յուրաքանչյուր քարտ՝ տող, իսկ «հաճախորդ #214» կապը՝ օտար բանալի (foreign key)։
Ինչում է լավն Postgres-ը
| Գործառույթ | Ինչ է նշանակում պարզ բառերով |
|---|---|
| Աղյուսակներ և կապեր | Տվյալները գտնվում են աղյուսակներում, որոնք միմյանց են մատնանշում, այնպես որ ոչինչ հինգ տեղում չի պատճենվում |
| SQL | Ստանդարտ լեզու հարցեր տալու համար՝ «բոլոր չվճարված պատվերները անցյալ ամսից, նորագույնը առաջինը» |
| Գործարքներ (ACID) | Փոփոխությունների խումբը կամ լրիվ տեղի է ունենում, կամ ընդհանրապես չի լինում, նույնիսկ եթե սերվերը կիսով չափ խափանվի |
| Սահմանափակումներ (constraints) | Կանոններ, որ բազան ինքը պարտադրում է՝ պարտադիր դաշտեր, յուրահատուկ էլ. փոստեր, աղյուսակների վավեր կապեր |
| Ինդեքսներ | Որոնման դյուրանցումներ, որ որոնումները արագ մնան, երբ աղյուսակները մեծանան |
| JSONB | Պահել ճկուն, փաստաթղթանման տվյալներ սյունակում, երբ ֆիքսված կառուցվածքը չի տեղավորվում |
| Լրիվ տեքստային որոնում | Որոնել բառեր տեքստային դաշտերում՝ առանց առանձին որոնման ծառայության, պարզ դեպքերի համար |
| Ընդլայնումներ (extensions) | Լրացումներ, ինչպիսիք են PostGIS-ը քարտեզների և տեղանքների համար կամ pgvector-ը AI embedding-ներ պահելու համար |
| Տողի մակարդակի անվտանգություն | Կանոններ բազայի ներսում, թե որ տողերն է տվյալ օգտատերը կարող տեսնել |
Postgres-ը սկսվեց որպես հետազոտական նախագիծ Կալիֆոռնիայի Բերքլիի համալսարանում 1980-ականներին և 1990-ականներից բաց կերպով զարգանում է համաշխարհային համայնքի կողմից։ Այդ երկար պատմությունն է պատճառը, որ այն հաճախ լռելյայն ընտրությունն է․ այն լավ փաստաթղթավորված է, լայնորեն աջակցվում է, և յուրաքանչյուր խոշոր cloud մատակարար առաջարկում է կառավարվող տարբերակ։
Օրինակ․ աղյուսակը աղյուսակների վերածելը
Նշենք, որ փոքր կեյթրինգի բիզնես եք վարում և ամեն ինչ հետևում եք մեկ աղյուսակում․ յուրաքանչյուր տող միջոցառում է՝ հաճախորդի անունով, հեռախոսով և էլ. փոստով, ամսաթվով, մենյուի ապրանքներով և գնով։
Խնդիրները արագ են երևում։ Նույն հաճախորդը հայտնվում է վեց տողում երկու տարբեր հեռախոսահամարներով։ Մենյուի ապրանքները մեկ բջջում են գրված՝ «կանապե x40, աղցան x2», ուստի հաշվել չեք կարող, թե քանի կանապե եք պատրաստել այս ամիս։
Postgres-ում նույն տեղեկատվությունը դառնում է չորս աղյուսակ․
| Աղյուսակ | Սյունակներ | Նշումներ |
|---|---|---|
| clients | id, name, phone, email | Էլ. փոստը պետք է լինի յուրահատուկ |
| events | id, client_id, date, venue, status | client_id-ը պետք է համընկնի իրական հաճախորդի հետ |
| menu_items | id, name, unit_price | Մեկ տող յուրաքանչյուր ուտեստի համար |
| event_items | event_id, menu_item_id, quantity | Կապում է միջոցառումները ուտեստներին՝ քանակով |
Հիմա հաճախորդի հեռախոսահամարը մեկ տեղում է ապրում։ «Քանի՞ կանապե ենք պատրաստել մարտին» հարցը մեկ SQL հարց է։ Իսկ երբ նոր միջոցառում եք գրանցում իր ապրանքներով, գործարքը ապահովում է, որ երբեք չունենաք միջոցառում, որի ապրանքների կեսը պահված է։
Սա այն քայլն է, որ մարդիկ բաց են թողնում, երբ AI-ին խնդրում են «սարքիր հավելված իմ աղյուսակից»։ Ուղեցույցը, թե ինչպես աղյուսակը վերածել հավելվածի, ավելի հեռու է գնում։
Հիմնական տերմիններ
- Աղյուսակ, տող, սյունակ․ տեսակ բանի, դրա մեկ օրինակը, դրա մասին մեկ տեղեկություն։
- Առաջնային բանալի (primary key)․ յուրաքանչյուր տողի յուրահատուկ ID, սովորաբար
id։ - Օտար բանալի (foreign key)․ սյունակ, որը մատնանշում է մեկ այլ աղյուսակի տող, օրինակ՝
client_id։ - Սխեմա (schema)․ բոլոր ձեր աղյուսակների և սյունակների նախագիծը։
- Միգրացիա (migration)․ սխեմայի պահված, կրկնելի փոփոխություն, օրինակ՝ «ավելացնել
venueսյունակը events-ում»։ - Հարց (query)․ SQL լեզվով գրված հարց կամ հրաման։
- Միացման տող (connection string)․ հասցեն և գաղտնաբառը, որով ձեր backend-ը հասնում է բազային։ Դա գաղտնիք է․ տես միջավայրի փոփոխականներ և գաղտնիքներ։
- Կառավարվող Postgres (managed Postgres)․ ծառայություն, որ աշխատեցնում, պահուստավորում և թարմացնում է Postgres-ը ձեր փոխարեն։
Յուրաքանչյուր հավելվածի կատարած ամենօրյա գործողությունների համար այս աղյուսակների վրա՝ ստեղծել, կարդալ, թարմացնել, ջնջել, տես ինչ է նշանակում CRUD-ը։
Սովորական սխալներ և թյուրըմբռնումներ
- Մեկ հսկա աղյուսակ։ Աղյուսակը սյունակ առ սյունակ պատճենելը հանգեցնում է նույն կրկնօրինակման խնդիրներին։ Կրկնվող բաները տեղափոխեք իրենց սեփական աղյուսակները։
- Ցուցակների պահելը մեկ տեքստային դաշտում։ «կանապե x40, աղցան x2» մեկ սյունակում չի կարող ճիշտ հաշվվել կամ որոնվել։ Օգտագործեք կապող աղյուսակ։
- Առանց սահմանափակումների։ Առանց «էլ. փոստը պետք է լինի յուրահատուկ» կամ «յուրաքանչյուր միջոցառում պետք է հաճախորդ ունենա» կանոնների, վատ տվյալները անաղմուկ ներթափանցում են և երևում ամիսներ անց։
- Բազան ձեռքով փոխել արտադրության մեջ։ Խնդրեք սխեմայի փոփոխությունները որպես միգրացիաներ, որպեսզի փոփոխությունը գրանցվի և կարող լինի կրկնվել։
- Թույլ տալ, որ բրաուզերը ուղղակիորեն կապվի բազային։ Frontend-ը պետք է անցնի ձեր backend-ով, որը ստուգում է թույլտվությունները։ Բազայի գաղտնաբառը երբեք չպետք է լինի էջի կոդում։
- «Postgres-ը միայն մեծ ընկերությունների համար է»։ Այն նույնքան լավ է աշխատում 50 տողանի սպասման ցուցակի համար, և աճի հետ չեք ստիպված լինելու այն փոխել։
- Ենթադրել, որ տվյալների բազան պահուստ է։ Այն տվյալները պահում է, բայց ավտոմատ չի պաշտպանում ջնջումից։ Ստուգեք, թե ինչ պահուստներ է տրամադրում ձեր հյուրընկալողը։
Ինչ խնդրել ձեր AI կառուցողից
- «Պահիր [բաները] տվյալների բազայում։ Աղյուսակներ՝ … հետևյալ դաշտերով՝ … Կապիր յուրաքանչյուր [պատվեր] [հաճախորդի] հետ։»
- «Հաճախորդների էլ. փոստը դարձրու յուրահատուկ։ Այս դաշտերը պարտադիր դարձրու։ Պատվեր առանց հաճախորդի մի թույլատրիր։»
- «Յուրաքանչյուր սխեմայի փոփոխության համար օգտագործիր միգրացիաներ։»
- «Ավելացրու ինդեքսներ ամենաշատ արվող որոնումների համար՝ պատվերներ՝ ըստ հաճախորդի և ամսաթվի։»
- «Բազայի բոլոր մուտքերը անցնում են սերվերով։ Միացման տողը պահիր միջավայրի փոփոխականներում։»
Եթե տվյալների բազայի գաղափարը բոլորովին նոր է, սկսեք ինչ է տվյալների բազան-ից, ապա վերադարձեք այստեղ։ Full-stack հավելվածը ցույց է տալիս, թե որտեղ է տվյալների բազան գտնվում frontend-ի և backend-ի կողքին։
Postgres-ը Mythex-ում
Mythex-ը յուրաքանչյուր նախագծի, որին դա պետք է, տալիս է իր սեփական նվիրված Postgres տվյալների բազան։ Դուք այն չեք կարգավորում․ խնդրեք զրույցում («պահիր սպասման ցուցակի էլ. փոստերը տվյալների բազայում») կամ օգտագործեք /database հրամանը, և Mythex-ը միացնում է այն, ներարկում կապի տվյալները ձեր հավելվածի մեջ, և կարող է ստեղծել աղյուսակները ձեզ համար։ Հրապարակված հավելվածի տվյալների բազան քնում է հինգ րոպե անգործության հետո և արթնանում հաջորդ հարցման ժամանակ, և վճարում եք այն ժամանակի համար, երբ իրականում արթուն էր, նույն կրեդիտների հաշվից, ինչ կառուցելը։ Մանրամասները կան տվյալների բազայի փաստաթղթերում, իսկ վահանակի կաղապարները լավ տեղ են տեսնելու տվյալների վրա հիմնված հավելվածները։
Հարցեր
Արդյո՞ք Postgres-ը նույնն է, ինչ PostgreSQL-ը։
Այո։ PostgreSQL-ը պաշտոնական անունն է, իսկ Postgres-ը՝ սովորական կարճ անունը․ երկուսն էլ վերաբերում են նույն բաց կոդով հարաբերական տվյալների բազային։
Արդյո՞ք Postgres-ն անվճար է։
Այո։ PostgreSQL-ը բաց կոդով է ընդունող PostgreSQL License-ի ներքո, այնպես որ կարող եք այն անվճար օգտագործել, այդ թվում՝ առևտրային արտադրանքում։ Վճարում եք միայն այն սերվերների կամ կառավարվող ծառայության համար, որը այն աշխատեցնում է։
Ո՞րն է տարբերությունը Postgres-ի և MySQL-ի միջև։
Երկուսն էլ անվճար, հարաբերական SQL տվյալների բազաներ են, և երկուսն էլ հարմար են մեծ մասի հավելվածների համար։ Postgres-ը հայտնի է տվյալների ամբողջականության խիստ պահպանմամբ, հարուստ տվյալների տիպերով՝ ինչպիսիք են JSONB-ն և զանգվածները, և ընդարձակ ընդլայնումների էկոհամակարգով։ MySQL-ը հայտնի է պարզությամբ և վեբ հոսթինգում երկար պատմությամբ։
Արդյո՞ք Postgres-ը լավն է փոքր հավելվածի համար։
Այո։ Այն լավ է աշխատում մեկ աղյուսակով սպասման ցուցակի և մեծ արտադրական համակարգերի համար, այնպես որ հավելվածի աճի հետ չեք ստիպված փոխել տվյալների բազան։ Կառավարվող ծառայությունները հեշտացնում են դրա աշխատեցումը առանց տվյալների բազայի administrator-ի։