Ця стаття містить правописні, лексичні, граматичні, стилістичні або інші мовні помилки, які треба виправити. (лютий 2020) |
Реплікація
У веб додатках зазвичай домінують запити на отримання інформації - читання коментарів, постів, призначених для користувача даних і т.д. Таким чином слабким місцем є операція читання і саме її потрібно масштабувати. Для вирішення цього завдання використовується механізм реплікації - один сервер призначається головним (майстер-сервером) і виконує всі запити модифікації даних, а інші сервера (слейв) обробляють тільки запити отримання даних. При зміні або додаванні даних, майстер сервер повідомляє всі слейв сервера, таким чином підтримуючи актуальність даних.
Крім того, реплікація використовується для географічного розподілу серверів (наприклад один сервер в Америці, інший в Європі).
Принцип роботи реплікації
Майстер сервер при виконанні модифікацій пише всі зроблені зміни в лог, slave сервера з певною періодичністю перевіряють лог на предмет появи нових даних і якщо вони є - виконують аналогічні дії зі своїми даними.
Реплікаційні схеми
Схема зазвичай використовується в додатках з домінуючими запитами на читання - всі запити на зміну бази направляються майстер сервером, тоді як запити на читання розподіляються між слейв.
Зазвичай в додатку вказується список серверів (пул) призначених для читання, з якого mysql клієнт деяким чином (випадковим або за вказаною алгоритму) вибирає сервер для виконання запиту, таким чином балансуючи навантаження між усіма серверами.
Недолік схеми очевидний - при виході з ладу майстер сервера, всі запити на модифікацію і додавання даних не будуть виконуватися.
- Ланцюжок майстер серверів
Дуже зручний для географічного розподілу даних. Наприклад, ставимо сервера в Європі, Азії та Америці, налаштовуємо їх в ланцюжок і вчимо додаток вибирати сервер в залежності від регіону. Таким чином отримуємо виграш за рахунок зменшення шляху подорожі запиту до сервера.
При збільшенні навантаження на один з регіональних серверів до нього запросто можна додати кілька слейв.
Недолік схеми аналогічний попередньому - при виході з ладу одного з майстер-серверів, ланцюжок буде порушений, але регіональні сервери, які залишилися, працюватимуть незалежно, що вже краще.
- 2 майстри, багато слейв
Схема є ланцюжком з двох майстер серверів. Обидва майстри виконують запити на модифікацію даних і мають рівну кількість слейв. Таким чином при виході з ладу одного майстра, додаток продовжить працювати з другим і його слейв.
Розглянемо на прикладі налаштування реплікації між майстром і слейв.
На слейв потрібно створити користувача, яким він буде авторизуватися на майстер. Бажано створити аналогічного користувача й на майстрі, на випадок якщо він вийде з ладу і доведеться зробити слейв майстром, а майстер, після виправлення помилки, слейв.
CREATE USER 'repl' @ '%' IDENTIFIED BY 'replpass';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *. * TO repl @ '%';
Кожен сервер в реплікаційній схемі повинен мати унікальний номер (ціле число), яке потрібно прописати в my.cnf в секції [mysqld].
Наприклад для майстра:
server-id = 1
Для слейв:
server-id = 2
Крім того, на майстра потрібно включити лог, для чого туди ж вписуємо:
log-bin
Рестартуємо обидва сервера, після чого майстер вже готовий до роботи, а слейв потрібно вказати хто його майстер, для цього:
CHANGE MASTER TO MASTER_HOST = 'master.example.com', MASTER_USER = 'repl', MASTER_PASSWORD = 'replpass';
START SLAVE;
Все, реплікація між серверами налаштована, тепер після виконання запиту модифікації на майстра, дані оновляться і на слейв. Просто і сердито.
Якщо реплікацію потрібно налаштувати для вже існуючої бази, перед запуском обидва сервера повинні мати однакові дані.
Партіціонірованіе
Іноді зустрічаються таблиці з деяким логічним угрупованням даних, наприклад, список покупок користувача або лог дій можна згрупувати за датою. І коли більшість запитів працює з групами (наприклад, цікавить тільки статистика за рік), тоді є сенс зберігати дані розбиті на групи безпосередньо в БД. Процес поділу даних і зберігання їх у вигляді деяких груп і називається партіціонірованіем.
Розглянемо на прикладі таблиці:
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR (30),
lname VARCHAR (30),
hired DATE NOT NULL DEFAULT '1970-01-01',
separated DATE NOT NULL DEFAULT '9999-12-31',
job_code INT NOT NULL,
store_id INT NOT NULL
)
4 типи партіціонірованія:
- За діапазону
Кожне розбиття містить дані, які належать зазначеному діапазону значень колонки.
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN (21)
);
У партіціі p0 потраплять всі рядки в яких store_id <6.
- За списком значень
Кожне розбиття містить дані, які мають певне значення в колонці.
PARTITION BY LIST (store_id) (
PARTITION pNorth VALUES IN (3,5,6,9,17),
PARTITION pEast VALUES IN (1,2,10,11,19,20),
PARTITION pWest VALUES IN (4,12,13,14,18),
PARTITION pCentral VALUES IN (7,8,15,16)
);
Наприклад в партіціі pNorth потраплять всі рядки в яких store_id = 3, 5, 6, 9, 17.
- За хешу
Таблиця розбивається по хешу значення деякої колонки.
- За ключем
Аналогічно до попереднього методу, але по ключу.
Останні два методи не дають можливості вказати в яку з партіцій потрапить рядок, а тільки кількість партіцій, механізм розподілу MySQL бере на себе.
Партіціі можна розбивати на подпартіціі, які можна далі партіціоніровать і т.д.
При цьому при складанні запиту не потрібно думати де і в якому вигляді зберігаються дані, просто пишемо запит до таблиці employees, а MySQL визначить для яких партіцій його потрібно виконати.
У реальному житті партіціі використовуються не часто, тому, що в більшості випадків індексу досить, але все ж потрібно пам'ятати про їх існування.
Шардінг
Шардінг - розвиток партіціонірованія - розбиття даних на групи і зберігання будь-якої групи на окремому сервері (Шарден). В цьому випадку група не обов'язково включає одну таблицю, це може бути кілька таблиць, які містять одне ціле. Наприклад, маючи багато зареєстрованих користувачів, дані яких лежать в декількох таблицях (реєстраційні дані, історія покупок, лог дій), на кожній Шардена буде зберігатися повна інфраструктура (всі таблиці), але з даними тільки тих, хто поточної Шарден (наприклад одна Шарда - користувачі з прізвищами від А до Д, друга Д-К і т.д).
MySQL не підтримує автоматичного шардінга, тому його доводиться робити на рівні додатку, вибираючи в залежності від запиту до сервера. Зазвичай створюється параметризовані пул серверів (в прикладі вище таким параметром була б перша буква прізвища) і при виконанні кожного запиту, за цим параметром вибирається потрібний сервер.
Шардінг це остання міра масштабування (коли реплікація вже не рятує), не тільки через складність реалізації, а й через ускладнення роботи з даними. Оскільки робота з Шардена відбувається на рівні додатку, ми автоматично відмовляємося від тригерів, збережених процедур і інших вбудованих в БД можливостей, які повинні працювати з усіма даними, оскільки на рівні БД кожної Шардена існує тільки її набір даних і вона нічого не знає про інших.
Тому перед тим, як впроваджувати MySQL шардінг, потрібно дуже добре подумати і бути точно впевненим, що іншого шляху немає.
Ця стаття не містить .(січень 2020) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Nemaye perevirenih versij ciyeyi storinki jmovirno yiyi she ne pereviryali na vidpovidnist pravilam proektu Cya stattya mistit pravopisni leksichni gramatichni stilistichni abo inshi movni pomilki yaki treba vipraviti Vi mozhete dopomogti vdoskonaliti cyu stattyu pogodivshi yiyi iz chinnimi movnimi standartami lyutij 2020 Replikaciya U veb dodatkah zazvichaj dominuyut zapiti na otrimannya informaciyi chitannya komentariv postiv priznachenih dlya koristuvacha danih i t d Takim chinom slabkim miscem ye operaciya chitannya i same yiyi potribno masshtabuvati Dlya virishennya cogo zavdannya vikoristovuyetsya mehanizm replikaciyi odin server priznachayetsya golovnim majster serverom i vikonuye vsi zapiti modifikaciyi danih a inshi servera slejv obroblyayut tilki zapiti otrimannya danih Pri zmini abo dodavanni danih majster server povidomlyaye vsi slejv servera takim chinom pidtrimuyuchi aktualnist danih Krim togo replikaciya vikoristovuyetsya dlya geografichnogo rozpodilu serveriv napriklad odin server v Americi inshij v Yevropi Princip roboti replikaciyi Majster server pri vikonanni modifikacij pishe vsi zrobleni zmini v log slave servera z pevnoyu periodichnistyu pereviryayut log na predmet poyavi novih danih i yaksho voni ye vikonuyut analogichni diyi zi svoyimi danimi Replikacijni shemi Shema zazvichaj vikoristovuyetsya v dodatkah z dominuyuchimi zapitami na chitannya vsi zapiti na zminu bazi napravlyayutsya majster serverom todi yak zapiti na chitannya rozpodilyayutsya mizh slejv Zazvichaj v dodatku vkazuyetsya spisok serveriv pul priznachenih dlya chitannya z yakogo mysql kliyent deyakim chinom vipadkovim abo za vkazanoyu algoritmu vibiraye server dlya vikonannya zapitu takim chinom balansuyuchi navantazhennya mizh usima serverami Nedolik shemi ochevidnij pri vihodi z ladu majster servera vsi zapiti na modifikaciyu i dodavannya danih ne budut vikonuvatisya Lancyuzhok majster serveriv Duzhe zruchnij dlya geografichnogo rozpodilu danih Napriklad stavimo servera v Yevropi Aziyi ta Americi nalashtovuyemo yih v lancyuzhok i vchimo dodatok vibirati server v zalezhnosti vid regionu Takim chinom otrimuyemo vigrash za rahunok zmenshennya shlyahu podorozhi zapitu do servera Pri zbilshenni navantazhennya na odin z regionalnih serveriv do nogo zaprosto mozhna dodati kilka slejv Nedolik shemi analogichnij poperednomu pri vihodi z ladu odnogo z majster serveriv lancyuzhok bude porushenij ale regionalni serveri yaki zalishilisya pracyuvatimut nezalezhno sho vzhe krashe 2 majstri bagato slejv Shema ye lancyuzhkom z dvoh majster serveriv Obidva majstri vikonuyut zapiti na modifikaciyu danih i mayut rivnu kilkist slejv Takim chinom pri vihodi z ladu odnogo majstra dodatok prodovzhit pracyuvati z drugim i jogo slejv Rozglyanemo na prikladi nalashtuvannya replikaciyi mizh majstrom i slejv Na slejv potribno stvoriti koristuvacha yakim vin bude avtorizuvatisya na majster Bazhano stvoriti analogichnogo koristuvacha j na majstri na vipadok yaksho vin vijde z ladu i dovedetsya zrobiti slejv majstrom a majster pislya vipravlennya pomilki slejv CREATE USER repl IDENTIFIED BY replpass GRANT REPLICATION SLAVE REPLICATION CLIENT ON TO repl Kozhen server v replikacijnij shemi povinen mati unikalnij nomer cile chislo yake potribno propisati v my cnf v sekciyi mysqld Napriklad dlya majstra server id 1 Dlya slejv server id 2 Krim togo na majstra potribno vklyuchiti log dlya chogo tudi zh vpisuyemo log bin Restartuyemo obidva servera pislya chogo majster vzhe gotovij do roboti a slejv potribno vkazati hto jogo majster dlya cogo CHANGE MASTER TO MASTER HOST master example com MASTER USER repl MASTER PASSWORD replpass START SLAVE Vse replikaciya mizh serverami nalashtovana teper pislya vikonannya zapitu modifikaciyi na majstra dani onovlyatsya i na slejv Prosto i serdito Yaksho replikaciyu potribno nalashtuvati dlya vzhe isnuyuchoyi bazi pered zapuskom obidva servera povinni mati odnakovi dani Particionirovanie Inodi zustrichayutsya tablici z deyakim logichnim ugrupovannyam danih napriklad spisok pokupok koristuvacha abo log dij mozhna zgrupuvati za datoyu I koli bilshist zapitiv pracyuye z grupami napriklad cikavit tilki statistika za rik todi ye sens zberigati dani rozbiti na grupi bezposeredno v BD Proces podilu danih i zberigannya yih u viglyadi deyakih grup i nazivayetsya particionirovaniem Rozglyanemo na prikladi tablici CREATE TABLE employees id INT NOT NULL fname VARCHAR 30 lname VARCHAR 30 hired DATE NOT NULL DEFAULT 1970 01 01 separated DATE NOT NULL DEFAULT 9999 12 31 job code INT NOT NULL store id INT NOT NULL 4 tipi particionirovaniya Za diapazonu Kozhne rozbittya mistit dani yaki nalezhat zaznachenomu diapazonu znachen kolonki PARTITION BY RANGE store id PARTITION p0 VALUES LESS THAN 6 PARTITION p1 VALUES LESS THAN 11 PARTITION p2 VALUES LESS THAN 16 PARTITION p3 VALUES LESS THAN 21 U particii p0 potraplyat vsi ryadki v yakih store id lt 6 Za spiskom znachen Kozhne rozbittya mistit dani yaki mayut pevne znachennya v kolonci PARTITION BY LIST store id PARTITION pNorth VALUES IN 3 5 6 9 17 PARTITION pEast VALUES IN 1 2 10 11 19 20 PARTITION pWest VALUES IN 4 12 13 14 18 PARTITION pCentral VALUES IN 7 8 15 16 Napriklad v particii pNorth potraplyat vsi ryadki v yakih store id 3 5 6 9 17 Za heshu Tablicya rozbivayetsya po heshu znachennya deyakoyi kolonki Za klyuchem Analogichno do poperednogo metodu ale po klyuchu Ostanni dva metodi ne dayut mozhlivosti vkazati v yaku z particij potrapit ryadok a tilki kilkist particij mehanizm rozpodilu MySQL bere na sebe Particii mozhna rozbivati na podparticii yaki mozhna dali particionirovat i t d Pri comu pri skladanni zapitu ne potribno dumati de i v yakomu viglyadi zberigayutsya dani prosto pishemo zapit do tablici employees a MySQL viznachit dlya yakih particij jogo potribno vikonati U realnomu zhitti particii vikoristovuyutsya ne chasto tomu sho v bilshosti vipadkiv indeksu dosit ale vse zh potribno pam yatati pro yih isnuvannya Sharding Sharding rozvitok particionirovaniya rozbittya danih na grupi i zberigannya bud yakoyi grupi na okremomu serveri Sharden V comu vipadku grupa ne obov yazkovo vklyuchaye odnu tablicyu ce mozhe buti kilka tablic yaki mistyat odne cile Napriklad mayuchi bagato zareyestrovanih koristuvachiv dani yakih lezhat v dekilkoh tablicyah reyestracijni dani istoriya pokupok log dij na kozhnij Shardena bude zberigatisya povna infrastruktura vsi tablici ale z danimi tilki tih hto potochnoyi Sharden napriklad odna Sharda koristuvachi z prizvishami vid A do D druga D K i t d MySQL ne pidtrimuye avtomatichnogo shardinga tomu jogo dovoditsya robiti na rivni dodatku vibirayuchi v zalezhnosti vid zapitu do servera Zazvichaj stvoryuyetsya parametrizovani pul serveriv v prikladi vishe takim parametrom bula b persha bukva prizvisha i pri vikonanni kozhnogo zapitu za cim parametrom vibirayetsya potribnij server Sharding ce ostannya mira masshtabuvannya koli replikaciya vzhe ne ryatuye ne tilki cherez skladnist realizaciyi a j cherez uskladnennya roboti z danimi Oskilki robota z Shardena vidbuvayetsya na rivni dodatku mi avtomatichno vidmovlyayemosya vid trigeriv zberezhenih procedur i inshih vbudovanih v BD mozhlivostej yaki povinni pracyuvati z usima danimi oskilki na rivni BD kozhnoyi Shardena isnuye tilki yiyi nabir danih i vona nichogo ne znaye pro inshih Tomu pered tim yak vprovadzhuvati MySQL sharding potribno duzhe dobre podumati i buti tochno vpevnenim sho inshogo shlyahu nemaye Cya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno sichen 2020 Otrimano z https uk wikipedia org wiki Masshtabuvannya bazi danih