<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	 xmlns:media="http://search.yahoo.com/mrss/" >

<channel>
	<title>NoSQL &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<atom:link href="https://nearshore-it.eu/pl/tag/nosql-pl/feed/" rel="self" type="application/rss+xml" />
	<link>https://nearshore-it.eu/pl/</link>
	<description>We are Nearshore Software Development Company with 14years of experience in delivering a large scale IT projects in the areas of PHP, JAVA, .NET, BI and MDM.</description>
	<lastBuildDate>Thu, 07 Nov 2024 13:38:36 +0000</lastBuildDate>
	<language>pl-PL</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://nearshore-it.eu/wp-content/uploads/2023/01/cropped-inetum-favicon-300x300-1-32x32.png</url>
	<title>NoSQL &#8211; Nearshore Software Development Company &#8211; IT Outsourcing Services</title>
	<link>https://nearshore-it.eu/pl/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Big Data w chmurze Azure </title>
		<link>https://nearshore-it.eu/pl/artykuly/big-data-azure/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/big-data-azure/#respond</comments>
		
		<dc:creator><![CDATA[Sebastian Stefanowski]]></dc:creator>
		<pubDate>Wed, 07 Sep 2022 10:28:20 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Cloud engineering]]></category>
		<category><![CDATA[NoSQL]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/big-data-azure/</guid>

					<description><![CDATA[W ostatnich 5 latach Microsoft rozwinął, i to znacznie, portfolio usług przetwarzania danych na platformie chmurowej Azure. Jako Inetum Polska mieliśmy okazję obserwować ten rozwój z bliska – jeden z naszych największych klientów z branży aerospace zdecydował się budować nową generację swojego systemu w oparciu o platformę Azure. Rozwijając ten system na przestrzeni lat, zbudowaliśmy unikalne doświadczenie w tym zakresie. Oczywiście, nie jest możliwe nawet pobieżne opisanie usług Azure'a w jednym artykule, ale postaram się tutaj skupić na najciekawszych elementach i usługach tej platformy w kontekście wzorcowej architektury Big Data.]]></description>
										<content:encoded><![CDATA[
<p></p>



<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#Big-Data-w-chmurze-dla-każdego?">1.  Big Data w chmurze dla każdego?  </a></li>
                    <li><a href="#Ekosystem-Azure'a-a-architektura-Big-Data">2.  Ekosystem Azure&#8217;a a architektura Big Data </a></li>
                    <li><a href="#Usługi-składowania-danych-(bez-limitu)">3.  Usługi składowania danych (bez limitu) </a></li>
                    <li><a href="#Azure-Stream-Analytics-(AStA)-–-przetwarzanie-strumieniowe-PaaS">4.  Azure Stream Analytics (AStA) – przetwarzanie strumieniowe PaaS </a></li>
                    <li><a href="#Azure-Synapse-Analitics-i-Azure-Databricks-–-pojedynek-gigantów">5.  Azure Synapse Analitics i Azure Databricks – pojedynek gigantów </a></li>
                    <li><a href="#Azure-Synapse-Analytics-–-hurtownia-Big-Data">6.  Azure Synapse Analytics – hurtownia Big Data</a></li>
                    <li><a href="#Azure-Databricks-–-architektura-Lakehouse">7.  Azure Databricks – architektura Lakehouse </a></li>
                    <li><a href="#Cloud-przyszłością-Big-Data">8.  Cloud przyszłością Big Data  </a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Big-Data-w-chmurze-dla-każdego?">Big Data w chmurze dla każdego?&nbsp;&nbsp;</h2>



<p>Termin <strong>„Big Data” </strong>oryginalnie został stworzony ponad 30 lat temu, ale jak wszystko w IT, w ciągu 3 dekad ewoluował i rozwijał się, towarzysząc ekspansji Internetu i źródeł informacji. Do niedawna był to termin opisujący systemy, na które mogły sobie pozwolić jedynie wielkie korporacje i wiodące startupy z dużym finansowaniem – wymagało to wszak wielkich nakładów kapitałowych na rozproszone klastry utrzymujące infrastrukturę Big Data. Nic dziwnego, że na wyłuskiwaniu informacji w wielkiej skali zbudowały swoją potęgę takie korporacje jak Google czy Facebook. Liderzy obserwujący, co się dzieje na rynku, nie mogli zaprzeczyć, że zbieranie i analiza dużych zbiorów danych może dać wymierne korzyści biznesowe.&nbsp;&nbsp;</p>



<p>Chęć zbudowania nowej wartości w oparciu o wielkoskalową analizę danych rosła, ale brak było odpowiednich narzędzi, aby sprawdzić potencjał drzemiący w danych, jednocześnie zachowując rozsądne koszty (np. w modelu <strong><em>try-before-buy</em></strong>). Na tę potrzebę odpowiedzieli dostawcy platform chmurowych, oferując w ostatnich latach ogromną ilość usług zorientowanych na przetwarzanie danych – niektóre wprost w <strong>modelu PaaS</strong> (Platform-as-Service). W wyniku tego możemy zaobserwować eksplozję popularności systemów chmurowych Big Data. Po prostu dzisiaj już każdego stać na to, żeby spróbować wycisnąć ze swoich wielkich zbiorów danych maksimum informacji i… wartości.&nbsp;&nbsp;</p>



<p><a href="https://nearshore-it.eu/pl/artykuly/kim-jest-devops-i-jak-wspiera-projekty-it/">Przeczytaj także:<strong> Kim jest DevOps?</strong></a></p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="Ekosystem-Azure'a-a-architektura-Big-Data">Ekosystem Azure&#8217;a a architektura Big Data&nbsp;</h2>



<p>Na przestrzeni kilkunastu lat ugruntowały się dwa podstawowe modele wysokopoziomowej architektury Big Data – Lambda i Kappa. Model Lambda może uchodzić za fundamentalny. W jego skład wchodzą:&nbsp;</p>



<ul class="wp-block-list">
<li>Magazyny danych (ang. <em>Stores</em>).&nbsp;</li>



<li>Systemy przetwarzania wsadowego (ang. <em>Batch Layer</em>).&nbsp;</li>



<li>Systemy przetwarzania strumieniowego – w czasie zbliżonym do rzeczywistego (ang. <em>Speed Layer</em>, <em>Near-Realitme – Stream Processing Systems</em>).&nbsp;</li>



<li>Magazyny udostępniające dane i wyniki analiz (ang. <em>Serving Layer</em>).&nbsp;<br><br></li>
</ul>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_1.png" alt="Azure big data analytics " class="wp-image-67853" title="Big Data w chmurze Azure  1"><figcaption class="wp-element-caption">Źródło: materiały własne autora</figcaption></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>W modelu Lambda oba systemy przetwarzania danych są niezależne i równoległe. W międzyczasie powstała koncepcja architektury Kappa, w której model przetwarzania strumieniowego jest podstawowym elementem, a model przetwarzania wsadowego jest niejako procesem potomnym. Jest to model prostszy, ale bardziej wyspecjalizowany – odpowiedni w przypadku, gdy głównymi źródłami danych są dane napływające w czasie rzeczywistym (np. logi, tweety / wiadomości, komunikaty z urządzeń IoT).&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Usługi-składowania-danych-(bez-limitu)">Usługi składowania danych (bez limitu)&nbsp;</h2>



<p>Centralnym elementem każdego systemu Big Data są magazyny danych. W nich przechowujemy ogromne ilości surowych (nieprzetworzonych) danych, które zebraliśmy ze źródeł, ale także zbiory „potomne” powstałe w procesie transformacji, korelacji i analizy danych źródłowych. Azure umożliwia przechowywanie danych w dwóch typach magazynów: <strong>Azure Storage (AS) i Azure Data Lake Storage (ADLS). </strong>W przypadku obu usług rozliczani jesteśmy za rozmiar składowanych danych i operacje na nich wykonane (podstawowe: zapis i odczyt oraz inne). Magazyn Azure Storage oprócz możliwości składowania dużych plików (Blob) ma też „wbudowane” dodatkowe usługi:&nbsp;&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Files </strong>– serwer plików udostępniający pliki z wykorzystaniem protokołu SMB.&nbsp;&nbsp;</li>



<li><strong>Tables </strong>– <a href="https://nearshore-it.eu/pl/artykuly/nosql-vs-sql-bazy-danych" data-type="jpro" data-id="62738">Baza NoSQL</a> działająca na zasadzie Klucz / Wartość (<em>Key / Value</em>).&nbsp;&nbsp;</li>



<li><strong>Queues </strong>– prosty system kolejkowy wymiany danych.&nbsp;&nbsp;</li>
</ul>



<p>Ponieważ każda z tych „dodatkowych” usług może łatwo zostać zastąpiona przez dedykowaną usługę Azure, to ciągle podstawową funkcją AS i ADLS jest składowanie dużych zbiorów danych.&nbsp;&nbsp;</p>



<p>Przyjrzyjmy się im bardziej szczegółowo:&nbsp;</p>



<h3 class="wp-block-heading">Azure Blob Storage (ABS)&nbsp;&nbsp;</h3>



<p>ABS pojawił się na Azure kilka lat temu. Jego podstawowe cechy to:&nbsp;</p>



<ul class="wp-block-list">
<li>Składowanie danych bez limitu (standardowy limit – który jednak można usunąć – to ponad 5 PB).&nbsp;&nbsp;</li>



<li>Limit dla pojedynczego pliku danych (blob) to 4,7 TB.&nbsp;&nbsp;</li>



<li>Występuje w dwóch podstawowych rodzajach (ang. <em>Tiers</em>) Standard i Premium (Premium jest lepiej przystosowany do obsługi plików o mniejszych rozmiarach).&nbsp;</li>



<li>Umożliwia składowanie w kilku warstwach (ang. <em>Access Tiers</em>) – Premium, Hot, Cool, Archive różniących się ceną, wydajnością i kosztem operacji – im „zimniejsza” warstwa, tym tańsze składowanie (przestrzeń), ale wolniejsze i droższe są operacje dostępu do danych.&nbsp;</li>
</ul>



<h3 class="wp-block-heading">Azure Data Lake Storage (ADLS)&nbsp;</h3>



<p>Usługa ADLS została zbudowana jako rozszerzenie ABS, umożliwiając składowanie danych w hierarchicznym systemie plików (ang. <em>Hierarchical Namespace</em>) – ABS składuje bowiem bloby w prostym systemie plików, opartym na słowniku Klucz / Wartość (ang. <em>Flat Namespace</em>). Użycie hierarchicznego systemu plików to niewątpliwie udogodnienie, co można zaobserwować przy atomowych operacjach dotyczących dużej liczby blobów, jak np. przeniesienie w inne miejsce. ADLS z takim systemem plików jest też bardziej wydajny, ale są dwa punkty, w których przegrywa ze starszą usługą:&nbsp;</p>



<ol class="wp-block-list">
<li>Jest trochę droższy w zakresie koszów operacji na danych.&nbsp;&nbsp;</li>



<li>Ma nieznacznie ograniczone możliwości, jeżeli chodzi o zabezpieczenie przed wszelkiego rodzaju katastrofami – magazyn ADLS może mieć redundantną kopię w innym rejonie świata, ale przełączenie na kopię może być uruchomione jedynie przez Microsoft, gdy zorientuje się, że coś nie działa. W przypadku starszej usługi ASB kopię może przełączyć sam użytkownik z poziomu portalu Azure&#8217;a. Niby to drobnostka, ale w przypadku systemów krytycznych dla biznesu może mieć znaczenie.&nbsp;</li>
</ol>



<h2 class="wp-block-heading" id="Azure-Stream-Analytics-(AStA)-–-przetwarzanie-strumieniowe-PaaS">Azure Stream Analytics (AStA) – przetwarzanie strumieniowe PaaS&nbsp;</h2>



<p>Jedną z ciekawszych usług przetwarzania danych udostępnionych przez Microsoft na platformie Azure jest Azure Stream Analytics (na potrzeby tego artykułu będę posługiwał się skrótem<strong> AStA</strong>, dla odróżnienia od <strong>ASA – Azure Storage Account i Azure Sunapse Analytics)</strong>. Jako że jest to usługa strumieniowego przetwarzania danych udostępniona w modelu PaaS, nie dotkniemy tu „serwerów” ani nie wybierzemy rozmiaru pamięci naszego silnika przetwarzania danych. Prawie wszystkie parametry skali przetwarzania sprowadzają się do przypisania do zadania magicznego czynnika Streaming Units (SU). <strong>Większe ilości SU przyznają więcej mocy procesora, pamięci do zadania, a także przy większych ilościach SU – większą liczbę instancji przetwarzających strumień danych równolegle. </strong>Zadania AStA mogą być wykonywane na wirtualnych klastrach współdzielonych z innymi klientami Microsoftu (multi-tenant), jak również na izolowanym i dedykowanym klastrze (usługa Azure Stream Analytics Cluster) z zastrzeżeniem, że dedykowany klaster nie może alokować mniej jednostek niż 36 SU<strong> (oznacza to większy koszt startowy).&nbsp;</strong></p>



<p>AStA oferuje ciekawy sposób oprogramowania zadań przetwarzania strumieniowego. Zadania tworzy się tu w formie kwerendy (lub zestawu kwerend) z użyciem konkretnego rozszerzenia, języka T-SQL. Innymi słowy – kod zadania ASA wygląda jak SQL, z zastrzeżeniem, że niektóre „wirtualne tabele” z których ASA czyta i do których pisze, to w rzeczywistości źródła danych strumieniowych (zwykle kolejki) i zbiory wyjściowe (tu mamy pełną gamę możliwości zapisywania wyników do kolejek wyjściowych, zbiorów na Azure Storage, baz SQL i NoSQL, hurtowni czy systemu BI). Trudno się oprzeć wrażeniu, że jest to rozwiązanie odzwierciedlające możliwości platformy open-source zaproponowanej przez Confluent.io i opartej na <a href="http://jcommerce.local/kariera/biteit/biteit-60-apache-kafka-jako-rozproszony-system-strumieniowego-przesylania" data-type="bite-it" data-id="51984" target="_blank" rel="noopener">systemie Kafka</a> i języku KSQL.&nbsp;</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_2.png" alt="Azure big data analytics " class="wp-image-67857" title="Big Data w chmurze Azure  2"></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Jako że podstawą analizy strumieniowej jest analiza kontekstowa wymiarze czasu, to język T-SQL usługi ASA został wyposażony w specjalne funkcje pozwalające agregować wyniki kwerendy po kluczach i w odpowiednich interwałach czasowych (agregaty per okno czasowe). Mamy tutaj takie możliwości jak:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Tumbling Window </strong>– stała agregacja jedynie po czasie – podsumowanie i generowanie wyników następuje zawsze po określonej liczbie sekund (periodycznie).&nbsp;</li>



<li><strong>Hoping Window</strong> – stała agregacja po czasie z przesunięciem – okna czasowe, w których obliczane są wyniki, mogą na siebie zachodzić, okno następne może się zacząć przed zakończeniem poprzedniego.&nbsp;</li>



<li><strong>Sliding Window </strong>– dynamiczna agregacja po czasie z oknami czasowymi stałej długości – ale granice okien czasowych są wyznaczane przez kolejne rekordy pojawiające się na wejściu – okna czasowe zatem zaczynają się i kończą w nieustalonych z góry momentach.&nbsp;</li>



<li><strong>Session Window</strong> – dynamiczna agregacja po czasie z oknami czasowymi różnej długości – okno czasowe jest wydłużane (sesja), jeżeli wybrane rekordy pojawiają się odpowiednio często.&nbsp;</li>
</ul>



<p>Innymi ciekawymi rozszerzeniami T-SQL na użytek ASA są funkcje geolokacyjne (ang. <em>Geospatial Functions</em>) oraz natywne możliwości czytania rekordów wejściowych, które są zakodowane w postaci obiektów najczęściej transportowanych wielkoskalowymi kolejkami AVRO i JSON. Jeżeli ktokolwiek chce szybko zbudować w Azure system strumieniowy, to z pewnością użycie AStA jest jednym z pomysłów, które warto rozważyć.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Azure-Synapse-Analitics-i-Azure-Databricks-–-pojedynek-gigantów">Azure Synapse Analitics i Azure Databricks – pojedynek gigantów&nbsp;</h2>



<p>W ostatnim czasie podstawowym frameworkiem do analizy zbiorów Big Data stał się Spark. Jego niezaprzeczalne walory oparte na rozproszonym przetwarzaniu z użyciem samej tylko pamięci zostały docenione przez całą rzeszę użytkowników na świecie. Konsekwencją tej popularności jest pojawienie się Databricks – komercyjnej platformy początkowo zorientowanej na to redukowanie niedogodności związanych z zarządzaniem klastrami Sparka (Managed-Spark). W odpowiedzi na popularność Databricks Microsoft przygotował swoją wersję platformy analitycznej Big Data. Oba rozwiązania konkurują ze sobą, starając się sprostać wymaganiom nowoczesnych systemów Big Data – każdy w trochę innym modelu.&nbsp;&nbsp;</p>



<h2 class="wp-block-heading" id="Azure-Synapse-Analytics-–-hurtownia-Big-Data">Azure Synapse Analytics – hurtownia Big Data&nbsp;</h2>



<p>Azure Synapse Analytics wspiera bodaj najpopularniejszy model organizacji danych w nowoczesnych systemach danych. Wszystko zostało pomyślane w taki sposób, aby wspierać architekturę danych nazywaną kiedyś Two-Tier Data – zakładająca współistnienie dwóch równoległych głównych magazynów danych:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>DataLake</strong> – jako magazynu przechowującego dane nieustrukturyzowane oraz wstępnie przetworzone&nbsp;&nbsp;</li>



<li><strong>Hurtowni danych </strong>– jako źródła dla <a href="https://nearshore-it.eu/pl/artykuly/system-business-intelligence-narzedzie-do-precyzyjnego-zarzadzania" data-type="jpro" data-id="53275">systemów BI.&nbsp;</a></li>
</ul>



<p>Ten dwutorowy model powstał, gdy zorientowano się, że nie istnieje jedno rozwiązanie odpowiadające potrzebom wszystkich popularnych przypadków użycia danych. Hurtownie są znacznie wygodniejsze jako źródła danych dla systemów opartych na SQL (w tym BI), ale dużo mniej wygodne, jeżeli chodzi o eksplorację danych (<a href="https://nearshore-it.eu/pl/artykuly/ai-machine-learning-i-big-data-czym-sa-i-co-dalej" data-type="jpro" data-id="53773">Data Science</a>) oraz źródło danych do trenowania modeli sztucznej inteligencji (Machine Learning). Stąd pomysł, aby w systemie obydwa te byty istniały równolegle.&nbsp;</p>



<p></p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_3.png" alt="Microsoft Azure data lake " class="wp-image-67861" title="Big Data w chmurze Azure  3"></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Azure Synapse Analytics w pełni implementuje ten model. Centralnym elementem platformy jest tandem – wysoce skalowalna chmurowa hurtownia danych Azure Synapse DWH (<em>Built-in pool</em>) oraz środowisko zarządzalnych klastrów Spark do analiz danych w Data Lake. To jednak jeszcze nie wszystko. Pod jednym dachem Microsoft umieścił dodatkowe usługi przetwarzania danych.&nbsp;&nbsp;</p>



<p>Znajdziemy tu zintegrowane:&nbsp;</p>



<ul class="wp-block-list">
<li><strong>Data Factory </strong>– usługa integracji danych.&nbsp;</li>



<li><strong>Serverless SQL Pools</strong> – system serwerów SQL on-demand – gdzie użytkownik płaci jedynie za czas i zasoby zużyte do wykonania zapytania, bez ponoszenia kosztów serwera czy maszyny wirtualnej.&nbsp;</li>



<li><strong>Data Explorer</strong> – usługa analizy danych.&nbsp;</li>
</ul>



<p>Każdą z tych usług można oprogramować w ich natywnym języku (SQL, KustoQL, Python, Scala, a nawet C#).&nbsp;</p>



<p>Do dyspozycji mamy więc o wiele więcej niż prosty system hurtownia +&nbsp;Data Lake. Zyskujemy scentralizowaną platformę udostępniającą wszystko, co najlepsze pod dachem Microsoftu do analizy danych. Brawo za pomysł!&nbsp;</p>



<h2 class="wp-block-heading" id="Azure-Databricks-–-architektura-Lakehouse">Azure Databricks – architektura Lakehouse&nbsp;</h2>



<p><a href="https://azure.microsoft.com/en-us/services/databricks/" target="_blank" rel="noopener">Azure Databricks j</a>ako bezpośrednia konkurencja Azure Synapse Analytics realizuje trochę inny model. Ta strategia wynika z faktu, że Databricks powstał jako środowisko do łatwego zastosowania Sparka i koncepcja silnika Big Data jako centralnego elementu pozostała tu silnie zakorzeniona. W ciągu dwóch ostatnich lat Databricks zorientował się jednak, że sam Spark nie wystarczy. Wraz ze swoimi partnerami rozbudował platformę o dodatkowe funkcjonalności prowadzące do powstania kompletnie nowego modelu platformy danych – <strong>Lakehouse Architecture</strong>.&nbsp;&nbsp;</p>



<p>Koncepcja Lakehouse w skrócie bazuje na tym, że platforma ciągle polega na danych umieszczonych w Data Lake, ale udostępnia większość funkcjonalności dostępnych dotychczas tylko w hurtowniach:&nbsp;</p>



<ol id="block-f787f919-8dd8-4002-be92-eda2a76d28b1" class="wp-block-list">
<li>Transakcyjność – model ACID dla (niektórych) zbiorów Big Data.</li>



<li>Wsparcie wysoce wydajnego silnika zapytań SQL.</li>



<li>Mechanizmy kontroli dostępu do danych w Data Lake (Data Governance).</li>



<li>Wsparcie importu danych i orkiestracje ETL.</li>
</ol>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_4.png" alt="Big data - możliwości przetwarzania danych platformy Azure" class="wp-image-67837" title="Big Data w chmurze Azure  4"></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Model Lakehouse to naprawdę mała rewolucja. Zapewne nie będzie on aż tak wydajny jak model typu <a href="https://nearshore-it.eu/pl/artykuly/ewolucja-technik-modelowania-hurtowni-danych" data-type="jpro" data-id="53515">StarSchema</a> w dobrej hurtowni danych, ale koncepcja Lakehouse opiera się na paradygmacie taniego składowania dużych zbiorów danych. Stąd Databricks zakłada, że skoro składowanie danych jest tanie, mogą być one przechowywane i organizowane w redundantnych kopiach (tabelach) skierowanych pod konkretne zastosowania – przy jednoczesnym założeniu, że dane są klasyfikowane w ich zaawansowaniu (koncepcja klas tabel Bronze-Silver-Gold).&nbsp;&nbsp;</p>



<p>Patrząc z boku, Databricks zbliża się do koncepcji reprezentowanych przez innych konkurentów, np. do platformy Vertica z podobnym redundantnym i specjalizowanym modelem tabel.&nbsp;</p>



<h3 class="wp-block-heading">DeltaLake – transakcyjność Big Data&nbsp;</h3>



<p>Idea Lakehouse nie byłaby kompletna bez wspierania koncepcji transakcyjności. Oczywiście transakcyjności nie da się łatwo zaimplementować dla surowych i nieustrukturyzowanych danych, ale dla danych przetworzonych można się już o to pokusić. Do realizacji tego celu Databricks i partnerzy (Delta.io) zaproponowali nowy format zapisu tabel „zarządzanych” o nazwie „Delta”. Delta to rozszerzenie koncepcji tabel opartych na formacie Parquet, czyli kolumnowym formacie plikowym. </p>


<div class="wp-block-image">
<figure class="alignright size-full is-resized"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_5.png" alt="Batch processing using azure" class="wp-image-67841" style="width:375px;height:125px" title="Big Data w chmurze Azure  5"></figure></div>


<p>Delta zakłada, że obraz „tabeli” reprezentowanej przez zestaw plików w magazynie nie opiera się na prostej sumie wszystkich rekordów ze wszystkich plików danych. Obok plików z danymi Delta utrzymuje tzw. Delta-Log, czyli zestaw plików opisujący transakcje na zbiorze. Innymi słowy, przy zmianie zawartości tabeli w magazynie pojawiają się nowe wersje starych plików ze zmienionymi danymi, a informacja o zakończonej transakcji (o tym, że nowy plik jest ważniejszy niż stary) jest zapisywana w Delta-Logu. Ponieważ w tym samym momencie w zbiorach plików występują pliki z danymi z różnych okresów, w Delta-Logu przechowywane jest ich wersjonowanie. Dzięki tej prostej koncepcji tabele Delta mają cechy ACID, a przy tym… możliwa jest podróż w czasie, tzn. można poprosić o obraz tabeli z pewnego momentu w przeszłości. Oczywiście w dowolnym momencie możemy wyczyścić tabelę z plików / rekordów historycznych, co spowoduje zmniejszenie jej wielkości w magazynie danych.&nbsp;</p>



<h3 class="wp-block-heading">SQL Warehouse – SQL w służbie Big Data&nbsp;</h3>



<p>Natywnym językiem wielu rozwiązań klasy BI pozostaje SQL. Z tego powodu koncepcja Lakehouse musi uwzględniać jak najszersze wsparcie dla tego języka. Oczywiście podstawowa wersja silnika Sparka zawiera wbudowany „Spark SQL”, ale jego użyteczność była trochę ograniczona. W celu poprawienia tej sytuacji Databricks zaproponował nowy rodzaj silnika zapytań o nazwie Photon oraz nowy typ klastrów dla zapytań SQL – <strong>SQL Warehouses</strong> (albo SQL endpoints). Ze względu na to, że nowy silnik zapytań wykorzystuje mocno cache klastry SQL Warehouse trzeba opierać się na trochę mocniejszych maszynach <strong>(w Azure to Standard_E8ds_v4, czyli 8 vCore&#8217;ów i 64 GB pamięci). </strong>Zwiększony koszt pozostaje jednak pod kontrolą, ponieważ działają na nich wszystkie dotychczasowe mechanizmy autoskalowania w górę i w dół, aż do osiągnięcia limitów określonych przez administratora.&nbsp;&nbsp;</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.08.31_graphic_6.png" alt="Azure Data Lake " class="wp-image-67845" title="Big Data w chmurze Azure  6"></figure></div>


<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Z moich obserwacji wynika, że zastosowanie nowego silnika i nowych klastrów znacząco przyspieszyło wykonywanie zapytań SQL na zbiorach Big Data. Oczywiście ponieważ ciągle pod spodem mamy zbiory plikowe, warto pokusić się o stworzenie właściwej organizacji danych, nie wahając się przed tworzeniem redundantnych i dedykowanych zbiorów pod najbardziej krytyczne zapytania – po to, żeby umożliwić silnikowi skorzystanie z optymalizatorów wykorzystujących partycjonowanie oraz dane indeksów i metadane dostępne w niektórych typach plików (np. Delta).&nbsp;</p>



<h3 class="wp-block-heading">Unity Catalog – właściwy Data Governance w Data Lake&nbsp;</h3>



<p>Nie można by nazwać rozwiązania przygotowanego przez Databricks hurtownią danych bez rozbudowanego mechanizmu umożliwiającego zarządzanie danymi. W tym celu Databricks zaimplementował nowy, lepszy mechanizm „katalogu danych”, czyli metabazy przetrzymującej informacje o zbiorach danych i ich schematach widzianych jako tabele. W tradycyjnych środowiskach Big Data (również opartych na Sparku) ten element&nbsp;bazował na najpopularniejszym katalogu Hive Metastore albo katalogu Impala. Databricks zaproponował swoją własną wersję katalogu danych nazwaną<strong> Unity Catalog. </strong>Unity Catalog pozwala na rozbudowaną kontrolę nad zbiorami Big Data:&nbsp;</p>



<ul id="block-652fed0c-4323-43c8-a21d-562a1a031c36" class="wp-block-list">
<li>System zarządzania oparty na instrukcjach ANSI SQL.</li>



<li>Szczegółowy audyt i analizę logów dostępu do danych.</li>



<li>Przypisywanie uprawnień do zbiorów danych na poziomie konta użytkownika.</li>



<li>Wsparcie dla implementacji uprawnień na poziome rekordów (<em>Row-Level Security</em>) oraz kolumn (<em>Column-Masking Policy</em>).</li>



<li>Scentralizowane i bezpieczne przeszukiwanie metadanych – pozwalające zrozumieć, które zbiory / tabele Big Data zawierają jakie dane.</li>



<li>Wizualizacje powiązań między zbiorami – grafy przedstawiające zależności między zbiorami z uwzględnieniem uprawnień użytkownika korzystającego z tej funkcjonalności.</li>



<li>Lepsza efektywność kwerend zbiorów zarejestrowanych w Unity Catalog – wynikająca z określonego przeorganizowania katalogu i przetrzymywania jego zapisów w pamięci w skompresowanej formie.</li>
</ul>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Jak widać powyżej, korzyści, które wnosi nowy metastore Databricks, są rewolucyjne. Migracja zwykłego Hive Metastore do Unity Catalog jest prosta i na pewno warto to zrobić, żeby wynieść poziom zarządzania danymi na niespotykany dotąd poziom.&nbsp;</p>



<h3 class="wp-block-heading">Delta Sharing – udostępnianie danych na zewnątrz&nbsp;</h3>



<p>Najnowsza wersja platfrom Databricks wprowadza jeszcze jedną użyteczną funkcjonalność – w pełni kontrolowane udostępnianie danych na zewnątrz. Proces ten jest realizowany z użyciem rozwiązania Delta Sharing, które zostało wbud</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="750" height="585" src="https://nearshore-it.eu/wp-content/uploads/2022/09/jpro_2022.08.31_graphic_7.png.webp" alt="jpro 2022.08.31 graphic 7.png" class="wp-image-33045" title="Big Data w chmurze Azure  7" srcset="https://nearshore-it.eu/wp-content/uploads/2022/09/jpro_2022.08.31_graphic_7.png.webp 750w, https://nearshore-it.eu/wp-content/uploads/2022/09/jpro_2022.08.31_graphic_7.png-300x234.webp 300w, https://nearshore-it.eu/wp-content/uploads/2022/09/jpro_2022.08.31_graphic_7.png-495x386.webp 495w" sizes="(max-width: 750px) 100vw, 750px" /></figure>



<p>Takie rozwiązanie jest bardzo wygodne w&nbsp;przypadku gdy&nbsp;system Big Data został oparty na&nbsp;danych od&nbsp;wielu klientów (np.&nbsp;serwisów typu multi-tenant). Właściciel systemu Big Data ma&nbsp;dostęp do&nbsp;wszystkich udzielonych mu&nbsp;danych, mając jednocześnie możliwość udostępnienia określonych informacji/wyników na&nbsp;zewnątrz w&nbsp;taki sposób, aby jego indywidualni partnerzy mieli dostęp jedynie do&nbsp;swoich podzbiorów.&nbsp;</p>



<h2 class="wp-block-heading" id="Cloud-przyszłością-Big-Data">Cloud przyszłością Big Data&nbsp;</h2>



<p>Mój&nbsp;artykuł jedynie pobieżnie poruszył temat kilku ważnych usług z&nbsp;portfolio Azure. Żeby opisać je&nbsp;dokładnie, potrzebny byłby cały cykl.&nbsp;<strong>Mam nadzieję jednak, że&nbsp;treść zainteresowała was na&nbsp;tyle, aby spróbować swoich sił z&nbsp;tematem projektowania i&nbsp;implementacji systemów Big Data z&nbsp;użyciem Azure.</strong>&nbsp;Rewolucja oparta na&nbsp;danych trwa nadal. Warto się stać jej częścią. Jeżeli macie jakieś wątpliwości lub pytania służymy pomocą!&nbsp;&nbsp;</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/big-data-azure/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>NoSQL vs SQL, czyli kiedy i jaki typ bazy danych wybrać</title>
		<link>https://nearshore-it.eu/pl/artykuly/nosql-vs-sql-bazy-danych/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/nosql-vs-sql-bazy-danych/#respond</comments>
		
		<dc:creator><![CDATA[Piotr Rzeznik]]></dc:creator>
		<pubDate>Wed, 16 Feb 2022 09:58:39 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[NoSQL]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/nosql-vs-sql-bazy-danych/</guid>

					<description><![CDATA[Jednym z nieodłącznych elementów i zarazem wyzwań każdego projektu informatycznego jest kwestia przechowywania i przetwarzania dużych ilości danych. Na rynku dostępnych jest wiele rodzajów baz danych, a wybranie właściwej nie zawsze jest łatwe – głównym wyzwaniem jest tutaj wierne i logiczne odwzorowanie rzeczywistych procesów biznesowych danej domeny. Zatem kiedy i jaką bazę danych wybrać? Jakie bazy danych są dostępne? I w końcu – jakie możliwości dają nierelacyjne bazy danych NoSQL?]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title"></p>
    <ol>
                    <li><a href="#typy-baz-danych">1.  Typy baz danych</a></li>
                    <li><a href="#czym-w-ogole-jest-sql">2.  Czym jest SQL?</a></li>
                    <li><a href="#czym-jest-relacyjna-baza-danych">3.  Czym jest relacyjna baza danych?</a></li>
                    <li><a href="#jak-dzialaja-relacyjne-bazy-danych-sql">4.  Jak działają relacyjne bazy danych SQL?</a></li>
                    <li><a href="#typy-relacji">5.  Typy relacji</a></li>
                    <li><a href="#jak-dzialaja-nierelacyjne-bazy-danych-nosql">6.  Jak działają nierelacyjne bazy danych NoSQL?</a></li>
                    <li><a href="#nierelacyjne-bazy-danych-vs-relacyjne-bazy-danych">7.  Nierelacyjne bazy danych vs relacyjne bazy danych</a></li>
                    <li><a href="#kiedy-wybrac-nosql-a-kiedy-sql">8.  Kiedy wybrać NoSQL, a kiedy SQL</a></li>
                    <li><a href="#baza-nosql-i-sql-porownanie">9.  Baza NoSQL i SQL – porównanie</a></li>
                    <li><a href="#podsumowanie">10.  Podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="typy-baz-danych">Typy baz danych</h2>



<p>Do najpopularniejszych rodzajów baz danych między innymi należą:</p>



<ul class="wp-block-list">
<li>bazy relacyjne (np. MySQL),</li>



<li>bazy nierelacyjne (np. <a href="https://nearshore-it.eu/pl/artykuly/mongodb-nosql-w-ecommerce/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/mongodb-nosql-w-ecommerce/">MongoDB</a>, Oracle NoSQL database).</li>
</ul>



<h2 class="wp-block-heading" id="czym-w-ogole-jest-sql">Czym w ogóle jest SQL?</h2>



<p>SQL to nic innego jak język, jednakże jego przeznaczenie jest zgoła inne niż języków typu Java czy C#. <strong>SQL służy do konkretnych czynności, jakimi są dostęp do danych oraz ich modyfikacja. </strong>Będąc bardziej dokładnym, SQL oznacza <em>Structured Query Language.</em> Jest to język zapytań, który pozwala na pobranie określonych danych z bazy – w tym celu został stworzony: do uzyskania dostępu, przechowywania i edycji danych w relacyjnych bazach danych.</p>



<h2 class="wp-block-heading" id="czym-jest-relacyjna-baza-danych">Czym jest relacyjna baza danych?</h2>



<p>Relacyjną bazą danych jest rodzaj bazy, która przeważnie jest zbudowana z tabel. Pozwala to na dostęp do danych w relacji, które są częścią innych danych (tabeli) w tej samej bazie danych. Innymi słowy, przechowuje dane w wielu tabelach, które są ustrukturyzowane w kolumny i wiersze. Dzięki temu można wysyłać zapytania o dane z różnych tabel jednocześnie.</p>



<p>Relacyjna baza danych opiera się na modelu relacyjnym, a do zarządzania tym typem bazy używa się RDBMS (<em>Relational Database Management System</em>). Aby RDBMS mógł współpracować z wieloma rodzajami baz danych, do zarządzania i tworzenia zapytań używa się SQL, który jest w tym przypadku najpopularniejszym językiem.</p>



<h2 class="wp-block-heading" id="jak-dzialaja-relacyjne-bazy-danych-sql">Jak działają relacyjne bazy danych SQL?</h2>



<p>Relacyjne bazy danych są oparte na modelu relacyjnym. W modelu relacyjnym dane są przyporządkowane do jednej lub wielu tabel (lub „relacji”) kolumn i wierszy, który przyporządkowuje dane do jednej lub wielu tabel (lub „relacji”) kolumn i wierszy. Każdy wiersz w tabeli posiada unikalny identyfikator, po którym jest kojarzony. Z kolei każda tabela bazy danych przedstawia pewien rodzaj encji (przykładem encji może być „klient”). Wiersze tabeli przedstawiają konkretną instancję tej encji (np. klient – Jan Kowalski), a kolumny, zwane też atrybutami, przedstawiają szczegóły danego obiektu (np. imię, adres). Same relacje to nic innego jak dopasowanie danych w różnych tabelach na podstawie kluczy głównych i kluczy obcych.</p>



<h2 class="wp-block-heading" id="typy-relacji">Typy relacji</h2>



<p>Główne typy relacji to:</p>



<h3 class="wp-block-heading" id="1-1relacja-jeden-do-jednego-pomiedzy-dwoma-tabelami-zachodzi-ona-wtedy-gdy-kazdy-rekord-z-pierwszej-tabeli-ma-przyporzadkowany-dokladnie-jeden-rekord-z-drugiej-tabeli-i-na-odwrot-aby-zdefiniowac-relacje-jeden-do-jednego-nalezy-w-drugiej-tabeli-umiescic-wartosc-klucza-podstawowego-z-pierwszej-tabeli">1:1</h3>



<p id="1-1relacja-jeden-do-jednego-pomiedzy-dwoma-tabelami-zachodzi-ona-wtedy-gdy-kazdy-rekord-z-pierwszej-tabeli-ma-przyporzadkowany-dokladnie-jeden-rekord-z-drugiej-tabeli-i-na-odwrot-aby-zdefiniowac-relacje-jeden-do-jednego-nalezy-w-drugiej-tabeli-umiescic-wartosc-klucza-podstawowego-z-pierwszej-tabeli">Relacja jeden do jednego pomiędzy dwoma tabelami. Zachodzi ona wtedy, gdy każdy rekord z pierwszej tabeli ma przyporządkowany dokładnie jeden rekord z drugiej tabeli i na odwrót. Aby zdefiniować relację jeden do jednego, należy w drugiej tabeli umieścić wartość klucza podstawowego z pierwszej tabeli.</p>



<h3 class="wp-block-heading" id="1-w">1:W</h3>



<p>Relacja jeden do wielu również zachodzi pomiędzy dwoma tabelami. Występuje wtedy, gdy pojedynczy rekord z pierwszej tabeli posiada przyporządkowany jeden lub wiele rekordów z drugiej tabeli. Jednak druga tabela ma przyporządkowany jedynie jeden rekord z pierwszej tabeli.</p>



<h3 class="wp-block-heading" id="w-w">W:W</h3>



<p>Relacja wiele do wielu – taka relacja też zachodzi między dwoma tabelami. Pojedynczy rekord z pierwszej tabeli ma przyporządkowany jeden lub wiele rekordów z drugiej tabeli i na odwrót. W relacji wiele do wielu często tworzy się trzecią tabelę.</p>



<h2 class="wp-block-heading" id="jak-dzialaja-nierelacyjne-bazy-danych-nosql">Jak działają nierelacyjne bazy danych NoSQL?</h2>



<p>Nierelacyjne bazy danych są również nazywane bazami NoSQL. Nazwa pochodzi właśnie od podejścia do przechowywania i wyszukiwania danych w inny sposób niż w relacyjnych bazach danych opartych na SQL. Warto mieć na uwadze, że niektóre bazy nierelacyjne wspierają język SQL.</p>



<p>Bazy NoSQL charakteryzują się tym, że są w stanie obsłużyć dużą ilość nieustrukturyzowanych danych. Rozwiązania NoSQL nie są niczym nowym, jednak dopiero od kilkunastu lat gwałtownie zyskują na popularności właśnie ze względu na możliwości obsłużenia wielu danych, np. z urządzeń mobilnych, IoT czy Big Data.</p>



<h2 class="wp-block-heading" id="nierelacyjne-bazy-danych-vs-relacyjne-bazy-danych">Nierelacyjne bazy danych vs relacyjne bazy danych</h2>



<p><strong>Struktura</strong>:</p>



<ul class="wp-block-list">
<li>Bazy danych SQL przechowują dane w tabelach o stałej liczbie wierszy i kolumn.</li>



<li>Bazy NoSQL przechowują dane w następujący sposób:
<ul class="wp-block-list">
<li>Dokument (JSON)</li>



<li>Pary klucz – wartość (<em>key – value</em>)</li>



<li><a href="https://nearshore-it.eu/pl/artykuly/neo4j-zaproszenie-do-grafowych-baz-danych/" data-type="link" data-id="https://nearshore-it.eu/pl/artykuly/neo4j-zaproszenie-do-grafowych-baz-danych/">Grafowe bazy danych</a></li>
</ul>
</li>
</ul>



<p><strong>Schemat / Diagram</strong></p>



<ul class="wp-block-list">
<li>Bazy SQL wymagają stałego, wcześniej zdefiniowanego schematu. Wszystkie dane muszą mieć taką samą lub podobną strukturę. Przez to często przed rozpoczęciem prac trzeba mieć zebrane wstępne wymagania odnośnie do systemu. Ponadto elastyczność bazy może być narażona, biorąc pod uwagę, że modyfikacje (migracje) struktury mogą być skomplikowane i złożone.</li>



<li>Bazy NoSQL posiadają dynamiczny schemat dla danych nieustrukturyzowanych. Stała definicja schematu nie jest wymagana, przez co wprowadzenie zmian w strukturze jest łatwiejsze.</li>
</ul>



<p><strong>Skalowalność</strong></p>



<ul class="wp-block-list">
<li><strong>Bazy SQL skalują się wertykalnie, pionowo (tzw. <em>scale-up)</em>.</strong> Oznacza to, że jeśli chcemy zwiększyć ilość przechowywanych danych na pojedynczym serwerze, trzeba zwiększyć pamięć RAM, wydajność procesora lub pojemność dysku SSD. Skalowanie baz relacyjnych jest raczej trudniejsze. Żeby w wieloserwerowej bazie SQL zachować integralność danych w transakcjach, potrzebny jest backend pozwalający synchronizować wszystkie operacje zapisu i transakcje w celu uniknięcia zjawiska deadlocka (czyli zakleszczenia, wzajemnej blokady akcji).</li>
</ul>



<ul class="wp-block-list">
<li><strong>Bazy NoSQL skalują się horyzontalnie, poziomo (<em>scale-out</em>).</strong> Oznacza to, że skalowanie odbywa się przez zwiększenie liczby serwerów. Operacje JOIN pozwalają na łączenie i powiązanie części danych. Ogólnie rzecz biorąc, bazy danych NoSQL nie są zaprojektowane do wydajnej obsługi operacji typu JOIN, ale dają taką możliwość. Dane mogą znajdować się na różnych serwerach w bazach NoSQL, gdzie łączenie tabel z wielu serwerów może być kłopotliwe. NoSQL umożliwia łatwe skalowanie poprzez sharding danych. Posiadanie warstwy routingu pozwala przekierować zapytanie do odpowiedniego shardu, dzięki czemu bazy danych NoSQL są wysoce skalowalne i umożliwiają szybką obsługę zapytań.</li>
</ul>



<p><strong>Zapytania</strong></p>



<ul class="wp-block-list">
<li>Język SQL istnieje od ponad 30 lat, dlatego jest powszechnie używany, popularny i cieszy się dobrą opinią. Jest niezwykle wydajny, jeśli chodzi o zapytania, operacje i pobieranie danych z relacyjnych baz danych. Dodatkowo wyróżnia się również deklaratywnością (to znaczy, że pozwala opisać to, co ma być z jego pomocą wykonane). Zaletą SQL jest to, że całkiem łatwo można się go nauczyć. Oznacza to, że analitycy biznesowi czy inni pracownicy niezwiązani z programowaniem mogą z niego korzystać bez większych problemów.</li>
</ul>



<ul class="wp-block-list">
<li>Jeżeli chodzi o zapytania NoSQL, może to nie być tak proste jak przy użyciu SQL w bazach relacyjnych, ponieważ zwykle wymaga dodatkowego przetwarzania danych i nie ma jednego deklaratywnego języka zapytań. Dlatego zadania z wykorzystaniem NoSQL są zwykle wykonywane przez programistów.</li>
</ul>



<p>Podsumowując, sposób uruchamiania zapytań w bazach NoSQL w dużej mierze zależy od bazy. Na przykład w MongoDB, aby zażądać danych z bazy dokumentów JSON, należy określić dokumenty z właściwościami, do których wyniki powinny być dopasowane, i zastosować następującą funkcję: <em><strong>db.collection.find()</strong></em></p>



<p>Inne popularne rozwiązania mogą obejmować tworzenie funkcjonalności wysyłania zapytań bezpośrednio w warstwie aplikacji (a nie w warstwie bazy danych) lub implementację MapReduce, platformy ułatwiającej przetwarzanie dużych zbiorów danych.</p>



<h2 class="wp-block-heading" id="kiedy-wybrac-nosql-a-kiedy-sql">Kiedy wybrać NoSQL, a kiedy SQL</h2>



<p>Teraz, gdy już znamy główne różnice pomiędzy SQL i NoSQL, spróbujmy odpowiedzieć na pytanie: kiedy wykorzystać relacyjne bazy danych, a kiedy nierelacyjne? Jak to często bywa w IT – decyzja zależy od wielu składowych. W tym wypadku główne kwestie do rozważenia to:</p>



<ol style="list-style-type:1" class="wp-block-list">
<li>Rodzaj danych</li>



<li>Sposób zarządzania bazą danych</li>



<li>Ilość danych</li>
</ol>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.02.16_graphic2.png" alt="noSQL database" class="wp-image-62749" title="image-on-desktop"/></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading" id="kiedy-wybrac-sql">Kiedy wybrać SQL?</h3>



<p>Odnosząc się do pierwszej składowej, rodzaju danych – w tym wypadku<strong> bazy relacyjne sprawdzą się lepiej niż bazy NoSQL, jeżeli spójność i integralność danych jest kluczowa.</strong></p>



<p>Powszechne jest przekonanie, że relacyjne bazy danych nie są dobrym wyborem do obsługi dużej ilości danych. To stwierdzenie jest nie do końca prawdziwe. <strong>Wiele baz danych typu MySQL czy PostgreSQL radzi sobie bardzo dobrze z dużą ilością danych. </strong>Bazy relacyjne posiadają stały, ustalony schemat i wymagają danych, które są ustrukturyzowane. Utrzymanie takiej struktury, spójności i wydajności może się okazać bardzo trudne, jeśli z pomocą bazy relacyjnej będziemy obsługiwać biznes związany z Big Data.</p>



<p>Na pierwszy rzut oka mogłoby się wydawać, że stała struktura może być ograniczająca, jednak nie ma tu reguły. Posiadanie stałej, odgórnie zdefiniowanej struktury sprawia, że <strong>bazy SQL są lepszą opcją do obsługi systemów płatniczych czy też systemów rezerwacji. </strong>Ciekawostką jest, że większość instytucji finansowych opiera się właśnie na relacyjnych bazach danych. <strong>Relacyjne bazy zapewniają transakcyjność, czyli integralność danych i ich prawidłowość. </strong>SQL może czasami ograniczać pewne funkcjonalności, ale z drugiej strony jest bardzo dojrzałą i sprawdzoną technologią.</p>



<h3 class="wp-block-heading" id="kiedy-wybrac-nosql">Kiedy wybrać NoSQL?</h3>



<p>Bazy NoSQL są w stanie przechowywać różne rodzaje danych i nie muszą być one żaden sposób ustrukturyzowane. <strong>Dlatego nierelacyjne bazy danych zapewniają większą elastyczność i są dobrym wyborem do obsługi dużej ilości danych bez wspólnej struktury.</strong></p>



<p>Przeważnie im bardziej rozbudowany jest zbiór danych, tym większe prawdopodobieństwo, że baza NoSQL będzie lepszym wyborem. Bazy nierelacyjne mają dobre predyspozycje względem skalowalności i dostępności, przez co <strong>jest to idealne rozwiązanie dla aplikacji, które działają w czasie rzeczywistym (np. gry hazardowe online, komunikatory).</strong></p>



<h3 class="wp-block-heading" id="jaka-baze-danych-zatem-wybrac">Jaką bazę danych zatem wybrać?</h3>



<p>Żeby odpowiedzieć na to pytanie, należy najpierw <strong>zrozumieć domenę. </strong>Jaki efekt próbuje się osiągnąć? W obecnych czasach często wybór między SQL i NoSQL nie jest kwestią tego, której bazy użyć, tylko tego, <strong>kiedy i gdzie używać każdej z tych baz w ramach tej samej aplikacji czy systemu.</strong></p>



<p>Osobiście pracuję nad aplikacją, w której użycie bazy NoSQL było – nie zagłębiając się w szczegóły – najbardziej sensowne, jednak ta sama aplikacja wymagała też raportów. Żeby uniknąć nadmiernych problemów i analiz, uznałem, że wykorzystam oba typy baz danych. Użyłem NoSQL dla aplikacji internetowej i desktopowej oraz SQL dla samych raportów. Informacje są przechowywane w bazie NoSQL, a tylko dane wymagane do raportów są przesyłane do bazy SQL.</p>



<h2 class="wp-block-heading" id="baza-nosql-i-sql-porownanie">Baza NoSQL i SQL – porównanie</h2>


<div class="wp-block-image image-on-desktop">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/jpro_2022.02.16_graphic1.png" alt="nierelacyjna baza danych - not only sql a baza relacyjna sql" class="wp-image-62755" title="NoSQL vs SQL, czyli kiedy i jaki typ bazy danych wybrać 8"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="podsumowanie">Podsumowanie</h2>



<p>Wybór odpowiedniej bazy danych nie jest łatwy, nawet dla ekspertów, a podjęcie decyzji, czy wybrać relacyjne, czy nierelacyjne bazy może zależeć od wielu czynników. Należy również wziąć pod uwagę, jak wiele opcji jest dostępnych na rynku w zakresie baz SQL i NoSQL. Na przykład, w przypadku dużej ilości nieustrukturyzowanych danych dobrym rozwiązaniem mogą być bazy <strong>CouchDB lub MongoDB.</strong> Jednak w przypadku, gdy priorytetem będzie wysoka dostępność, lepszym wyborem mogą okazać się <strong>Redis i Cassandra.</strong></p>



<p>Z drugiej strony bazy danych SQL oferują wiele korzyści w zakresie transakcji na danych i ich ogólnej integralności. Co więcej, relacje w nich można łatwo zidentyfikować i zdefiniować, co ułatwia wyciąganie wniosków z krytycznych spostrzeżeń.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/nosql-vs-sql-bazy-danych/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>MongoDB – idealny system bazodanowy dla e-commerce?</title>
		<link>https://nearshore-it.eu/pl/artykuly/mongodb-nosql-w-ecommerce/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/mongodb-nosql-w-ecommerce/#respond</comments>
		
		<dc:creator><![CDATA[Adam Sosinski]]></dc:creator>
		<pubDate>Wed, 12 Jan 2022 12:27:32 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[e-commerce]]></category>
		<category><![CDATA[NoSQL]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/mongodb-nosql-w-ecommerce/</guid>

					<description><![CDATA[Jednym z kluczowych wyzwań dla programistów, architektów oraz managerów zaangażowanych w projekty e-commerce jest wybór odpowiedniej bazy do przechowywania danych reprezentujących towar czy usługę. Analogicznie do tego jak fizycznie towary przechowywane są w magazynach, tak w świecie wirtualnym informacje o nich przechowywane są w bazach danych. Wybierając system do zarządzania bazą danych (DBMS) na potrzeby e-commerce, trzeba zwrócić uwagę na kilka kwestii: elastyczność, wysoką dostępność, niezawodność, obsługiwanie wielu zapytań oraz  aktualność danych. Jednym z popularnych systemów odpowiadających na te potrzeby jest MongoDB, którego możliwości omówię w tym artykule.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Idź do: </p>
    <ol>
                    <li><a href="#E-commerce-to-nie-tylko-sklepy-internetowe">1.  E-commerce to nie tylko sklepy internetowe</a></li>
                    <li><a href="#Wyzwania-systemów-bazodanowych-w-e-commerce">2.  Wyzwania systemów bazodanowych w e-commerce</a></li>
                    <li><a href="#Co-wybrać:-nierelacyjne-bazy-danych-czy-relacyjne-bazy-danych?">3.  Co wybrać: nierelacyjne bazy danych czy relacyjne bazy danych?</a></li>
                    <li><a href="#Czym-jest-MongoDB?">4.  Czym jest MongoDB?</a></li>
                    <li><a href="#NoSQL-w-e-commerce,-czyli-co-MongoDB-może-zaoferować-branży?">5.  NoSQL w e-commerce, czyli co MongoDB może zaoferować branży?</a></li>
                    <li><a href="#Podsumowanie">6.  Podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="E-commerce-to-nie-tylko-sklepy-internetowe">E-commerce to nie tylko sklepy internetowe</h2>



<p><a href="https://nearshore-it.eu/pl/artykuly/najwazniejsze-trendy-w-e-commerce-w-2021-roku">E-commerce</a>&nbsp;to nic innego jak handel przeniesiony do Internetu. Przy czym mówimy tu o samej transakcji kupna-sprzedaży, gdyż płatność i dostawa mogą być realizowane w sieci, jak i poza nią. Najbardziej znanym i przez część osób utożsamianym z tym pojęciem rodzajem handlu są sklepy internetowe. Należy jednak nadmienić, że poza e-sklepami możemy jeszcze wyróżnić serwisy aukcyjne, e-kantory, bankowość elektroniczną czy platformy bukmacherskie.</p>



<h2 class="wp-block-heading" id="Wyzwania-systemów-bazodanowych-w-e-commerce">Wyzwania systemów bazodanowych w e-commerce</h2>



<p>System bazodanowy w e-commerce to narzędzie do zadań specjalnych.</p>



<p>Dobrze skonfigurowany system bazodanowy powinien:</p>



<ul class="wp-block-list">
<li>zagwarantować dostępność danych 24/7</li>



<li>utrzymać szybkość odpytywania w okresie wzrostu użycia</li>



<li>zapisywać ogromne ilości danych</li>



<li>informować w sposób dynamiczny i ciągły o zmianach (np. dostępności danego produktu)</li>
</ul>



<p>W tym celu firmy e-commerce powinny postawić na skalowalność bazy danych. To istotne zwłaszcza w czasie peaków w e-commerce, takich jak Black Friday, Cyber Monday i związaną z nimi zwiększoną liczbą zapytań. </p>



<p><strong>Przeczytaj także: </strong><a href="https://nearshore-it.eu/pl/artykuly/5-najpopularniejszych-narzedzi-do-analizy-danych-biznesowych">5 najpopularniejszych narzędzi do analizy danych biznesowych</a></p>



<h2 class="wp-block-heading" id="Co-wybrać:-nierelacyjne-bazy-danych-czy-relacyjne-bazy-danych?">Co wybrać: nierelacyjne bazy danych czy relacyjne bazy danych?</h2>



<p>Zastanówmy się trochę głębiej nad przechowywaniem danych dla usług e-commerce. Do wyboru mamy kilka typów baz danych, przy czym najbardziej znane są relacyjne (SQL) i nierelacyjne (NoSQL). Przyjrzyjmy się różnicom między nimi. Żeby być bardziej precyzyjnym, SQL jest to Structured Query Language, czyli język do pozyskiwania danych z bazy relacyjnej. Przyjęło się jednak tego typu bazy danych nazywać „bazami SQL”, zatem tej nazwy będę używał przy porównywaniu. Upraszcza to też zapamiętanie nazwy drugiego rodzaju baz, czyli NoSQL, które często określa się po prostu jako „nie SQL”.</p>



<p>Przechodząc do różnic, możemy wyróżnić 5 podstawowych, które zebrałem w tabeli poniżej:</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>SQL</strong></td><td><strong>NoSQL</strong></td></tr><tr><td>jasno zdefiniowane relacje między danymi</td><td>brak relacji, dane są luźno powiązane</td></tr><tr><td>dane przechowywane w tabelach</td><td>dane przechowywane w dokumentach, grafach, jako tzw. klucz-wartość</td></tr><tr><td>zdefiniowany schemat</td><td>dynamiczny schemat, nieuporządkowane dane</td></tr><tr><td>preferowany przy operacjach na wielu wierszach</td><td>preferowany, gdy szybkość pozyskania danych jest istotna</td></tr><tr><td>skalowalne wertykalnie</td><td>skalowalne horyzontalnie</td></tr></tbody></table></figure>



<p></p>



<p>Jak widać, bazy NoSQL idealnie wpisują się w wymagania i potrzeby rynku e-commerce w kontekście dostępności i przechowywania danych. Obecnie najpopularniejszym systemem bazodanowym tego typu jest MongoDB.</p>



<h2 class="wp-block-heading" id="Czym-jest-MongoDB?">Czym jest MongoDB?</h2>



<p>MongoDB to dokumentowa baza danych zaprojektowana z myślą o łatwości tworzenia i skalowania. Dokumenty są tworzone i przechowywane w formacie <strong>BSON, czyli Binary JSON. </strong>Zastosowanie JSON oznacza, że ​​bardzo łatwo jest przekonwertować zapytania i wyniki do formatu, który rozumie kod frontendowy, w którym napisana jest aplikacja e-commerce. Jest też on bardziej czytelny dla człowieka. To rozwiązanie NoSQL obejmuje hierarchiczność, automatyczne fragmentowanie i wbudowaną replikację dla lepszej skalowalności i wysokiej dostępności.</p>



<p>Mając już obraz tego, jakie są główne wyzwania w e-commerce, oraz upewniając się, że MongoDB to dobry wybór w kontekście przechowywania danych, możemy zastanowić się nad odpowiedzią na pytanie: <strong>co MongoDB może zaoferować branży e-commerce?</strong></p>



<h2 class="wp-block-heading" id="NoSQL-w-e-commerce,-czyli-co-MongoDB-może-zaoferować-branży?">NoSQL w e-commerce, czyli co MongoDB może zaoferować branży?</h2>



<h3 class="wp-block-heading" id="dynamiczne-schematy">Dynamiczne schematy</h3>



<p>Dzięki dynamicznym schematom dokumenty w kolekcji nie muszą posiadać tych samych pól, a i dane pole może mieć różne typy w zależności od dokumentu. Zwiększa to elastyczność mapowania na encje czy obiekty. Praktyka pokazuje jednak, że struktura dokumentów wewnątrz kolekcji jest podobna. Aby to zagwarantować, MongoDB wprowadziło możliwość ustawienia reguł walidacyjnych na kolekcję.</p>



<h3 class="wp-block-heading" id="latwa-hierarchizacja-danych">Łatwa hierarchizacja danych</h3>



<p>Zastosowanie formatu JSON pozwala na łatwą hierarchizację danych. Możemy to zrobić poprzez osadzenie jednego dokumentu wewnątrz drugiego lub poprzez przekazanie referencji. Użycie jednej bądź drugiej metody powinno być rozpatrywane indywidualnie dla każdej kolekcji. Zalecane jest stosowanie osadzenia, ponieważ pozwala to pozyskać dane w wyniku pojedynczego zapytania, co zwiększa wydajność systemu. Referencje warto rozważyć dla bardziej skomplikowanych reprezentacji hierarchii bądź w sytuacji, kiedy korzyści z zagnieżdżenia nie przeważają nad skutkami duplikacji danych (takimi jak np. potrzeba monitorowania zmian przy podmianie danych) </p>



<h3 class="wp-block-heading" id="replikacja">Replikacja</h3>



<p>MongoDB używa konceptu nazwanego <strong>Replica Set,</strong> czyli zestawu node’ów zawierających te same dane. Umożliwia to replikację danych, której celem jest <strong>zwiększenie dostępności oraz zabezpieczenie się przed awariami serwerów bazodanowych.</strong> Dobrze zaprojektowana architektura pozwala również na szybszy dostęp do danych.</p>



<p>Kluczowe założenia i mechanizmy replikacji omówimy na podstawie poniższego schematu:</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image is-style-default">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/JPro_2022.01.12_graphic1_MongoDB.png" alt="nosql w ecommerce" class="wp-image-59525" title="MongoDB – idealny system bazodanowy dla e-commerce? 9"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>



<p>Zestaw replik składa się z jednego node’a, tzw. członka głównego (<em>Primary</em>), oraz członków drugorzędnych (<em>Secondary</em>). Istnieje też specjalny członek takiego zestawu, sędzia (<em>Arbiter</em>), który nie posiada kopii danych, ale służy do wybierania zastępcy w przypadku niedostępności głównego serwera.</p>



<p>Operacje zapisu wykonywane są wyłącznie na głównej instancji, z której później mechanizm wbudowany MongoDB kopiuje dane na pozostałe. Operacje odczytu domyślnie również przechodzą przez wiodącą instancję, ale istnieje możliwość skonfigurowania node’ów, tak aby to poboczne serwery służyły do obsługi zapytań, przy czym może to się wiązać z wystąpieniem tzw. eventual-consistency, czyli z opóźnioną aktualnością danych.</p>



<p>Istotny dla całej koncepcji replikacji jest <strong>mechanizm taktowania (<em>heartbeat</em>).</strong> Każdy z node’ów (<em>members</em>) co 2 sekundy odpytuje pozostałe w celu sprawdzenia ich dostępności. W przypadku gdy serwer główny jest niedostępny, następuje wybór nowego. Proces ten polega na wybraniu spośród pozostałych instancji tej, która ma ustawiony najwyższy priorytet. Dokumentacja stwierdza, że replika może posiadać do 50 node’ów, przy czym tylko 7 z nich może brać udział w wyborze (<em>voting</em>), i to spośród nich wybierany jest następca. Pozostałe serwery, nazwane <em>Non-Voting members,</em> muszą mieć właściwości <em>votes</em> i <em>priority</em> ustawione na 0. Zaleca się, aby liczba instancji z możliwością głosowania była nieparzysta, stąd też minimalna liczba &nbsp;node’ów w replice to 3.</p>



<h3 class="wp-block-heading" id="fragmentacja">Fragmentacja</h3>



<p>Fragmentacja polega na podzieleniu zestawu danych na mniejsze części, dzięki czemu możemy skalować horyzontalnie, praktycznie w nieskończoność. MongoDB do obsługi fragmentacji używa klastra, który składa się z następujących elementów:</p>



<ul class="wp-block-list">
<li><em>Shard</em>, czyli zestawu replik, który zawiera część kolekcji (<em>Chunk</em>)</li>



<li>Router, który działa trochę jak load balancer i na podstawie konfiguracji przekazuje polecenia do odpowiedniej podkolekcji, żeby zrównoważyć obciążenie</li>



<li><em>Config server</em>, przechowujący metadane i konfigurację klastra</li>
</ul>



<p>Zależności pomiędzy komponentami przedstawia poniższy schemat:</p>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/JPro_2022.01.12_graphic_MongoDB.png" alt="nosql database real time analysis" class="wp-image-59543" title="MongoDB – idealny system bazodanowy dla e-commerce? 10"></figure></div>


<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Istotne w przypadku fragmentacji danych jest dobranie odpowiedniego klucza oraz strategii.</p>



<p>Wybierając pole dokumentu, którego chcemy użyć jako klucza, powinniśmy rozważyć:</p>



<ul class="wp-block-list">
<li><strong>Kardynalność </strong>– czyli na jak wiele elementów możemy podzielić kolekcję względem klucza</li>



<li><strong>Powtarzalność </strong>– czy któraś wartość nie pojawia się zdecydowanie częściej niż pozostałe</li>



<li><strong>Jednostajność </strong>– czy nowe wartości klucza nie są wzrastające / malejące w sposób liniowy</li>



<li><strong>Częstotliwość zapytań</strong> – klucz powinien być wykorzystywany w najczęstszych zapytaniach</li>
</ul>



<p><strong>Jeżeli chodzi o strategie, mamy do dyspozycji dwie:</strong></p>



<h3 class="wp-block-heading" id="hashed-sharding">Hashed Sharding</h3>



<p>Przy tej strategii MongoDB automatycznie generuje <em>Hash</em> z wartości pól kluczy. Sprawdza się ona w przypadku gdy wartości klucza zmieniają się jednostajnie. Zastosowanie hasha zwiększa równomierne rozdzielenie dokumentów pomiędzy udziałami (<em>Shards</em>). Minusem jest to, że w przypadku zapytań o dany zakres mało prawdopodobne jest, iż wszystkie dokumenty będą w jednym udziale. Skutkuje to odpytywaniem wszystkich części kolekcji (<em>chunks</em>), ponieważ router nie jest w stanie jednoznacznie określić, w którym udziale znajdują się szukane dokumenty.</p>



<h3 class="wp-block-heading" id="ranged-sharding">Ranged Sharding</h3>



<p>Każdy z udziałów przechowuje części kolekcji w danym zakresie wartości klucza. Strategia ta sprawdza się<ins>,</ins> kiedy zbiór wartości dla klucza jest duży, ale powtarzalność każdej z nich jest mała. Ogromną zaletą jest możliwość ukierunkowania zapytania na konkretny udział bądź &nbsp;kolekcję, co znacząco wpływa na szybkość odpytywania.</p>



<p>Dzieleniem na części oraz ich rozmieszczaniem zajmuje się wbudowany mechanizm MongoDB, który dba o równe ich rozdystrybuowanie oraz stara się utrzymać zbliżoną wielkość każdego z nich. Decydując się na fragmentację, należy pamiętać, że MongoDB nie oferuje metody scalenia danych, a jedynie możliwość ponownej fragmentacji po innym kluczu.</p>



<h3 class="wp-block-heading" id="strumienie-zmian">Strumienie zmian</h3>



<p>Od wersji 3.6 MongoDB pozwala nasłuchiwać zmian w wybranej kolekcji, bazie lub całym systemie, z wyjątkiem kolekcji<strong> admin, lokal i config.</strong> Odbywa się to poprzez otwarcie kursora, który pozwala iteracyjnie przechodzić po zdarzeniach związanych z danym zakresem. Ponieważ mechanizm ten używa agregacji, możemy również nasłuchiwać konkretnych zmian czy też modyfikować odebrane notyfikacje. Podstawowym wymaganiem jest użycie zestawu replik, gdyż powiadomienie następuje w momencie zapisu zmiany na większości z tych, które są odpowiedzialne za przechowywanie danych.</p>



<p>Strumienie zmian wykorzystują specjalną, ograniczoną kolekcję <strong>oplog</strong>, która przechowuje informację o operacjach wpływających na aktualny stan danych. Dokumenty w tej kolekcji rotują, oznacza to, że nowy dokument w przypadku osiągnięcia limitu rozmiaru kolekcji powoduje usunięcie najstarszych. Dlatego należy dobrać odpowiedni rozmiar dla tej kolekcji, zależny od częstotliwości występowania zdarzeń, tak aby możliwe było przechwycenie wybranego, zanim zostanie ono usunięte.</p>



<h2 class="wp-block-heading" id="Podsumowanie">Podsumowanie</h2>



<p>Wartość polskiego rynku e-commerce w 2020 r. przekroczyła <strong>100 mld zł,</strong> jednocześnie według raportu „E-commerce w Polsce 2021”, opracowanego przez Gemius dla e-Commerce Polska, <strong>aż 77% Polaków deklaruje, że kupuje online.</strong> Wskazuje to wyraźny, utrzymujący się już od dłuższego czasu trend przenoszenia się handlu do Internetu. Według prognoz tak dynamiczny rozwój e-handlu w Polsce utrzyma się jeszcze przez kilka najbliższych lat.</p>



<p>Klienci mają coraz większe wymagania co do stron internetowych czy aplikacji. Do najważniejszych czynników zwiększających tzw. User Experience należą <strong>dostępność, szybkość i niezawodność.</strong> Dobrze skonfigurowany system bazodanowy taki jak MongoDB jest odporny na awarie, skalowalny i pozwala na hierarchizację i zapis sporych ilości danych, zatem w pełni odpowiada na potrzeby projektów e-commerce. &nbsp;</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/mongodb-nosql-w-ecommerce/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Neo4j – zaproszenie do grafowych baz danych</title>
		<link>https://nearshore-it.eu/pl/artykuly/neo4j-zaproszenie-do-grafowych-baz-danych/</link>
					<comments>https://nearshore-it.eu/pl/artykuly/neo4j-zaproszenie-do-grafowych-baz-danych/#respond</comments>
		
		<dc:creator><![CDATA[Marcin Jawor]]></dc:creator>
		<pubDate>Tue, 26 Nov 2019 09:08:32 +0000</pubDate>
				<category><![CDATA[Artykuły]]></category>
		<category><![CDATA[Technologie]]></category>
		<category><![CDATA[NoSQL]]></category>
		<guid isPermaLink="false">https://nearshore-it.eu/artykuly/neo4j-zaproszenie-do-grafowych-baz-danych/</guid>

					<description><![CDATA[Popularność grafowych baz danych ciągle rośnie. Jak jednak dokonać wyboru bazy danych i czy grafowe bazy sprawdzą się w każdym projekcie? W dzisiejszym artykule chciałbym przyjrzeć się zaletom grafowych baz danych i zachęcić możliwie jak najwięcej osób z branży programistycznej do korzystania z wszelkich dobrodziejstw, jakie mogą wnieść do codziennej pracy developera. Skupię się szczególnie na moim ulubionym reprezentancie tego gatunku, którym jest Neo4j.]]></description>
										<content:encoded><![CDATA[
<div class="table-of-contents">
    <p class="title">Idź do:</p>
    <ol>
                    <li><a href="#Czym-jest-grafowa-baza-danych-?">1.  Czym jest grafowa baza danych?</a></li>
                    <li><a href="#Wybór-bazy-danych">2.  Wybór bazy danych</a></li>
                    <li><a href="#Zalety-Neo4j">3.  Zalety Neo4j</a></li>
                    <li><a href="#Co-to-znaczy-że-Neo4j-jest-bazą-NoSQLową-?">4.  Co to znaczy, że Neo4j jest bazą NoSQLową?</a></li>
                    <li><a href="#Wyszukiwarka-połączeń-autobusowych-case-study">5.  Wyszukiwarka połączeń autobusowych – case study</a></li>
                    <li><a href="#Kłopotliwy-RDBMS">6.  Kłopotliwy RDBMS</a></li>
                    <li><a href="#RDBMS-pełne-Joinów">7.  RDBMS pełne Joinów</a></li>
                    <li><a href="#RDBMS-pełne-podzapytań">8.  RDBMS pełne podzapytań</a></li>
                    <li><a href="#Case-study-użycie-grafu-Neo4j">9.  Case study: użycie grafu Neo4j</a></li>
                    <li><a href="#Podsumowanie">10.  Podsumowanie</a></li>
            </ol>
</div>


<h2 class="wp-block-heading" id="Czym-jest-grafowa-baza-danych-?">Czym jest grafowa baza danych?</h2>



<p>Neo4j (<a href="https://neo4j.com/" target="_blank" rel="noopener">https://neo4j.com/</a>) jest jedną z najpopularniejszych, o ile nie najpopularniejszą grafową bazą danych. Dla przypomnienia i uporządkowania wiedzy: <strong>graf jest kompozycją dwóch typów elementów, jakimi są węzły i relacje</strong>. Węzeł może reprezentować określony typ lub kilka typów i posiada swoje właściwości (ang. properties). Relacje zaś poza nazwą i własnymi właściwościami posiadają – co najistotniejsze – kierunek oddziaływania. Wspomniane właściwości są kolekcjami par klucz – wartość. Służą do przechowywania istotnych informacji. Dla przykładu: jeżeli węzłem będzie osoba, to jej właściwościami mogą być: imię, nazwisko, wiek albo lista ulubionych książek.</p>



<p>Relacje między węzłami w Neo4j – jak i w grafowych bazach danych w ogóle – są tak samo ważnymi danymi jak węzły. Traktujemy je jak obiekty, których istnienie jest determinowane przez obecność danych węzłów. Występowanie relacji samodzielne nie ma żadnego uzasadnienia.</p>



<p>Relacje znane z baz danych typu RDBMS (Relational Database Management System) zazwyczaj będą nam się kojarzyć z oznaczaniem danych w jakimś wierszu z jednej tabeli jako mających swoje odzwierciedlenie w konkretnym wierszu innej tabeli. Pozwoli nam to na operacje kaskadowe podczas edycji lub usuwania danych. Podczas normalizowania modelu danych w RDBMS możemy się zetknąć z koniecznością wprowadzenia specjalnych tabel pośredniczących między dwoma tabelami służącymi do wiązania ze sobą całych grup wierszy. </p>



<p><strong>Czytaj także: <a href="https://nearshore-it.eu/pl/artykuly/test-driven-development-na-co-dzien/">Poznaj korzyści Test-Driven Development na co dzień</a></strong></p>



<h2 class="wp-block-heading" id="Wybór-bazy-danych">Wybór bazy danych</h2>



<p>Wciąż jeszcze w wielu środowiskach panować może przeświadczenie, że RDBMS są najlepsze do wszelkiego rodzaju zadań. Osoby decyzyjne w zakresie doboru baz danych mogą nieprzychylnie spoglądać na alternatywne rozwiązania do przechowywania danych, a za taką zwykło się dotąd uważać właśnie Neo4j. <strong>Jak rozsądnie dokonać wyboru bazy lub baz danych do wykorzystania w projekcie? Przede wszystkim wybór powinien być zdeterminowany przez stojące przed aplikacją zadania. </strong></p>



<p>Już na etapie projektowania aplikacji, jeszcze na etapie wyboru bazy danych, warto zastanowić się nad kilkoma kwestiami:</p>



<ul class="wp-block-list">
<li>jakie operacje będą w przyszłości wykonywane na gromadzonych danych?</li>



<li>czy zadaniem aplikacji będzie zapisywanie i odczytywanie danych bez żadnych bardziej skomplikowanych operacji?</li>



<li>może najistotniejsze będą wzajemne relacje między danymi, a program powinien pomagać w ich analizie?</li>
</ul>



<p>Wybór bazy uzależniony jest więc od tego, jaka jest podstawowa funkcja projektowanej aplikacji i charakter danych. Czy będą to dane osób zatrudnionych w konkretnej organizacji, współtworzących jej strukturę organizacyjną, a aplikacja, którą tworzysz, będzie służyć do zapewnienia sprawnego obiegu dokumentów między pracownikami? <strong>Może masz do opracowania wyszukiwarkę połączeń lotniczych? Albo aplikację, która zapewni wsparcie logistyczne dla firmy transportowej? A może dostałeś supertajne zlecenie dla rządowych służb specjalnych polegające na zaimplementowaniu systemu wspierającego zarządzanie siatką agentów i informatorów?</strong> W ostatnim przykładzie rzeczywiście fantazja nieco mnie poniosła, ale głównie dlatego, że możliwości, jakich dostarcza nam grafowa baza danych, są naprawdę ogromne.</p>



<p>Jednak nie zawsze przestrzega się zasady dopasowania bazy danych do celu aplikacji, a zwolennicy nowych i często bardziej odpowiednich rozwiązań muszą zmagać się ze sceptycyzmem managerów („Przecież nikt nie korzysta z tych rozwiązań”).</p>



<h2 class="wp-block-heading" id="Zalety-Neo4j">Zalety Neo4j</h2>



<p>Jakie wielkie musi być zaskoczenie i zdumienie oponentów, gdy po wejściu na stronę główną projektu Neo4j ich oczom ukazują się liczne logotypy światowych marek czy instytucji rządowych albo badawczych. Od firm medycznych, przez instytuty naukowo-badawcze, po firmy finansowe, transportowe, telekomunikacyjne i wojskowe. Pełna obszerna lista oraz case studies dostępne są <a href="https://neo4j.com/" target="_blank" rel="noopener">na stronie projektu.</a> To smakowity kąsek dla wszystkich zajmujących się analizą i modelowaniem danych oraz architektów aplikacji.</p>



<p>Jak widać, popularność Neo4j i grafowych baz danych ciągle rośnie.<strong> W wielu rankingach, w tym w moim prywatnym, baza danych Neo4j jest jednym z liderów takich rozwiązań.</strong> Warto wspomnieć o tym, że twórcy Neo4j zadbali o przyjazne zorganizowanie Clusteringu i pracy w chmurze, a najczęściej stosowanym rozwiązaniem jest Neo4j pracujący na AWS – co również przemawia na jej korzyść.</p>



<p>Warto pamiętać, że jako narzędzie Neo4j jest mocno wspierane zarówno przez współczesne narzędzia do pisania kodu, jak i popularne frameworki, na przykład Spring Framework w projekcie „<a href="https://spring.io/projects/spring-data-neo4j" target="_blank" rel="noopener">Spring Data Neo4j</a>”. To, że grafowa baza danych jest tak intensywnie rozwijana, dobrze wróży na przyszłość.</p>



<h2 class="wp-block-heading" id="Co-to-znaczy-że-Neo4j-jest-bazą-NoSQLową-?">Co to znaczy, że Neo4j jest bazą NoSQLową?</h2>



<p>Tak jak bazy danych z grupy RDBMS korzystają z języka zapytań SQL, tak Neo4j korzysta z języka Cypher. W obu przypadkach są to języki deklaratywne. O ile składniowo Cypher jest w wielu aspektach podobny do SQL, o tyle jedną z najczęściej wskazywanych różnic jest użycie słowa kluczowego <strong>MATCH</strong> w miejsce <strong>SELECT</strong>. &nbsp;Inną jest wykorzystanie – w znaczeniu dosłownym – strzałek relacji.</p>



<p>Cypher to język bardzo elastyczny pod względem możliwości budowania zapytań. Widać to dobrze choćby w takich przykładach jak ten, gdzie przeprowadzamy dopasowanie warunkowe. W SQL zawsze warunek umieścimy w klauzuli <strong>WHERE</strong>, zaś w Cypher dodatkowo może zostać zawarty już podczas deklaracji węzła. Możemy tworzyć interesujące i przydatne zapytania złożone z etapów przy wykorzystaniu klauzuli <strong>WITH</strong>.</p>



<p>Bardzo ważna, a często nawet kluczowa, jest czytelność zapytań, którą tu odnajdujemy. Godna uwagi jest również łatwość pisania zapytań dla osób, które mają zrozumienie pojęcia grafu i zetknęły się z pisownią zapytań w SQL.</p>


<div class="special-content-box style-1">
    <div class="box">
                <div class="content">
                                </div>
    </div>
</div>



<h2 class="wp-block-heading" id="Wyszukiwarka-połączeń-autobusowych-case-study">Wyszukiwarka połączeń autobusowych – case study</h2>



<p>Zaprezentowany przeze mnie niżej przykład aplikacji do rezerwacji biletów zaczerpnięty został z życia. Problem, z którym się mierzyłem, zaistniał kilka lat temu, głównie przez przywiązanie osób decyzyjnych do rozwiązań uznanych za sprawdzone i niechęci do rozeznania w gronie developerskim w poszukiwaniu nowych możliwości.</p>



<p><strong>Projekt:</strong> aplikacja, która służy do rezerwacji biletów autobusowych.</p>



<p><strong>Produkt końcowy:</strong> rezerwacja miejsca i zakup biletu. Z racji zbyt dużej złożoności tematu ograniczmy się jednak wyłącznie do wyszukiwarki połączeń.</p>



<p><strong>Działanie aplikacji:</strong> zanim użytkownik zarezerwuje bilet, powinien najpierw wskazać przystanek, z którego zechce odjechać, oraz przystanek docelowy z listy dostępnych.</p>



<p><strong>Modelowanie:</strong> w podejściu zgodnym z RDBMS do zamodelowania tego obszaru będziemy potrzebować przynajmniej trzech tabel. Pierwszą będzie rejestr przystanków, drugą – rejestr tras, na których zlokalizowane są przystanki. W trzeciej tabeli do konkretnych tras przypiszemy poszczególne przystanki.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_1.png" alt="Schemat tabel i relacji zgodny z RDBMS" class="wp-image-24954" title="Neo4j – zaproszenie do grafowych baz danych 11"><figcaption class="wp-element-caption"><em>Rysunek 1. Schemat tabel i relacji zgodny z RDBMS</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>



<h2 class="wp-block-heading" id="Kłopotliwy-RDBMS">Kłopotliwy RDBMS</h2>



<p>Warto zwrócić uwagę na pewien typowy problem tabeli z odwzorowanymi relacjami pomiędzy poszczególnymi wierszami spajanych tabel. Występujące w niej wiersze zawierają komórki wypełnione nieczytelnymi liczbami należącymi zwykle do indeksowanych kluczy głównych tabel w relacji. Rozszyfrowywanie pochodzenia i znaczenia tych numerów może niekiedy wymagać sporego wysiłku. Tym większego, im bardziej złożona jest tabela. W naszym przykładzie taka spajająca tabela mogłaby wyglądać na przykład tak:</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_2.png" alt="Tabela Neo4j" class="wp-image-24955" title="Neo4j – zaproszenie do grafowych baz danych 12"><figcaption class="wp-element-caption"><em>Tabela 1. Przykładowy fragment możliwej zawartości tabeli 'track_bus_stop’</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Takie „twory” znajdziemy w relacjach typu „Many-to-Many”. Mogą być one szczególnie uciążliwe, gdy w projekcie jest sporo tabel, zdefiniowanych kluczy obcych i relacji.<strong> Są też problematyczne, gdy istnieje cała masa danych w skryptach potrzebnych do zasilania testowych instancji baz danych w celu integracyjnej weryfikacji poprawności implementacji.</strong> Sytuacja często kluczowa w developmencie. Nierzadko trzeba się solidnie napracować, żeby przygotować nowe rekordy danych z zachowaniem relacji do tabel pośredniczących. Dane w wierszach muszą być unikalne albo dopasowane do wzorca, zgodne z innymi danymi „nienullowymi” z co najmniej dziesięciu innych tabel. Może się zdarzyć tak, że w modelu danych zaczynają – np. przez nieuwagę – pojawiać się odwołania cykliczne. Wówczas bez wykonania operacji wyłączenia wszystkich ograniczeń na bazie, nie jest możliwe ani dalsze dodawanie nowych danych, ani nawet zaimportowanie do niej prawidłowych danych.</p>



<h2 class="wp-block-heading" id="RDBMS-pełne-Joinów">RDBMS pełne Joinów</h2>



<p>Przejdźmy do pierwszego kroku przy użyciu wyszukiwarki połączeń. Będzie to wyszukiwanie przez pasażera wszystkich możliwych tras przypisanych do wybranego przystanku.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_3.png" alt="Neo4j schemat" class="wp-image-24956" title="Neo4j – zaproszenie do grafowych baz danych 13"><figcaption class="wp-element-caption"><em>Listing 1. Zapytanie w SQL do wyszukania nazw wszystkich tras, do których należy przykładowy przystanek „Pstrągowa”</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>



<p>Co interesującego właśnie się stało? <strong>Dane z trzech osobnych tabel na tym etapie scaliły się w zapytaniu w jedną i możemy wybrać z niej te wiersze, które zawierają szukany przystanek.</strong> Jeżeli jedną trasę określa nam N składających się na nią przystanków połączonych z nią nazwami tras, to odrzucamy wszystkie wiersze, w których przypisany przystanek jest inny niż wskazany przez nas.</p>



<p>Poniżej przykład tabeli wynikowej przed okrojeniem jej z wierszy o innej nazwie przystanku niż zadany:</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image is-resized"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_4.png" alt="Tabela przedstawiająca zbiór najważniejszych danych z tabel tras i przystanków zestawionych ze sobą za pośrednictwem tabeli &#039;track_bus_stop&#039;" class="wp-image-24957" style="width:1068px;height:813px" title="Neo4j – zaproszenie do grafowych baz danych 14"><figcaption class="wp-element-caption"><em>Tabela 2. Tabela przedstawiająca zbiór najważniejszych danych z tabel tras i przystanków zestawionych ze sobą za pośrednictwem tabeli 'track_bus_stop&#8217;</em></figcaption></figure>



<div style="height:2px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>



<p>Po odrzuceniu wierszy, w których nazwa przystanku nie odpowiada wskazanej przez nas, otrzymujemy taki oto zbiór wierszy, który następnie należy odpowiednio przyciąć poprzez odrzucenie ewentualnych powtórzeń.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_5.png" alt="Neo4j grafika" class="wp-image-24958" title="Neo4j – zaproszenie do grafowych baz danych 15"><figcaption class="wp-element-caption"><em>Tabela 3. Zbiór unikalnych nazw tras, do których należy wskazany przystanek</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading" id="RDBMS-pełne-podzapytań">RDBMS pełne podzapytań</h2>



<p>Wyobraźmy sobie, że teraz nasz pasażer potrzebuje listy wszystkich przystanków, do których będzie mógł dojechać, wsiadając do autobusu na wskazanym przystanku. Poniżej przykładowe zapytanie będące odpowiedzią na oczekiwanie użytkownika aplikacji.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_6.png" alt="Neo4j listing" class="wp-image-24959" title="Neo4j – zaproszenie do grafowych baz danych 16"><figcaption class="wp-element-caption"><em>Listing 2. Przykładowe zapytanie zwracające listę unikalnych przystanków, do których można dojechać z przystanku X</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>W powyższym zapytaniu mamy do czynienia z koniecznością użycia dwóch podzapytań na rzecz jednej operacji projekcji. Występuje łącznie sześć operacji łączenia tabel przy użyciu polecenia JOIN.<strong> Złożoność tego zapytania jest jego niewątpliwą wadą. Inną wadą jest brak intuicyjności w konstrukcji powstałych w języku SQL w przypadku, gdy chcemy uzyskać wycinek zbioru danych badanej rzeczywistości.</strong> Wynikiem zapytania w naszym przykładzie będzie zbiór danych zawartych w tabeli poniżej.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_7.png" alt="Neo4j tabela " class="wp-image-24960" title="Neo4j – zaproszenie do grafowych baz danych 17"><figcaption class="wp-element-caption"><em>Tabela 4. Przykładowy zbiór wynikowy możliwych przystanków, do których użytkownik odjedzie z podanego przystanku początkowego</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Zapytania z obu poprzednich listingów to dopiero wstęp do pozostałych operacji prowadzących do kupna biletu. Kolejne zapytania będą niekiedy jeszcze bardziej złożone. Szczególnie gdy utworzymy dodatkowe tabele do przechowywania informacji o cenach biletów uzależnionych od wybranego przystanku odjazdu oraz przystanku docelowego, rodzaju trasy, kursu, pory nocnej albo np. okresowych zniżek na danych odcinkach przejazdu.</p>



<h2 class="wp-block-heading" id="Case-study-użycie-grafu-Neo4j">Case study: użycie grafu Neo4j</h2>



<p>Spójrzmy na analizowany model danych przez pryzmat obiektów grafu. Co to oznacza, że coś da się opisać przy pomocy grafu? Jak pisałem na początku: graf to zbiór węzłów i ich wzajemnych skierowanych relacji. W kontekście analizowanej wyszukiwarki połączeń autobusowych nasze przykładowe węzły i relacje możemy z wykorzystaniem Neo4j przedstawić w taki sposób:</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_8-1.png" alt="Graf obrazujący przystanki jako węzły i ich wzajemne zdefiniowane relacje" class="wp-image-24969" title="Neo4j – zaproszenie do grafowych baz danych 18"><figcaption class="wp-element-caption"><em>Rysunek 2. Graf obrazujący przystanki jako węzły i ich wzajemne zdefiniowane relacje</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>



<p>Przystanki są węzłami, a droga, która prowadzi od jednego do drugiego przystanku, w sposób naturalny określa istniejącą między nimi relację. Droga pomiędzy przystankami spowoduje wystąpienie odpowiednich tras przejazdu, więc potraktujemy trasę jako właściwość relacji przez nią wyznaczoną.</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_9.png" alt="Neo4j listing " class="wp-image-24962" title="Neo4j – zaproszenie do grafowych baz danych 19"><figcaption class="wp-element-caption"><em>Listing 3. Zapytanie w Cypher służące do wyszukania wszystkich tras, do których przypisany został wskazany przystanek</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p></p>



<p>Przykładowy rezultat powyższego zapytania:</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_10.png" alt="Neo4j tabela" class="wp-image-24963" title="Neo4j – zaproszenie do grafowych baz danych 20"><figcaption class="wp-element-caption"><em>Tabela 5. Przykładowy rezultat zapytania służącego do wyszukania wszystkich tras, do których przynależy wskazany przystanek</em></figcaption></figure>



<p></p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Zapytanie z listingu 3 już na pierwszy rzut oka jest o wiele bardziej intuicyjne, niż miało to miejsce w przypadku SQL. Na pewno jest też mniej skomplikowane. W powyższym zapytaniu staramy się wybrać wszystkie relacje typu <strong>LEADS TO</strong> &nbsp;do innych przystanków, a wychodzące z takiego, którego nazwa odpowiada przystankowi wskazanemu w zapytaniu. Po czym zwracamy ich trasy przy użyciu słowa kluczowego <strong>RETURN</strong>.</p>



<p>Przejdźmy do kroku drugiego, który powinien wykonać użytkownik, by uzyskać listę możliwych przystanków, przez które będzie przejeżdżał autobus. W Neo4j uzyskamy ją, wykonując na przykład takie zapytanie jak na listingu 4.</p>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_11.png" alt="Neo4j listing" class="wp-image-24964" title="Neo4j – zaproszenie do grafowych baz danych 21"><figcaption class="wp-element-caption"><em>Listing 4. Zapytanie zwracające nazwy wszystkich przystanków, do których możliwe będzie dotarcie z tego wskazanego przez użytkownika</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Powyższe zapytanie możemy odczytać następująco: <strong>„Skoro między wskazanym przystankiem a kolejnymi istnieje relacja łączącej je drogi, to zwróć mi wszystkie kolejne aż do ostatniego”</strong></p>



<p>Poniżej przykładowy rezultat w postaci grafu oraz w postaci tabeli nazw:</p>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image is-resized"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_12.png" alt="Graf prezentujący możliwe docelowe przystanki wraz z ich wzajemnymi relacjami" class="wp-image-24965" style="width:1200px;height:273px" title="Neo4j – zaproszenie do grafowych baz danych 22"><figcaption class="wp-element-caption"><em>Rysunek 3. Graf prezentujący możliwe docelowe przystanki wraz z ich wzajemnymi relacjami</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image"><img decoding="async" src="https://nearshore-it.eu/wp-content/uploads/2024/09/28.10_graphic_13.png" alt="Zbiór nazw węzłów z powyższego zapytania o możliwe docelowe przystanki" class="wp-image-24966" title="Neo4j – zaproszenie do grafowych baz danych 23"><figcaption class="wp-element-caption"><em>Tabela 6. Zbiór nazw węzłów z powyższego zapytania o możliwe docelowe przystanki</em></figcaption></figure>



<div style="height:34px" aria-hidden="true" class="wp-block-spacer"></div>



<p>Jak widzimy w powyższych przykładach, zapytania w Cypher są dużo krótsze niż ich odpowiedniki w SQL i zaprezentowane w odpowiednich listingach SQL. Jednocześnie pozwalają uzyskać identyczne efekty. Dodatkową zaletą jest to, że w Neo4j poza widokiem tabelarycznym dostępny jest również widok węzłów i ich relacji.</p>



<h2 class="wp-block-heading" id="Podsumowanie">Podsumowanie</h2>



<p>Jeżeli wycinek rzeczywistości, nad którym pracujemy, stanowi zbiór obiektów i ich wzajemnych relacji – bardzo prawdopodobne, że odnajdziemy tam strukturę grafową i użycie grafowej bazy danych będzie miało sens. W niniejszym tekście chciałem zaprezentować przede wszystkim intuicyjność i łatwość w konstruowaniu zapytań w Neo4j. Podałem przykład aplikacji, w której mierzyłem się z problemem niedopasowania narzędzia do potrzeb projektu. Gdybym wówczas posiadał obecne doświadczenie i wiedzę na temat grafowych baz danych, starałbym się przekonać decyzyjne osoby w projekcie do zastosowania Neo4j. Uchroniłoby to klienta przed wieloma niepotrzebnymi problemami i wydatkami.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://nearshore-it.eu/pl/artykuly/neo4j-zaproszenie-do-grafowych-baz-danych/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
