{"id":70,"date":"2024-02-25T09:16:29","date_gmt":"2024-02-25T09:16:29","guid":{"rendered":"https:\/\/blog.fubuha.com\/?p=70"},"modified":"2024-06-27T09:59:30","modified_gmt":"2024-06-27T09:59:30","slug":"modern-data-warehouse-porownanie-synapse-dedicated-pool-z-standarowa-baza-ms-sql","status":"publish","type":"post","link":"https:\/\/blog.fubuha.com\/index.php\/2024\/02\/25\/modern-data-warehouse-porownanie-synapse-dedicated-pool-z-standarowa-baza-ms-sql\/","title":{"rendered":"Modern data warehouse &#8211; por\u00f3wnanie synapse dedicated pool z standarowa baza ms sql"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>Standardowy data warehouse czy synapse dedicated pool?<br><br><\/strong>Wyb\u00f3r pomi\u0119dzy MS SQL &amp; Synapse Dedicated Pool zale\u017cy od konkretnych potrzeb organizacji i rodzaju przetwarzania danych, kt\u00f3re maj\u0105 by\u0107 obs\u0142ugiwane.<\/p>\n\n\n\n<p>MS SQL Server to tradycyjna baza danych typu relacyjnego o architekturze monolitycznej, kt\u00f3ra dzia\u0142a na pojedynczym serwerze lub klastrze serwer\u00f3w.<\/p>\n\n\n\n<p>Platforma Synapse Dedicated SQL Pool to zaawansowane rozwi\u0105zanie bazodanowe typu MPP o architekturze rozproszonej, kt\u00f3re umo\u017cliwia r\u00f3wnoczesne przetwarzanie na wielu w\u0119z\u0142ach.<\/p>\n\n\n\n<p>Czym jest modern data warehouse?<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"796\" height=\"518\" src=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/mdw_model.png\" alt=\"\" class=\"wp-image-73\" srcset=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/mdw_model.png 796w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/mdw_model-300x195.png 300w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/mdw_model-768x500.png 768w\" sizes=\"(max-width: 796px) 100vw, 796px\" \/><\/figure>\n\n\n\n<p><br><br>Nowoczesna hurtownia danych to zaawansowane podej\u015bcie do zarz\u0105dzania danymi i analizy, kt\u00f3re integruje dane z r\u00f3\u017cnych \u017ar\u00f3de\u0142 i umo\u017cliwia efektywn\u0105 analiz\u0119 oraz raportowanie. G\u0142\u00f3wne cechy nowoczesnej hurtowni danych:<\/p>\n\n\n\n<ul>\n<li>Integracja danych z r\u00f3\u017cnych \u017ar\u00f3de\u0142<\/li>\n\n\n\n<li>Przechowywanie danych w hurtowni danych<\/li>\n\n\n\n<li>Rozproszone przetwarzanie danych:<\/li>\n\n\n\n<li>Elaboracja danych (ETL\/ELT)<\/li>\n\n\n\n<li>Wsparcie dla danych nierelacyjnych<\/li>\n\n\n\n<li>Analiza danych w czasie rzeczywistym<\/li>\n\n\n\n<li>Wsparcie dla analizy zaawansowanej i uczenia maszynowego<\/li>\n\n\n\n<li>Dost\u0119p do danych za po\u015brednictwem interfejs\u00f3w self-service<\/li>\n\n\n\n<li>Elastyczno\u015b\u0107 i skalowalno\u015b\u0107<\/li>\n\n\n\n<li>Bezpiecze\u0144stwo i zgodno\u015b\u0107<\/li>\n<\/ul>\n\n\n\n<p>Modern data warehouse to zaawansowana platforma, kt\u00f3ra integruje i zarz\u0105dza danymi z r\u00f3\u017cnych \u017ar\u00f3de\u0142, takimi jak bazy danych, chmurowe us\u0142ugi lub aplikacje, w spos\u00f3b efektywny i skalowalny. To umo\u017cliwia organizacjom gromadzenie, przetwarzanie i analizowanie du\u017cych ilo\u015bci danych w czasie rzeczywistym lub w trybie wsadowym.<\/p>\n\n\n\n<p>\u00a0Platforma Azure oferuje narz\u0119dzia do analizy danych, takie jak Azure Synapse Analytics, kt\u00f3ry \u0142\u0105czy w sobie rozwi\u0105zania oparte na SQL takich jak dedicated pool oraz mo\u017cliwo\u015b\u0107 korzystania z rozwi\u0105za\u0144 serverless z u\u017cyciem notebook\u00f3w w technologii Spark. Ponadto, Azure zapewnia skalowalno\u015b\u0107 i elastyczno\u015b\u0107, co oznacza, \u017ce firmy mog\u0105 dostosowywa\u0107 swoje zasoby do zmieniaj\u0105cych si\u0119 potrzeb i rozmiar\u00f3w danych. To rozwi\u0105zanie pomaga organizacjom usprawni\u0107 zarz\u0105dzanie danymi, zwi\u0119kszy\u0107 efektywno\u015b\u0107 i konkurencyjno\u015b\u0107 na rynku.<\/p>\n\n\n\n<p>MS SQL vs Synapse<\/p>\n\n\n\n<p>SQL Engine to komponent w bazach danych relacyjnych, kt\u00f3ry obs\u0142uguje zapytania SQL nad danymi w bazie danych.W standardowym SQL Serverze pracujemy z \u015brodowiskiem SMP (symteric multi-processing). SMP oznacza, ze mamy pojedynczy storage, kt\u00f3ry jest po\u0142\u0105czony z CPUs, a zapytania s\u0105 r\u00f3wnolegle dla tych CPUs po przez service bus. Wszystkie CPUs potrzebuje dost\u0119pu do tego samego storage przez co pojawi\u0105 si\u0119 w\u0105skie gard\u0142o, szczeg\u00f3lnie gdy wywo\u0142ujemy du\u017ce zapytania<\/p>\n\n\n\n<p>.MPP to architektura przetwarzania danych, kt\u00f3ra umo\u017cliwia r\u00f3wnoczesne przetwarzanie du\u017cych ilo\u015bci danych na wielu w\u0119z\u0142ach obliczeniowych. MPP jest szczeg\u00f3lnie przydatne w kontek\u015bcie analizy danych i hurtowni danych.W MPP ka\u017cdy storage jest szeroko dystrybu\u0142owany i zapewnia pewn\u0105 okre\u015blon\u0105 liczbe oblicze\u0144. Ka\u017cdy node (w\u0119ze\u0142) jest tak naprawd\u0119 oddzielna baza SQL i posiada sw\u00f3j w\u0142asny storage, oddzielony od innych nod\u00f3w<\/p>\n\n\n\n<p>W SMP mo\u017ce istnie\u0107 rywalizacja o zasoby pami\u0119ciowe z powodu jednego punktu dost\u0119pu, ten problem jest rozwi\u0105zany w MPP gdy\u017c ka\u017cdy node ma w\u0142asny storage.<\/p>\n\n\n\n<p>Symetric multi-procesising<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/smp.jpg\" alt=\"\" class=\"wp-image-76\" width=\"360\" height=\"265\" srcset=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/smp.jpg 581w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/smp-300x221.jpg 300w\" sizes=\"(max-width: 360px) 100vw, 360px\" \/><\/figure>\n\n\n\n<p>Massively Parallel Processing Engine<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/mpp.png\" alt=\"\" class=\"wp-image-74\" width=\"340\" height=\"262\" srcset=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/mpp.png 440w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/mpp-300x231.png 300w\" sizes=\"(max-width: 340px) 100vw, 340px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Kluczow\u0105 spraw\u0105 jak\u0105 musimy zrozumie\u0107 pracuj\u0105c z Azure Synapse Analytics jest dystrybucja.<br><br>Round robin distribution:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>CREATE TABLE myTable<br>(<br>id int NOT NULL,<br>firstName varchar(20),<br>lastName varchar(20)<br>)<br>WITH<br>(<br>DISTRIBUTION = ROUND_ROBIN, CLUSTERED COLUMNSTORE INDEX<br>);<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"500\" height=\"269\" src=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/rrd-1.png\" alt=\"\" class=\"wp-image-78\" srcset=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/rrd-1.png 500w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/rrd-1-300x161.png 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/figure>\n\n\n\n<p>Hash distribution<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>CREATE TABLE myTable<br>(<br>id int NOT NULL,<br>&nbsp;firstName varchar(20),<br>lastName varchar(20)<br>)<br>WITH<br>(<br>DISTRIBUTION = HASH (id),<br>&nbsp;CLUSTERED COLUMNSTORE INDEX<br>);<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"579\" height=\"299\" src=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/hash.png\" alt=\"\" class=\"wp-image-72\" srcset=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/hash.png 579w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/hash-300x155.png 300w\" sizes=\"(max-width: 579px) 100vw, 579px\" \/><\/figure>\n\n\n\n<p>Kluczow\u0105 spraw\u0105 jak\u0105 musimy zrozumie\u0107 pracuj\u0105c z Azure Synapse Analytics jest dystrybucja.<br><\/p>\n\n\n\n<p><strong>Zagro\u017cenia po stronie Synapse Dedicated Pool:<\/strong><\/p>\n\n\n\n<p><strong>Primary key i indexy bez unique key<\/strong><\/p>\n\n\n\n<p>Niestety nie jeste\u015bmy wstanie zdefiniowa\u0107 unikalnego primary key i\/lub utworzy\u0107 unikalny index czy constrein. Mimo, \u017ce Synapse pozwoli nam utworzy\u0107 taki klucz lub index, b\u0119dziemy musieli wymusi\u0107, \u017ce nie musi by\u0107 unikalny<\/p>\n\n\n\n<p><strong>Identity column per node<\/strong><\/p>\n\n\n\n<p>Niestety funckja identity nie dzia\u0142a tak jakby\u015bmy tego chcieli. Ka\u017cdy identity tworzy si\u0119 na osobnym nodzie, przez co ich numeracja wyst\u0119puje losowo ale unikalnie dla ca\u0142ego control noda.<\/p>\n\n\n\n<p><strong>Data skew<\/strong><\/p>\n\n\n\n<p>Data skew ma miejsce, gdy dane nie s\u0105 prawid\u0142owo rozmieszczone w r\u00f3\u017cnych dystrybucjach pami\u0119ci masowej.<\/p>\n\n\n\n<p>Szybkim sposobem sprawdzenia Data Skew jest u\u017cycie DBCC PDW_SHOWSPACEUSED. Poni\u017cszy kod SQL zwraca liczb\u0119 wierszy tabeli przechowywanych w ka\u017cdym z 60 rozk\u0142ad\u00f3w. Aby zapewni\u0107 zr\u00f3wnowa\u017con\u0105 wydajno\u015b\u0107, wiersze tabeli rozproszonej powinny by\u0107 r\u00f3wnomiernie roz\u0142o\u017cone we wszystkich dystrybucjach.<\/p>\n\n\n\n<p>DBCC PDW_SHOWSPACEUSED(&#8216;dbo.FactInternetSales&#8217;);<\/p>\n\n\n\n<p><strong>Azure Synapse Concurency Slots<\/strong><\/p>\n\n\n\n<p>Azure Synapse Concurency Slots to liczba zapyta\u0144, kt\u00f3re mo\u017cna jednocze\u015bnie wykona\u0107 w bazie danych.<\/p>\n\n\n\n<p>Liczba miejsc wsp\u00f3\u0142bie\u017cno\u015bci zale\u017cy od liczby zasob\u00f3w przydzielonych do dedykowanej puli SQL us\u0142ugi Azure Synapse Analytics.<br><br>Na pocz\u0105tek w us\u0142udze Azure Synapse Analytics liczba wsp\u00f3\u0142bie\u017cnych miejsc zale\u017cy od jednostek magazynu danych (DWU) przydzielonych do dedykowanej puli SQL.<\/p>\n\n\n\n<p>Je\u015bli w bazie danych dzia\u0142a jednocze\u015bnie wiele zapyta\u0144 i jest dost\u0119pna wystarczaj\u0105ca liczba miejsc wsp\u00f3\u0142bie\u017cno\u015bci, niekt\u00f3re zapytania zostan\u0105 umieszczone w kolejce.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"196\" height=\"459\" src=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/dwu.png\" alt=\"\" class=\"wp-image-71\" srcset=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/dwu.png 196w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/dwu-128x300.png 128w\" sizes=\"(max-width: 196px) 100vw, 196px\" \/><\/figure>\n\n\n\n<p><strong>Typy danych<\/strong><\/p>\n\n\n\n<p>Oba systemy wspieraj\u0105 tylko tabularyczny zapis danych<\/p>\n\n\n\n<p>W Synapse nie ma mo\u017cliwo\u015bci u\u017cycia non\/semi-structured data<\/p>\n\n\n\n<p>Dla danych w formacie JSON preferuje si\u0119 zapis w formacie nvarchar(max) i wykorzystanie funkcji OPENJSON<\/p>\n\n\n\n<p>W Synapse nie powinno u\u017cywa\u0107 si\u0119 typu danych n\/varchar(max), zamiast tego lepiej stosowa\u0107 nvarchar(4000). Je\u017celi ju\u017c musimy u\u017cyc varchar czy nvarchar(max) mo\u017cemy ustawi\u0107 dystrybucje na heap.<\/p>\n\n\n\n<p><strong>Extrenal tables<\/strong><\/p>\n\n\n\n<p>W takim razie co z danymi non\/semi-structured data? Na te zapotrzebowanei przychodzi nam wirtualizacja danych za pomoc\u0105 external tables.<br>Tabela zewn\u0119trzna wskazuje dane znajduj\u0105ce si\u0119 w us\u0142udze Hadoop, obiekcie blob us\u0142ugi Azure Storage lub us\u0142udze Azure Data Lake Storage.<br>Tabele zewn\u0119trzne umo\u017cliwiaj\u0105 odczytywanie danych z plik\u00f3w lub zapisywanie danych w plikach w us\u0142udze Azure Storage.<\/p>\n\n\n\n<p>Tabele zewn\u0119trzne mo\u017cesz wykorzysta\u0107 do:<\/p>\n\n\n\n<p>Generowania zapyta\u0144 do us\u0142ugi Azure Blob Storage i Azure Data Lake Gen2 za pomoc\u0105 T-SQL.<\/p>\n\n\n\n<p>Przechowuj wyniki zapyta\u0144 w plikach w us\u0142udze Azure Blob Storage lub Azure Data Lake Storage przy u\u017cyciu technologii CETAS.<\/p>\n\n\n\n<p>Importuj dane z Azure Blob Storage i Azure Data Lake Storage i przechowuj je w dedykowanej puli SQL<br>Tabele zewn\u0119trzne w pulach SQL Synapse mo\u017cna tworzy\u0107, wykonuj\u0105c nast\u0119puj\u0105ce kroki:<\/p>\n\n\n\n<p>CREATE EXTERNAL DATA SOURCE, aby odwo\u0142ywa\u0107 si\u0119 do zewn\u0119trznego magazynu Azure i okre\u015bl po\u015bwiadczenia, kt\u00f3rych nale\u017cy u\u017cywa\u0107 w celu uzyskania dost\u0119pu do magazynu.<\/p>\n\n\n\n<p>CREATE EXTERNAL FILE FORMAT, aby opisa\u0107 format plik\u00f3w CSV lub Parquet.<\/p>\n\n\n\n<p>CREATE EXTERNAL TABLE na plikach umieszczonych w \u017ar\u00f3dle danych o tym samym formacie pliku.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Por\u00f3wnanie MS SQL vs Synapse Dedicated Pool<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"713\" src=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/tablemsvssyn-1024x713.png\" alt=\"\" class=\"wp-image-77\" srcset=\"https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/tablemsvssyn-1024x713.png 1024w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/tablemsvssyn-300x209.png 300w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/tablemsvssyn-768x535.png 768w, https:\/\/blog.fubuha.com\/wp-content\/uploads\/2023\/10\/tablemsvssyn.png 1289w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Standardowy data warehouse czy synapse dedicated pool? Wyb\u00f3r pomi\u0119dzy MS SQL &amp; Synapse Dedicated Pool zale\u017cy od konkretnych potrzeb organizacji i rodzaju przetwarzania danych, kt\u00f3re maj\u0105 by\u0107 obs\u0142ugiwane. MS SQL Server to tradycyjna baza danych typu relacyjnego o architekturze monolitycznej, kt\u00f3ra dzia\u0142a na pojedynczym serwerze lub klastrze serwer\u00f3w. Platforma Synapse Dedicated SQL Pool to zaawansowane&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"om_disable_all_campaigns":false,"inline_featured_image":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[1],"tags":[],"acf":[],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/posts\/70"}],"collection":[{"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/comments?post=70"}],"version-history":[{"count":2,"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/posts\/70\/revisions"}],"predecessor-version":[{"id":206,"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/posts\/70\/revisions\/206"}],"wp:attachment":[{"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/media?parent=70"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/categories?post=70"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.fubuha.com\/index.php\/wp-json\/wp\/v2\/tags?post=70"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}