{"id":29852,"date":"2022-01-12T13:27:32","date_gmt":"2022-01-12T12:27:32","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/mongodb-nosql-w-ecommerce\/"},"modified":"2024-11-07T14:38:36","modified_gmt":"2024-11-07T13:38:36","slug":"mongodb-nosql-w-ecommerce","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/mongodb-nosql-w-ecommerce\/","title":{"rendered":"MongoDB \u2013 idealny system bazodanowy dla e-commerce?"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">Id\u017a do: <\/p>\n    <ol>\n                    <li><a href=\"#E-commerce-to-nie-tylko-sklepy-internetowe\">1.  E-commerce to nie tylko sklepy internetowe<\/a><\/li>\n                    <li><a href=\"#Wyzwania-system\u00f3w-bazodanowych-w-e-commerce\">2.  Wyzwania system\u00f3w bazodanowych w e-commerce<\/a><\/li>\n                    <li><a href=\"#Co-wybra\u0107:-nierelacyjne-bazy-danych-czy-relacyjne-bazy-danych?\">3.  Co wybra\u0107: nierelacyjne bazy danych czy relacyjne bazy danych?<\/a><\/li>\n                    <li><a href=\"#Czym-jest-MongoDB?\">4.  Czym jest MongoDB?<\/a><\/li>\n                    <li><a href=\"#NoSQL-w-e-commerce,-czyli-co-MongoDB-mo\u017ce-zaoferowa\u0107-bran\u017cy?\">5.  NoSQL w e-commerce, czyli co MongoDB mo\u017ce zaoferowa\u0107 bran\u017cy?<\/a><\/li>\n                    <li><a href=\"#Podsumowanie\">6.  Podsumowanie<\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"E-commerce-to-nie-tylko-sklepy-internetowe\">E-commerce to nie tylko sklepy internetowe<\/h2>\n\n\n\n<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\u00f3wimy tu o samej transakcji kupna-sprzeda\u017cy, gdy\u017c p\u0142atno\u015b\u0107 i dostawa mog\u0105 by\u0107 realizowane w sieci, jak i poza ni\u0105. Najbardziej znanym i przez cz\u0119\u015b\u0107 os\u00f3b uto\u017csamianym z tym poj\u0119ciem rodzajem handlu s\u0105 sklepy internetowe. Nale\u017cy jednak nadmieni\u0107, \u017ce poza e-sklepami mo\u017cemy jeszcze wyr\u00f3\u017cni\u0107 serwisy aukcyjne, e-kantory, bankowo\u015b\u0107 elektroniczn\u0105 czy platformy bukmacherskie.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Wyzwania-system\u00f3w-bazodanowych-w-e-commerce\">Wyzwania system\u00f3w bazodanowych w e-commerce<\/h2>\n\n\n\n<p>System bazodanowy w e-commerce to narz\u0119dzie do zada\u0144 specjalnych.<\/p>\n\n\n\n<p>Dobrze skonfigurowany system bazodanowy powinien:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zagwarantowa\u0107 dost\u0119pno\u015b\u0107 danych 24\/7<\/li>\n\n\n\n<li>utrzyma\u0107 szybko\u015b\u0107 odpytywania w okresie wzrostu u\u017cycia<\/li>\n\n\n\n<li>zapisywa\u0107 ogromne ilo\u015bci danych<\/li>\n\n\n\n<li>informowa\u0107 w spos\u00f3b dynamiczny i ci\u0105g\u0142y o zmianach (np. dost\u0119pno\u015bci danego produktu)<\/li>\n<\/ul>\n\n\n\n<p>W tym celu firmy e-commerce powinny postawi\u0107 na skalowalno\u015b\u0107 bazy danych. To istotne zw\u0142aszcza w czasie peak\u00f3w w e-commerce, takich jak Black Friday, Cyber Monday i zwi\u0105zan\u0105 z nimi zwi\u0119kszon\u0105 liczb\u0105 zapyta\u0144. <\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce: <\/strong><a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/5-najpopularniejszych-narzedzi-do-analizy-danych-biznesowych\">5 najpopularniejszych narz\u0119dzi do analizy danych biznesowych<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Co-wybra\u0107:-nierelacyjne-bazy-danych-czy-relacyjne-bazy-danych?\">Co wybra\u0107: nierelacyjne bazy danych czy relacyjne bazy danych?<\/h2>\n\n\n\n<p>Zastan\u00f3wmy si\u0119 troch\u0119 g\u0142\u0119biej nad przechowywaniem danych dla us\u0142ug e-commerce. Do wyboru mamy kilka typ\u00f3w baz danych, przy czym najbardziej znane s\u0105 relacyjne (SQL) i nierelacyjne (NoSQL). Przyjrzyjmy si\u0119 r\u00f3\u017cnicom mi\u0119dzy nimi. \u017beby by\u0107 bardziej precyzyjnym, SQL jest to Structured Query Language, czyli j\u0119zyk do pozyskiwania danych z bazy relacyjnej. Przyj\u0119\u0142o si\u0119 jednak tego typu bazy danych nazywa\u0107 \u201ebazami SQL\u201d, zatem tej nazwy b\u0119d\u0119 u\u017cywa\u0142 przy por\u00f3wnywaniu. Upraszcza to te\u017c zapami\u0119tanie nazwy drugiego rodzaju baz, czyli NoSQL, kt\u00f3re cz\u0119sto okre\u015bla si\u0119 po prostu jako \u201enie SQL\u201d.<\/p>\n\n\n\n<p>Przechodz\u0105c do r\u00f3\u017cnic, mo\u017cemy wyr\u00f3\u017cni\u0107 5 podstawowych, kt\u00f3re zebra\u0142em w tabeli poni\u017cej:<\/p>\n\n\n\n<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\u0119dzy danymi<\/td><td>brak relacji, dane s\u0105 lu\u017ano powi\u0105zane<\/td><\/tr><tr><td>dane przechowywane w tabelach<\/td><td>dane przechowywane w dokumentach, grafach, jako tzw. klucz-warto\u015b\u0107<\/td><\/tr><tr><td>zdefiniowany schemat<\/td><td>dynamiczny schemat, nieuporz\u0105dkowane dane<\/td><\/tr><tr><td>preferowany przy operacjach na wielu wierszach<\/td><td>preferowany, gdy szybko\u015b\u0107 pozyskania danych jest istotna<\/td><\/tr><tr><td>skalowalne wertykalnie<\/td><td>skalowalne horyzontalnie<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Jak wida\u0107, bazy NoSQL idealnie wpisuj\u0105 si\u0119 w wymagania i potrzeby rynku e-commerce w kontek\u015bcie dost\u0119pno\u015bci i przechowywania danych. Obecnie najpopularniejszym systemem bazodanowym tego typu jest MongoDB.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Czym-jest-MongoDB?\">Czym jest MongoDB?<\/h2>\n\n\n\n<p>MongoDB to dokumentowa baza danych zaprojektowana z my\u015bl\u0105 o \u0142atwo\u015bci tworzenia i skalowania. Dokumenty s\u0105 tworzone i przechowywane w formacie <strong>BSON, czyli Binary JSON. <\/strong>Zastosowanie JSON oznacza, \u017ce \u200b\u200bbardzo \u0142atwo jest przekonwertowa\u0107 zapytania i wyniki do formatu, kt\u00f3ry rozumie kod frontendowy, w kt\u00f3rym napisana jest aplikacja e-commerce. Jest te\u017c on bardziej czytelny dla cz\u0142owieka. To rozwi\u0105zanie NoSQL obejmuje hierarchiczno\u015b\u0107, automatyczne fragmentowanie i wbudowan\u0105 replikacj\u0119 dla lepszej skalowalno\u015bci i wysokiej dost\u0119pno\u015bci.<\/p>\n\n\n\n<p>Maj\u0105c ju\u017c obraz tego, jakie s\u0105 g\u0142\u00f3wne wyzwania w e-commerce, oraz upewniaj\u0105c si\u0119, \u017ce MongoDB to dobry wyb\u00f3r w kontek\u015bcie przechowywania danych, mo\u017cemy zastanowi\u0107 si\u0119 nad odpowiedzi\u0105 na pytanie: <strong>co MongoDB mo\u017ce zaoferowa\u0107 bran\u017cy e-commerce?<\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"NoSQL-w-e-commerce,-czyli-co-MongoDB-mo\u017ce-zaoferowa\u0107-bran\u017cy?\">NoSQL w e-commerce, czyli co MongoDB mo\u017ce zaoferowa\u0107 bran\u017cy?<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"dynamiczne-schematy\">Dynamiczne schematy<\/h3>\n\n\n\n<p>Dzi\u0119ki dynamicznym schematom dokumenty w kolekcji nie musz\u0105 posiada\u0107 tych samych p\u00f3l, a i dane pole mo\u017ce mie\u0107 r\u00f3\u017cne typy w zale\u017cno\u015bci od dokumentu. Zwi\u0119ksza to elastyczno\u015b\u0107 mapowania na encje czy obiekty. Praktyka pokazuje jednak, \u017ce struktura dokument\u00f3w wewn\u0105trz kolekcji jest podobna. Aby to zagwarantowa\u0107, MongoDB wprowadzi\u0142o mo\u017cliwo\u015b\u0107 ustawienia regu\u0142 walidacyjnych na kolekcj\u0119.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"latwa-hierarchizacja-danych\">\u0141atwa hierarchizacja danych<\/h3>\n\n\n\n<p>Zastosowanie formatu JSON pozwala na \u0142atw\u0105 hierarchizacj\u0119 danych. Mo\u017cemy to zrobi\u0107 poprzez osadzenie jednego dokumentu wewn\u0105trz drugiego lub poprzez przekazanie referencji. U\u017cycie jednej b\u0105d\u017a drugiej metody powinno by\u0107 rozpatrywane indywidualnie dla ka\u017cdej kolekcji. Zalecane jest stosowanie osadzenia, poniewa\u017c pozwala to pozyska\u0107 dane w wyniku pojedynczego zapytania, co zwi\u0119ksza wydajno\u015b\u0107 systemu. Referencje warto rozwa\u017cy\u0107 dla bardziej skomplikowanych reprezentacji hierarchii b\u0105d\u017a w sytuacji, kiedy korzy\u015bci z zagnie\u017cd\u017cenia nie przewa\u017caj\u0105 nad skutkami duplikacji danych (takimi jak np. potrzeba monitorowania zmian przy podmianie danych) <\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"replikacja\">Replikacja<\/h3>\n\n\n\n<p>MongoDB u\u017cywa konceptu nazwanego <strong>Replica Set,<\/strong> czyli zestawu node\u2019\u00f3w zawieraj\u0105cych te same dane. Umo\u017cliwia to replikacj\u0119 danych, kt\u00f3rej celem jest <strong>zwi\u0119kszenie dost\u0119pno\u015bci oraz zabezpieczenie si\u0119 przed awariami serwer\u00f3w bazodanowych.<\/strong> Dobrze zaprojektowana architektura pozwala r\u00f3wnie\u017c na szybszy dost\u0119p do danych.<\/p>\n\n\n\n<p>Kluczowe za\u0142o\u017cenia i mechanizmy replikacji om\u00f3wimy na podstawie poni\u017cszego schematu:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image is-style-default\">\n<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=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p>Zestaw replik sk\u0142ada si\u0119 z jednego node\u2019a, tzw. cz\u0142onka g\u0142\u00f3wnego (<em>Primary<\/em>), oraz cz\u0142onk\u00f3w drugorz\u0119dnych (<em>Secondary<\/em>). Istnieje te\u017c specjalny cz\u0142onek takiego zestawu, s\u0119dzia (<em>Arbiter<\/em>), kt\u00f3ry nie posiada kopii danych, ale s\u0142u\u017cy do wybierania zast\u0119pcy w przypadku niedost\u0119pno\u015bci g\u0142\u00f3wnego serwera.<\/p>\n\n\n\n<p>Operacje zapisu wykonywane s\u0105 wy\u0142\u0105cznie na g\u0142\u00f3wnej instancji, z kt\u00f3rej p\u00f3\u017aniej mechanizm wbudowany MongoDB kopiuje dane na pozosta\u0142e. Operacje odczytu domy\u015blnie r\u00f3wnie\u017c przechodz\u0105 przez wiod\u0105c\u0105 instancj\u0119, ale istnieje mo\u017cliwo\u015b\u0107 skonfigurowania node\u2019\u00f3w, tak aby to poboczne serwery s\u0142u\u017cy\u0142y do obs\u0142ugi zapyta\u0144, przy czym mo\u017ce to si\u0119 wi\u0105za\u0107 z wyst\u0105pieniem tzw. eventual-consistency, czyli z op\u00f3\u017anion\u0105 aktualno\u015bci\u0105 danych.<\/p>\n\n\n\n<p>Istotny dla ca\u0142ej koncepcji replikacji jest <strong>mechanizm taktowania (<em>heartbeat<\/em>).<\/strong> Ka\u017cdy z node\u2019\u00f3w (<em>members<\/em>) co 2 sekundy odpytuje pozosta\u0142e w celu sprawdzenia ich dost\u0119pno\u015bci. W przypadku gdy serwer g\u0142\u00f3wny jest niedost\u0119pny, nast\u0119puje wyb\u00f3r nowego. Proces ten polega na wybraniu spo\u015br\u00f3d pozosta\u0142ych instancji tej, kt\u00f3ra ma ustawiony najwy\u017cszy priorytet. Dokumentacja stwierdza, \u017ce replika mo\u017ce posiada\u0107 do 50 node\u2019\u00f3w, przy czym tylko 7 z nich mo\u017ce bra\u0107 udzia\u0142 w wyborze (<em>voting<\/em>), i to spo\u015br\u00f3d nich wybierany jest nast\u0119pca. Pozosta\u0142e serwery, nazwane <em>Non-Voting members,<\/em> musz\u0105 mie\u0107 w\u0142a\u015bciwo\u015bci <em>votes<\/em> i <em>priority<\/em> ustawione na 0. Zaleca si\u0119, aby liczba instancji z mo\u017cliwo\u015bci\u0105 g\u0142osowania by\u0142a nieparzysta, st\u0105d te\u017c minimalna liczba &nbsp;node\u2019\u00f3w w replice to 3.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"fragmentacja\">Fragmentacja<\/h3>\n\n\n\n<p>Fragmentacja polega na podzieleniu zestawu danych na mniejsze cz\u0119\u015bci, dzi\u0119ki czemu mo\u017cemy skalowa\u0107 horyzontalnie, praktycznie w niesko\u0144czono\u015b\u0107. MongoDB do obs\u0142ugi fragmentacji u\u017cywa klastra, kt\u00f3ry sk\u0142ada si\u0119 z nast\u0119puj\u0105cych element\u00f3w:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>Shard<\/em>, czyli zestawu replik, kt\u00f3ry zawiera cz\u0119\u015b\u0107 kolekcji (<em>Chunk<\/em>)<\/li>\n\n\n\n<li>Router, kt\u00f3ry dzia\u0142a troch\u0119 jak load balancer i na podstawie konfiguracji przekazuje polecenia do odpowiedniej podkolekcji, \u017ceby zr\u00f3wnowa\u017cy\u0107 obci\u0105\u017cenie<\/li>\n\n\n\n<li><em>Config server<\/em>, przechowuj\u0105cy metadane i konfiguracj\u0119 klastra<\/li>\n<\/ul>\n\n\n\n<p>Zale\u017cno\u015bci pomi\u0119dzy komponentami przedstawia poni\u017cszy schemat:<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<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=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Istotne w przypadku fragmentacji danych jest dobranie odpowiedniego klucza oraz strategii.<\/p>\n\n\n\n<p>Wybieraj\u0105c pole dokumentu, kt\u00f3rego chcemy u\u017cy\u0107 jako klucza, powinni\u015bmy rozwa\u017cy\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Kardynalno\u015b\u0107 <\/strong>\u2013 czyli na jak wiele element\u00f3w mo\u017cemy podzieli\u0107 kolekcj\u0119 wzgl\u0119dem klucza<\/li>\n\n\n\n<li><strong>Powtarzalno\u015b\u0107 <\/strong>\u2013 czy kt\u00f3ra\u015b warto\u015b\u0107 nie pojawia si\u0119 zdecydowanie cz\u0119\u015bciej ni\u017c pozosta\u0142e<\/li>\n\n\n\n<li><strong>Jednostajno\u015b\u0107 <\/strong>\u2013 czy nowe warto\u015bci klucza nie s\u0105 wzrastaj\u0105ce \/ malej\u0105ce w spos\u00f3b liniowy<\/li>\n\n\n\n<li><strong>Cz\u0119stotliwo\u015b\u0107 zapyta\u0144<\/strong> \u2013 klucz powinien by\u0107 wykorzystywany w najcz\u0119stszych zapytaniach<\/li>\n<\/ul>\n\n\n\n<p><strong>Je\u017celi chodzi o strategie, mamy do dyspozycji dwie:<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"hashed-sharding\">Hashed Sharding<\/h3>\n\n\n\n<p>Przy tej strategii MongoDB automatycznie generuje <em>Hash<\/em> z warto\u015bci p\u00f3l kluczy. Sprawdza si\u0119 ona w przypadku gdy warto\u015bci klucza zmieniaj\u0105 si\u0119 jednostajnie. Zastosowanie hasha zwi\u0119ksza r\u00f3wnomierne rozdzielenie dokument\u00f3w pomi\u0119dzy udzia\u0142ami (<em>Shards<\/em>). Minusem jest to, \u017ce w przypadku zapyta\u0144 o dany zakres ma\u0142o prawdopodobne jest, i\u017c wszystkie dokumenty b\u0119d\u0105 w jednym udziale. Skutkuje to odpytywaniem wszystkich cz\u0119\u015bci kolekcji (<em>chunks<\/em>), poniewa\u017c router nie jest w stanie jednoznacznie okre\u015bli\u0107, w kt\u00f3rym udziale znajduj\u0105 si\u0119 szukane dokumenty.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"ranged-sharding\">Ranged Sharding<\/h3>\n\n\n\n<p>Ka\u017cdy z udzia\u0142\u00f3w przechowuje cz\u0119\u015bci kolekcji w danym zakresie warto\u015bci klucza. Strategia ta sprawdza si\u0119<ins>,<\/ins> kiedy zbi\u00f3r warto\u015bci dla klucza jest du\u017cy, ale powtarzalno\u015b\u0107 ka\u017cdej z nich jest ma\u0142a. Ogromn\u0105 zalet\u0105 jest mo\u017cliwo\u015b\u0107 ukierunkowania zapytania na konkretny udzia\u0142 b\u0105d\u017a &nbsp;kolekcj\u0119, co znacz\u0105co wp\u0142ywa na szybko\u015b\u0107 odpytywania.<\/p>\n\n\n\n<p>Dzieleniem na cz\u0119\u015bci oraz ich rozmieszczaniem zajmuje si\u0119 wbudowany mechanizm MongoDB, kt\u00f3ry dba o r\u00f3wne ich rozdystrybuowanie oraz stara si\u0119 utrzyma\u0107 zbli\u017con\u0105 wielko\u015b\u0107 ka\u017cdego z nich. Decyduj\u0105c si\u0119 na fragmentacj\u0119, nale\u017cy pami\u0119ta\u0107, \u017ce MongoDB nie oferuje metody scalenia danych, a jedynie mo\u017cliwo\u015b\u0107 ponownej fragmentacji po innym kluczu.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"strumienie-zmian\">Strumienie zmian<\/h3>\n\n\n\n<p>Od wersji 3.6 MongoDB pozwala nas\u0142uchiwa\u0107 zmian w wybranej kolekcji, bazie lub ca\u0142ym systemie, z wyj\u0105tkiem kolekcji<strong> admin, lokal i config.<\/strong> Odbywa si\u0119 to poprzez otwarcie kursora, kt\u00f3ry pozwala iteracyjnie przechodzi\u0107 po zdarzeniach zwi\u0105zanych z danym zakresem. Poniewa\u017c mechanizm ten u\u017cywa agregacji, mo\u017cemy r\u00f3wnie\u017c nas\u0142uchiwa\u0107 konkretnych zmian czy te\u017c modyfikowa\u0107 odebrane notyfikacje. Podstawowym wymaganiem jest u\u017cycie zestawu replik, gdy\u017c powiadomienie nast\u0119puje w momencie zapisu zmiany na wi\u0119kszo\u015bci z tych, kt\u00f3re s\u0105 odpowiedzialne za przechowywanie danych.<\/p>\n\n\n\n<p>Strumienie zmian wykorzystuj\u0105 specjaln\u0105, ograniczon\u0105 kolekcj\u0119 <strong>oplog<\/strong>, kt\u00f3ra przechowuje informacj\u0119 o operacjach wp\u0142ywaj\u0105cych na aktualny stan danych. Dokumenty w tej kolekcji rotuj\u0105, oznacza to, \u017ce nowy dokument w przypadku osi\u0105gni\u0119cia limitu rozmiaru kolekcji powoduje usuni\u0119cie najstarszych. Dlatego nale\u017cy dobra\u0107 odpowiedni rozmiar dla tej kolekcji, zale\u017cny od cz\u0119stotliwo\u015bci wyst\u0119powania zdarze\u0144, tak aby mo\u017cliwe by\u0142o przechwycenie wybranego, zanim zostanie ono usuni\u0119te.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Podsumowanie\">Podsumowanie<\/h2>\n\n\n\n<p>Warto\u015b\u0107 polskiego rynku e-commerce w 2020 r. przekroczy\u0142a <strong>100 mld z\u0142,<\/strong> jednocze\u015bnie wed\u0142ug raportu \u201eE-commerce w Polsce 2021\u201d, opracowanego przez Gemius dla e-Commerce Polska, <strong>a\u017c 77% Polak\u00f3w deklaruje, \u017ce kupuje online.<\/strong> Wskazuje to wyra\u017any, utrzymuj\u0105cy si\u0119 ju\u017c od d\u0142u\u017cszego czasu trend przenoszenia si\u0119 handlu do Internetu. Wed\u0142ug prognoz tak dynamiczny rozw\u00f3j e-handlu w Polsce utrzyma si\u0119 jeszcze przez kilka najbli\u017cszych lat.<\/p>\n\n\n\n<p>Klienci maj\u0105 coraz wi\u0119ksze wymagania co do stron internetowych czy aplikacji. Do najwa\u017cniejszych czynnik\u00f3w zwi\u0119kszaj\u0105cych tzw. User Experience nale\u017c\u0105 <strong>dost\u0119pno\u015b\u0107, szybko\u015b\u0107 i niezawodno\u015b\u0107.<\/strong> Dobrze skonfigurowany system bazodanowy taki jak MongoDB jest odporny na awarie, skalowalny i pozwala na hierarchizacj\u0119 i zapis sporych ilo\u015bci danych, zatem w pe\u0142ni odpowiada na potrzeby projekt\u00f3w e-commerce. &nbsp;<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jednym z kluczowych wyzwa\u0144 dla programist\u00f3w, architekt\u00f3w oraz manager\u00f3w zaanga\u017cowanych w projekty e-commerce jest wyb\u00f3r odpowiedniej bazy do przechowywania danych reprezentuj\u0105cych towar czy us\u0142ug\u0119. Analogicznie do tego jak fizycznie towary przechowywane s\u0105 w magazynach, tak w \u015bwiecie wirtualnym informacje o nich przechowywane s\u0105 w bazach danych. Wybieraj\u0105c system do zarz\u0105dzania baz\u0105 danych (DBMS) na potrzeby e-commerce, trzeba zwr\u00f3ci\u0107 uwag\u0119 na kilka kwestii: elastyczno\u015b\u0107, wysok\u0105 dost\u0119pno\u015b\u0107, niezawodno\u015b\u0107, obs\u0142ugiwanie wielu zapyta\u0144 oraz  aktualno\u015b\u0107 danych. Jednym z popularnych system\u00f3w odpowiadaj\u0105cych na te potrzeby jest MongoDB, kt\u00f3rego mo\u017cliwo\u015bci om\u00f3wi\u0119 w tym artykule.<\/p>\n","protected":false},"author":115,"featured_media":29860,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":175,"footnotes":""},"categories":[1,582],"tags":[572,571],"offering":[522],"class_list":["post-29852","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-e-commerce","tag-nosql-pl","offering-tech-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/115"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=29852"}],"version-history":[{"count":3,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29852\/revisions"}],"predecessor-version":[{"id":33901,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29852\/revisions\/33901"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/29860"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=29852"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=29852"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=29852"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=29852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}