{"id":86335,"date":"2020-06-24T07:42:54","date_gmt":"2020-06-24T05:42:54","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/effektivnyj-poisk-funkczionalnyh-zavisimostej-v-bazah-dannyh"},"modified":"2020-06-24T07:42:54","modified_gmt":"2020-06-24T05:42:54","slug":"effektivnyj-poisk-funkczionalnyh-zavisimostej-v-bazah-dannyh","status":"publish","type":"post","link":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/effektivnyj-poisk-funkczionalnyh-zavisimostej-v-bazah-dannyh","title":{"rendered":"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Het zoeken naar functionele afhankelijkheden in gegevens wordt toegepast in verschillende richtingen van data-analyse: databasebeheer, gegevensopschoning, reverse engineering van databases en gegevensverkenning. We hebben al eerder over deze afhankelijkheden gepubliceerd. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/JetBrains-education\/blog\/473882\/\">artikel<\/a><\/noindex> Anastasia Birillo en Nikita Bobrov. Dit keer deelt Anastasia - afgestudeerde van het Computer Science Center van dit jaar - de ontwikkeling van dit werk binnen de onderzoeksresultaten die ze in het centrum heeft verdedigd. <\/p>\n<p><img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/5c88e821622e91c2058b0c11b6718bc9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Taakkeuze <\/h3>\n<p>\nTijdens mijn studie aan het CS-centrum begon ik me grondiger te verdiepen in databases, met name in het zoeken naar functionele en differenti\u00eble afhankelijkheden. Dit onderwerp was gerelateerd aan het onderwerp van mijn scriptie aan de universiteit, dus begon ik tijdens het werken aan mijn scriptie artikelen te lezen over verschillende afhankelijkheden in databases. Ik schreef een overzicht van dit gebied - een van mijn eerste. <noindex><a rel=\"nofollow\" href=\"https:\/\/seim-conf.org\/media\/materials\/2017\/proceedings\/SEIM-2017_Full_Papers.pdf#page=44\">artikelen<\/a><\/noindex> in het Engels en diende het in voor de SEIM-2017-conferentie. Ik was erg blij toen ik hoorde dat het toch werd geaccepteerd en besloot me dieper in het onderwerp te verdiepen. Het concept is niet nieuw - het werd al in de jaren '90 toegepast, maar vindt nog steeds toepassing in veel gebieden. <\/p>\n<p>In het tweede semester van mijn studie aan het centrum begon ik een onderzoeksproject gericht op het verbeteren van algoritmen voor het zoeken naar functionele afhankelijkheden. Ik werkte eraan samen met PhD-student Nikita Bobrov van de SPbGU bij JetBrains Research. <\/p>\n<h3>De computationele complexiteit van het zoeken naar functionele afhankelijkheden.<\/h3>\n<p>\nHet belangrijkste probleem is de computationele complexiteit. Het aantal mogelijke minimale en niet-triviale afhankelijkheden is bovengrens aan het aantal attributen van de tabel. <img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/bdd1d2928000d8128ba21920e9b4c765.jpg\" style=\"display:block;margin: 0 auto;\" \/>, waar <img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/6211a4051b8b98e32312948027b4a5f3.jpg\" style=\"display:block;margin: 0 auto;\" \/> De looptijd van de algoritmen hangt niet alleen af van het aantal attributen, maar ook van het aantal rijen. In de jaren '90 konden algoritmen die functionele afhankelijkheden zochten op een gewone desktop-PC datasets verwerken die tot 20 attributen en tienduizenden rijen bevatten, tot enkele uren. Moderne algoritmen, werkend op multi-core processoren, ontdekken afhankelijkheden voor datasets bestaande uit honderden attributen (tot 200) en enkele honderdduizenden rijen, ongeveer in dezelfde tijd. Dit is echter onvoldoende: deze tijd is onaanvaardbaar voor de meeste echte applicaties. Daarom hebben we benaderingen ontwikkeld om bestaande algoritmen te versnellen. <\/p>\n<h3>Caching-schema's voor het overlappen van partities.<\/h3>\n<p>\nIn het eerste deel van het werk hebben we cacheschema's ontwikkeld voor een klasse algoritmen die gebruikmaken van de methode van partitionoverlap. Een partitie voor een attribuut stelt een set lijsten voor, waarbij elke lijst rijnummers bevat met dezelfde waarden voor het gegeven attribuut. Elke dergelijke lijst wordt een cluster genoemd. Veel moderne algoritmen gebruiken partities om te bepalen of een afhankelijkheid wordt behouden of niet, en houden zich aan de stelling: Een afhankelijkheid <img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/fa2667dcc78cded2d42bbf0a415d4de6.jpg\" style=\"display:block;margin: 0 auto;\" \/> wordt behouden als <img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/b314fd0e7dbd225098198e48d5b28d38.jpg\" style=\"display:block;margin: 0 auto;\" \/>. Hier wordt de partitie aangeduid en wordt het begrip partitie-grootte gebruikt \u2014 het aantal clusters daarin. Algoritmen die gebruikmaken van partities voegen bij schending van de afhankelijkheid extra attributen toe aan de linkerzijde van de afhankelijkheid, waarna ze deze opnieuw berekenen door de operaties van partitionoverlap uit te voeren. Deze operatie wordt in artikelen specialisatie genoemd. Maar we hebben opgemerkt dat partities voor afhankelijkheden die pas na meerdere ronden van specialisatie zullen worden behouden, actief kunnen worden hergebruikt, wat de verwerkingstijd van algoritmen aanzienlijk kan verkorten, aangezien de operatie van partitionoverlap duur is. <img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/ef197235c0b8f15673c5179423349e21.jpg\" style=\"display:block;margin: 0 auto;\" \/> Daarom hebben we een heuristiek voorgesteld die is gebaseerd op de entropie van Shannon en de onzekerheid van Gini, evenals onze metriek die we Omgekeerde Entropie hebben genoemd. Deze is een kleine aanpassing van de entropie van Shannon en neemt toe naarmate de uniciteit van de dataset toeneemt. De voorgestelde heuristiek ziet er als volgt uit: <\/p>\n<p>\u2014 de mate van uniciteit van de recent berekende partitie<\/p>\n<p><img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/4d9750c9f41679ae013ee7118928566b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hier <img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/f3e620ccc932916349b338f613723542.jpg\" style=\"display:block;margin: 0 auto;\" \/> \u2014 de mate van uniciteit van de recentelijk berekende partitie <img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/4a43e7b49fc30d8a928fb365567c724a.jpg\" style=\"display:block;margin: 0 auto;\" \/>, met behulp van 1 bit, gelijk aan 0, <img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/c21371f6b9ec89f5d93917e3c3c7df07.jpg\" style=\"display:block;margin: 0 auto;\" \/> is de mediaan van de uniciteitsgraad voor afzonderlijke attributen. Alle drie de eerder genoemde maatstaven voor uniciteit zijn als metrics getest. Ook is te merken dat er twee modificatoren in de heuristiek aanwezig zijn. De eerste geeft aan hoe dicht de huidige partitie bij de primaire sleutel ligt en maakt het mogelijk om in grotere mate de partities te cachen die verder weg zijn van de potenti\u00eble sleutel. De tweede modificator maakt het mogelijk om de bezetting van de cache te volgen en stimuleert zo de toevoeging van meer partities aan de cache wanneer er vrije ruimte is. Het succesvolle oplossen van deze taak heeft het PYRO-algoritme met 10-40% versneld, afhankelijk van de dataset. Het is vermeldenswaard dat het PYRO-algoritme het meest succesvol is op dit gebied. <\/p>\n<p>In de onderstaande afbeelding zijn de resultaten te zien van de toepassing van de voorgestelde heuristiek in vergelijking met de baseline benadering van caching, die is gebaseerd op het opgooien van een munt. De X-as is logarithmisch.<\/p>\n<p><img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/3d6fe6a57237b27e76e6833965dc9c93.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Alternatieve manier van opslag van partities<\/h3>\n<p>\nVervolgens hebben we een alternatieve manier van opslag van partities voorgesteld. Partities vormen een set clusters, waarin de nummers van tuples met gelijke waarden voor bepaalde attributen worden opgeslagen. Deze clusters kunnen lange reeksen van tuple-nummers bevatten, bijvoorbeeld als de gegevens in de tabel zijn geordend. Daarom hebben we een compressieschema voorgesteld voor de opslag van partities, namelijk intervalopslag van waarden in de partitieclusters:<\/p>\n<p>$$display$$pi(X) = {{underbrace{1, 2, 3, 4, 5}_{Eerste~interval}, underbrace{7, 8}_{Tweede~interval}, 10}}\\ downarrow{Compressie}\\ pi(X) = {{underbrace{$, 1, 5}_{Eerste~interval}, underbrace{7, 8}_{Tweede~interval}, 10}}$$display$$<\/p>\n<p>Deze methode kon het geheugenverbruik tijdens de uitvoering van het TANE-algoritme met 1 tot 25% verminderen. Het TANE-algoritme is een klassiek algoritme voor de ontdekking van functionele afhankelijkheden en gebruikt partities tijdens zijn werking. In de praktijk is gekozen voor het TANE-algoritme, omdat het veel eenvoudiger was om intervalopslag hierin te implementeren dan bijvoorbeeld in PYRO, om te evalueren of de voorgestelde aanpak werkt. De verkregen resultaten worden in de onderstaande afbeelding gepresenteerd. De X-as is logarithmisch.<\/p>\n<p><img decoding=\"async\" alt=\"Effectieve zoekopdracht naar functionele afhankelijkheden in databases.\" src=\"\/wp-content\/uploads\/2020\/06\/609a547d3d19b6e2c54ed70481ff6cdb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Conferentie ADBIS-2019<\/h3>\n<p>\nOp basis van het onderzoek in september 2019 heb ik een artikel gepresenteerd <noindex><a rel=\"nofollow\" href=\"https:\/\/link.springer.com\/chapter\/10.1007\/978-3-030-30278-8_7\">Slimme Caching voor Effici\u00ebnte Ontdekking van Functionele Afhankelijkheden<\/a><\/noindex> Tijdens de 23ste Europese Conferentie over Vooruitgangen in Databases en Informatiesystemen (ADBIS-2019) benadrukte Bernhard Thalheim, een vooraanstaand persoon op het gebied van databases, mijn werk tijdens zijn presentatie. De onderzoeksresultaten vormden de basis van mijn scriptie in de masteropleiding wiskunde en mechanica aan de Staatsuniversiteit van Sint-Petersburg, waarin beide voorgestelde benaderingen (caching en compressie) werden ge\u00efmplementeerd in de algoritmen TANE en PYRO. De resultaten toonden aan dat de voorgestelde benaderingen universieel zijn, aangezien bij beide algoritmen en met beide benaderingen een aanzienlijke vermindering van het geheugengebruik en de uitvoeringstijd werd waargenomen.<br \/>\n<br \/>Bron: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/JetBrains-education\/blog\/507716\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u0438\u0441\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0435\u0432\u0451\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u044d\u043a\u0441\u043f\u043b\u043e\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u043e \u0441\u0430\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u044b \u0443\u0436\u0435 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u0410\u043d\u0430\u0441\u0442\u0430\u0441\u0438\u0438 \u0411\u0438\u0440\u0438\u043b\u043b\u043e \u0438 \u041d\u0438\u043a\u0438\u0442\u044b \u0411\u043e\u0431\u0440\u043e\u0432\u0430. \u0412 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u0410\u043d\u0430\u0441\u0442\u0430\u0441\u0438\u044f \u2014 \u0432\u044b\u043f\u0443\u0441\u043a\u043d\u0438\u0446\u0430 Computer Science Center \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u2014 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u041d\u0418\u0420, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d\u0430 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":86336,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-86335","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u0438\u0441\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0435\u0432\u0451\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u044d\u043a\u0441\u043f\u043b\u043e\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/effektivnyj-poisk-funkczionalnyh-zavisimostej-v-bazah-dannyh\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u0438\u0441\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0435\u0432\u0451\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u044d\u043a\u0441\u043f\u043b\u043e\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/effektivnyj-poisk-funkczionalnyh-zavisimostej-v-bazah-dannyh\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-06-24T05:42:54+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-06-24T05:42:54+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Effectieve zoektocht naar functionele afhankelijkheden in databases | ProHoster","description":"Het zoeken naar functionele afhankelijkheden in gegevens wordt toegepast in verschillende domeinen van data-analyse: databasebeheer, gegevensschoonmaak, reverse engineering van databases en data-exploratie.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/effektivnyj-poisk-funkczionalnyh-zavisimostej-v-bazah-dannyh","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u042d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u0431\u0430\u0437\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 | ProHoster","og:description":"\u041f\u043e\u0438\u0441\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445: \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0447\u0438\u0441\u0442\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0435\u0432\u0451\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u0431\u0430\u0437 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u044d\u043a\u0441\u043f\u043b\u043e\u0440\u0430\u0446\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445.","og:url":"https:\/\/prohoster.info\/nl\/blog\/administrirovanie\/effektivnyj-poisk-funkczionalnyh-zavisimostej-v-bazah-dannyh","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-06-24T05:42:54+00:00","article:modified_time":"2020-06-24T05:42:54+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"86335","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 14:17:33","updated":"2022-09-27 17:20:14","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/86335","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=86335"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/86335\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media\/86336"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=86335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=86335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=86335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}