Масштабирование баз данных

28
МАСШТАБИРОВАНИЕ БАЗ ДАННЫХ common sense

Upload: sqalab

Post on 16-Jun-2015

4.520 views

Category:

Education


2 download

DESCRIPTION

Доклад Евгения Шишкина на конференции Application Developer Days-4. г.Минск 13 декабря 2013

TRANSCRIPT

Page 1: Масштабирование баз данных

МАСШТАБИРОВАНИЕБАЗДАННЫХ

commonsense

Page 2: Масштабирование баз данных

ЕвгенийШишкинDBA,[email protected]

Page 3: Масштабирование баз данных

—WedefineaDBMSasacompletesoftwaresystemusedtodefine,create,manage,updateandqueryadatabase.

©Gartner

БДобщегоназначения,OldSQL:MySQL,PostgreSQL

Специализированные,NewSQL:VoltDB,Vertica,Clustrix

NoSQL:HBase,Cassandra,CouchDB,Aerospark,MongoDB

Page 4: Масштабирование баз данных

SCALABILITYISAFUNCTIONМыхотимдобавитьресурсовиработатьбыстрее

илиобрабатыватьбольше.

Amdahl'slawGustafson-Barsis'LawNeilJ.Gunther'sUniversalScalabilityLaw

Page 5: Масштабирование баз данных

Amdahl'slawУнасестьалгоритм,которыйоднопоточноработаетзавремяT1.МыхотимдобавитьPпроцессоровирешитьзадачубыстрее.КакоеувеличениепроизводительностиSмыможемполучить?

«Вслучае,когдазадачаразделяетсянанесколькочастей,суммарноевремяеёвыполненияна

параллельнойсистеменеможетбытьменьшевременивыполнениясамогодлинногофрагмента»

Page 6: Масштабирование баз данных

Amdahl'slaw

Ускорениеограниченотойчастьюработы,котораянепараллелизуется.

Например,еслисериализованнаячастьалгоритмасоставляеттолько0.1%,при2048процессорах

ускорениебудеттольков672раза.

Page 7: Масштабирование баз данных

Gustafson-Barsis'Law…speedupshouldbemeasuredbyscalingtheproblemtothe

numberofprocessors,notbyfixingtheproblemsize.—JohnGustafson

Вреальности,добившисьнужноговремениответасистемы,насвсёустраивает.Имыужедобавляеммощностиподрастущийразмер,анедлясокращениялатенси.

Page 8: Масштабирование баз данных

Gustafson-Barsis'Law

Еслиобъемданныхувеличиваетсявместесувеличениемчислапроцессоров,асериализованнячастьрастетмедленноилификсирована,ускорениерастетпропорциональноростуресурсов.

Page 9: Масштабирование баз данных

ЯНИЧЕГОНЕПОНЯЛРазницавтом,хотителивыускоренияпритойженагрузкеилитогожевремениответаприувеличениинагрузки.

ВреальнойжизнибольшеприменимзаконGustafson.

Но,есливамнадодобитьсяболеебыстройработыалгоритмапритехжеданных,руководствуйтесьзакономАмдала.

Page 10: Масштабирование баз данных

ТАККАКАЯЖЕБАЗАМАСШТАБИРУЕТСЯ

ЛУЧШЕ?Масштабироватьнадонебазу,асервис.Бессмысленнорассматриватьбазуданныхвотрывеотпрофилянагрузкииприложения.

Масштабированиеэтоспециализация.Базыданныхобщегоназначениявобщемслучаенемасштабируются.

Page 11: Масштабирование баз данных

UNIVERSALSCALABILITYLAW

CostofsharingresourcesDiminishingreturnsfromcontentionNegativereturnsfromincoherency

Page 12: Масштабирование баз данных

ТИПИЧНЫЕПРОФИЛИНАГРУЗКИ

oltpshort-requestprocessingwebolap/dwh

Page 13: Масштабирование баз данных

OLTPбукваTэтотранзакции-забылиnosqlсразужеможнонабитьлюбимуюбазуданныхдоотказапамятьюиssd,ноэтобудетпечальноинеэффективнокакнамсделать500kTPSнаодномсервере?никакпошардили?добропожаловатьвдивныймиралгоритмовраспределенногокоммита

Почемувсётакплохоработает?Вотredisжеделает200кнаодномядре!

Page 14: Масштабирование баз данных

OLTPобычнаябазаданных

Page 15: Масштабирование баз данных

OLTPПрорывнойресерчH-Storehttp://hstore.cs.brown.edu/ГотовыйпродуктVoltDB

mainmemorydatabase->nobufferpoolmanagementкаждомуcpuсвойкусочекпамятииоднопоточноевыполнение->нетлоковвсяработавхранимыхпроцедурахикучаресерча->

2pcиногданенуженивовремяожиданияможновыполнятьдругиетранзакции

Подробнеетутhttp://hstore.cs.brown.edu/publications/

Page 16: Масштабирование баз данных

OLTPВсеосновныесложностисраспределеннымитранзакциями.Рецепт-детерминизм.

