2018-09-22 бавни ли са ни базите данни?
by Vasil Kolev(обмислям лекция за OpenFest по темата разни инструменти за debug-ване, които съм открил в последно време, звучи ли интересно на някого?)
Тия дни около една лекция на hack conf за scale-ването на приложения, разговори с разни хора за архитектура на системи и дебъгването на някакви готови неща почна да ми се мотае следния въпрос: наистина ли базите данни са толкова бавни и защо?
Въпросът идва от идеята, че единият начин да си спестиш натоварването в пиковите моменти на базата е да буферираш в някаква опашка (напр. Apache Kafka) заявките, така че да може да наваксаш в някакви по-тихи периоди. Това го чух и като идея изобщо за влизащите заявки в системата, без значение дали са batch заявки или такива директно от потребители.
За да не се губят данни, тази опашка трябва да persist-ва данните, т.е. реално да представлява един transaction log, който да се пише на диска преди да се отговори на клиента, че данните са получени. За да се приемат тези данни, вероятно е нужна и малко валидация, да се види дали са “приемливи”/отговарят на constraint-ите на системата.
… което е точно каквото прави всъщност базата данни. По това, което съм виждал (и чел в “Transaction processing”, което май все още е книгата “как се пише база данни”), базата прави точно това – проверява няколко неща и пише транзакцията в лога. Промяната на реалните данни се случва на batch-ове, като се затвори текущия сегмент от transaction log-а, така че писането в базата би трябвало да е бая бърза операция. Четенето се случва от кеш или от реалните данни, така че ако transaction log-а не е на същия хардуер, като цяло няма обективна причина опашката да помага, реално е вършене на същата работа още веднъж.
Та явно базите данни са по-бавни, отколкото би трябвало. Някой да има наблюдения по темата?
Tags: работа
September 27th, 2018 at 12:48
Бъдейки хейтър ще те натроля. Какво означава бавна база от данни? Един mysql който на ден трупа 50 милиона реда (включая и json полета), около 20 000 заявки секунда, бавен ли е? Или по какви параметри би оценил една база, че е бавна?
September 27th, 2018 at 13:41
Питам за генералното усещане на хората, щото колко можеш да направи зависи от много неща. Явно усещането е, че ако просто трябва да пълниш някъде данните, нормалната база не е правилното нещо, по нещата, които виждам хората да правят.
Т.е. параметърът на хората е “като си пусна workload-а, базата ми не издържа, за това ще сложа X и Y”, като X и Y са буквално същото нещо, което базата прави. Ако имат истински case, т.е. ако просто да сложиш един transaction log по пътя е по-бързо от пъхането в базата, въпросът е защо.
September 27th, 2018 at 14:43
Генералното усещане: Базите са достатъчно бързо, но криваци могат да докарат базата до лагване – я ще набие някакви безрасъдни индекси, я ще набие умопомрачителни заявки
September 28th, 2018 at 12:17
Базите не са бавни, но има умопомрачителни SQL заявки написани от “разработчици” които могат да скапят коя-да-е система.
Но това е във случай, че можеш да контролираш всичко от-до (включително желязото и натоварването).
Във случай когато нещо ти се изплъзва от контрол (примерно натоварването) и данните не са чак кой-знае-колко-важни може да се приложи някаква шмекерия. Но тук си оказват влияние и много външни фактори. Примерно Instagram навремето когато са били малка компания са направили нещата така – снимаш и сървъра горе пушва във фийда на потребителите, че имаш нова снимка. И това е работело перфектно защото хората са имали по 200-300 последователя. Във следвашия момент Тейлър Суифт си прави селфи и целия код отива на кино защото трябва да бъде изпълнен 20 милиона пъти.
Та идеята е, че ако разработчика знае всички неща на конкретната база данни и е достатъчно кадърен може да направи чудеса. Обаче повечето не са…