Знаянапередвкакойпоследовательностибудутвыполнятьсятранзакции,унаснетожидания.Базаданныхвсегдаделаетполезнуюработу.

Подробноститутhttp://cs.yale.edu/homes/thomson/publications/calvin-sigmod12.pdf

Page 17: Масштабирование баз данных

SHORT-REQUESTPK/INDEXLOOKUP

Такаянагрузкамасштабируетсячемугодно.Ненадобытьсемипядейволбу,чтобыпошардитьPKРечьобэффективностииудобстве.

MySQLделает200krps,PostgreSQL120krps.Невероятно,норедкаяnosqlсистемапокажеттакиечисла.ЕстьMysqlCluster(NDB,негалера),естьPostgres-xc.NoSQL,которыеAP,работаютмедленнейCP.

Page 18: Масштабирование баз данных

WEBshort-request+joins+tonsoforderby+orm95%+чтенияпочтинеттранзакцийнебольшойобъемгорячихданныхdataskew(zipfiandistribution)

Намхватаетодногосервера,покаунегонекончаетсяCPU.MySQLCluster,Postgres-xc,Pgpoolипрочиешардяттолькопоодномуатрибуту.

Page 19: Масштабирование баз данных

WEBПредставьтесебетабличкуспостами

Идвапопулярныхзапроса:

Хочетсяпошардитьипоthread_id,post_idипоuser_id,posted_onВыбираятолькоодно,далеконеуехать.

createtablethread_posts(post_idbigint,thread_idbigint,user_idbigint,posted_ontimestamp,contentstext,primarykey(thread_id,post_id),key(user_id,posted_on));

select*fromthread_postswherethread_id=314orderbypost_id;select*fromthread_postswhereuser_id=546orderbyposted_ondesclimit10;

Page 20: Масштабирование баз данных

WEBНамнадо:отправлятьзапросытолькотуда,гдележатнашиданныеизбегатьраспределенныхзапросовбалансироватьнагрузку

Хорошийспособ:отвязатьлогическуюсхемуотфизической,чтобышардитьпоразныматрибутамиспользоватьconsistenthashingдлябалансированияданныхэтосделановClustrix

Page 21: Масштабирование баз данных

WEBСоветики

чтобыизбежатьзапросовнаноды,гдеданныхнетlookupтаблицаbloomfilter

можношардитьподвуматрибутамруками,делаядветаблицыможноденормализовать,помняпроupdate,deleteаномалииможноматериализовыватьданныепризаписи(pushмодель)длясверхпопулярныхпользователей(лента)

Page 22: Масштабирование баз данных

WEBЕслизаморочиться

Проблемаэффективногораспределенияданныхпонодамэтолокальностьданныхиоверхедрепликацииданных.

Научныйподходэтоположитьданныевместе,непохешу,ате,которыереальнозапрашиваютсявместе.Schism:aWorkload-DrivenApproachtoDatabaseReplicationandPartitioningTheLittleEngine(s)ThatCould:ScalingOnlineSocialNetworks

Page 23: Масштабирование баз данных

OLAP

огромныйобъемданныхогромныевыборкикучасортировокиджойноводнотипныерепортыхорошошардитсяхорошосжимается

Page 24: Масштабирование баз данных

OLAP

Можно:пошардитьрукамивзятьpostgres-xc,mysqlcluster,любойавтоматическийшардингидажеможноиспользоватьmaterializedview(аляpush)иможнодажечто-тоденормализовать

Page 25: Масштабирование баз данных

OLAPНужно:1.хранитьданныевколонкахсжатиевекторизованныйпроцессингэффективныйдоступкданным

2.оперироватьнадсжатымиданнымивпамяти3.делатьrowreconstructureтолькокогдаэтонеобходимо4.делатьjoinиндексыилиprejoinпроекции5.хранитьданныеужеотсортированными(mergejoinбесплатный)

Page 26: Масштабирование баз данных

OLAPВсеэти"нужно"сделанывVertica.ЧастьсделанавClouderaImpala.

Greenplumнеумеетcolumnstorage.Oracleнеумеетcolumnstorage.NoSQLнеумеетcolumnstorage.

DB2иMSSQLумеют,нонеMPP.

ПоловинаNewSQL,которыепроонлайнаналитику,этопростоinmemoryбазы.ОченьчастодажебезdictionaryкомпрессиииRLE.

Page 27: Масштабирование баз данных

SQLVSNOSQLПредставьтесебеnosqlбазуданных,котораяумеетsecondaryindexesумеетэффективновыполнятьчастьзапросовусебяумееттранзакциидаетгарантии,когдаэтонеобходимо

Божемой,даэтожеRDBMS!

Page 28: Масштабирование баз данных

ВЫВОДЫИспользуйтенужнуюбазуданныхдлясвоейнагрузкиНемасштабируйтебазувотрывеотприложенияЕсливызнаете,какрешитьсвоюпроблемуNoSQLбазой,значитвызнаете,какрешитьпроблемуивRDBMSНеленитесьдуматьичитать