ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Маппинг Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· рСляционной Π‘Π”

Иногда Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ ситуации, ΠΊΠΎΠ³Π΄Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· рСляционной Π‘Π” Π½Π΅ укладываСтся Π² возмоТности ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΉ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ОРМ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π»ΠΈΠ±ΠΎ ΠΈΠ·-Π·Π° нСдостаточной скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ самой ОРМ, Π»ΠΈΠ±ΠΎ Π½Π΅ совсСм ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… SQL запросов Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Сю. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ приходится ΠΏΠΈΡΠ°Ρ‚ΡŒ запросы Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π‘Π” (Π² Ρ‚.Ρ‡. Π² ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° JOIN запрос) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ β€œΠΏΠ»ΠΎΡΠΊΠΎΠ³ΠΎβ€ Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π³ΠΎ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ β€œΠ΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΡƒΡŽβ€ структуру Π΄Π°Π½Π½Ρ‹Ρ… прилоТСния. Π Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ‚Π°ΠΊΠΈΠΌ массивом дальшС ΠΊΡ€Π°ΠΉΠ½Π΅ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ, поэтому трСбуСтся Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅Π΅ привСсти этот массив Π² Π±ΠΎΠ»Π΅Π΅ подходящий Π²ΠΈΠ΄ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ.

РСшСниС Π±Ρ‹Π»ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ, ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΠΈ достаточно быстроС.

На сколько быстроС

Для ΠΎΡ†Π΅Π½ΠΊΠΈ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ я собрал нСбольшой ΠΈΡΠΏΡ‹Ρ‚Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ стСнд Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠΎΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ сравниваСтся со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Eloquent. Для Π·Π°ΠΌΠ΅Ρ€ΠΎΠ² использовался ΠΏΠ°ΠΊΠ΅Ρ‚ phpbench.

Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ стСнд Ρƒ сСбя:

Π—Π΄Π΅ΡΡŒ я использовал инструмСнт описанный Π² ΠΌΠΎΠ΅ΠΉ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅.

Π—Π°Ρ‚Π΅ΠΌ Π² мСню Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ: 1 Develop, Π·Π°Ρ‚Π΅ΠΌ: 1 Build, Π·Π°Ρ‚Π΅ΠΌ 2 Deploy and Up;
Π—Π°Ρ‚Π΅ΠΌ запускаСм тСсты 5. Run tests

Π’ Π±Π°Π·Π΅ 3000 ΠΊΠ½ΠΈΠ³. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:

benchEloquent β€” вытаскиваСт всС ΠΊΠ½ΠΈΠ³ΠΈ с Π°Π²Ρ‚ΠΎΡ€Π°ΠΌΠΈ с использованиСм Eloquent
benchEloquentId β€” вытаскиваСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ с Π°Π²Ρ‚ΠΎΡ€Π°ΠΌΠΈ с использованиСм Eloquent (10 Ρ€Π°Π·)

benchProc β€” вытаскиваСт всС ΠΊΠ½ΠΈΠ³ΠΈ с Π°Π²Ρ‚ΠΎΡ€Π°ΠΌΠΈ с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
benchProcId β€” вытаскиваСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ с Π°Π²Ρ‚ΠΎΡ€Π°ΠΌΠΈ с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (10 Ρ€Π°Π·)

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ тСсты нСдостаточно Ρ€Π΅ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ‚ΠΈΠ²Π½Ρ‹, Π½ΠΎ Ρ€Π°Π·Π½ΠΈΡ†Π° Π·Π°ΠΌΠ΅Ρ‚Π½Π°, ΠΊΠ°ΠΊ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния, Ρ‚Π°ΠΊ ΠΈ ΠΏΠΎ Ρ€Π°ΡΡ…ΠΎΠ΄ΠΎΠ²Π°Π½ΠΈΡŽ памяти.

Как это Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

Π”Π°Π»Π΅Π΅, для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° (ΠΊΡ€Π°ΠΉΠ½Π΅ простого), прСдставим, Ρ‡Ρ‚ΠΎ Ρƒ нас имССтся Π‘Π” ΠΊΠ½ΠΈΠ³ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΎΠ² со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ структурой.

ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π—Π°Π΄Π°Ρ‡Π° β€” Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ всС ΠΊΠ½ΠΈΠ³ΠΈ с ΠΈΡ… Π°Π²Ρ‚ΠΎΡ€Π°ΠΌΠΈ.

Запрос Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΊΠ°ΠΊ-Ρ‚ΠΎ Ρ‚Π°ΠΊ:

Π’ ΠΎΡ‚Π²Π΅Ρ‚ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ массив Π΄Π°Π½Π½Ρ‹Ρ….

book.idbook.nameauthor.idauthor.name
1book12author2
1book14author4
1book16author6
2book22author2
2book23author3
2book26author6
2book27author7

Для этого Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ наш запрос:

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π² сСкции SELECT Π·Π°Π΄Π°Π»ΠΈ алиасы: для ΠΏΠΎΠ»Π΅ΠΉ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ ΠΊΠ½ΠΈΠ³Π°Ρ… алиасы с прСфиксом β€˜book_’, Π° для ΠΏΠΎΠ»Π΅ΠΉ с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ± Π°Π²Ρ‚ΠΎΡ€Π°Ρ… с прСфиксом β€˜author’.

Π”Π°Π»Π΅Π΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ ΠΎΡ‚Π²Π΅Ρ‚ Π‘Π”

$rows β€” ΠΎΡ‚Π²Π΅Ρ‚ Π‘Π” Π² Π²ΠΈΠ΄Π΅ массива ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² /stdClass()
$config β€” ассоциативный массив ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΠΉ структуру Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ массива

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Π΅Ρ€Π½ΠΎΠ±Ρ€ΠΎΠ²ΠΎΠ² АлСксСй Аналитик

Big Data Mapping: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…

ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ рассмотрСно, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ это связано с Data Science, ΠΊΠΎΠ³Π΄Π° ΠΈ ΠΊΠ°ΠΊ часто выполняСтся этот процСсс, Π° Ρ‚Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ инструмСнты ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Big Data mapping.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π³Π΄Π΅ это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… систСм свСдСния ΠΎ сСмСйном ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ сотрудника хранятся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Β«1Β» Π² ΠΏΠΎΠ»Π΅ Β«Π΄Π΅Ρ‚ΠΈΒ» ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΈΡ… Π½Π°Π»ΠΈΡ‡ΠΈΠ΅. Π’ Π΄Ρ€ΡƒΠ³ΠΎΠΉ систСмС эти ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ записаны с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ значСния Β«TrueΒ», Π° Π² Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ – словом Β«Π΄Π°Β». Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ€Π°Π·Π½Ρ‹Π΅ систСмы для обозначСния ΠΎΠ΄Π½ΠΈΡ… ΠΈ Ρ‚Π΅Ρ… ΠΆΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ€Π°Π·Π½Ρ‹Π΅ отобраТСния. Π§Ρ‚ΠΎΠ±Ρ‹ привСсти ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΡŽ, слСдуСт ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ обозначСния ΠΎΠ΄Π½ΠΎΠΉ систСмы обозначСниям Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… источниках, Ρ‚.Π΅. Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ мэппинга Π΄Π°Π½Π½Ρ‹Ρ… (ΠΎΡ‚ английского map – сопоставлСниС). Π’ ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌ смыслС ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ – это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ соотвСтствия Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ сСмантиками ΠΈΠ»ΠΈ прСдставлСниями ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… источниках. На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ этот Ρ‚Π΅Ρ€ΠΌΠΈΠ½ Ρ‡Π°Ρ‰Π΅ всСго ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ [1].

Дисциплина управлСния Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Data Management, Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΠ΅Ρ‚ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ ΠΊΠ°ΠΊ процСсс создания ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ элСмСнтов Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ модСлями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся Π² Π½Π°Ρ‡Π°Π»Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ [2]:

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… прСдставляСт собой процСсс Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ инструкций ΠΏΠΎ объСдинСнию ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΅Π΄ΠΈΠ½ΡƒΡŽ схСму, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ схСмы Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π½Ρ‹Ρ… источниках ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ· Π½ΠΈΡ… слСдуСт ΡΠΎΠΏΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ, выявив пСрСсСчСниС, Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ противорСчия [3].

Π‘ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ прилоТСния ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Π΄Π°Π½Π½Ρ‹Ρ… [4]:

Π’ Big Data мэппинг выполняСтся ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² ΠΎΠ·Π΅Ρ€ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… (Data Lake) ΠΈ ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠ΅ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ (DWH, Data Warehouse). Π§Π΅ΠΌ Data Lake отличаСтся ΠΎΡ‚ DWH, рассмотрСно здСсь. Π’ этом случаС ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ рСализуСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ETL-процСсса (Extract, Transform, Load) Π½Π° этапС прСобразования. ΠŸΡ€ΠΈ этом настраиваСтся соотвСтствиС исходных Π΄Π°Π½Π½Ρ‹Ρ… с Ρ†Π΅Π»Π΅Π²ΠΎΠΉ модСлью (рис. 1). Π’ случаС рСляционных Π‘Π£Π‘Π” для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ΄Π½ΠΎΠΉ сущности Π² Ρ€Π°Π·Π½Ρ‹Ρ… прСдставлСниях Π½ΡƒΠΆΠ½ΠΎ с ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ настройкой ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΉ (1:1, *:1, 1:* ΠΈΠ»ΠΈ *:*) [5].

ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² программированииРис.1. ΠœΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ консолидации Ρ‚Π°Π±Π»ΠΈΡ†

Π’ Data Science ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² этап ΠΈΡ… ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ ML-ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° выполняСтся Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ датасСта Π² Π²ΠΈΠ΄Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ. Π’ частности, ΠΊΠΎΠ³Π΄Π° Data Scientist ΠΎΠ±ΠΎΠ³Π°Ρ‰Π°Π΅Ρ‚ исходный датасСт Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· сторонних источников, ΠΎΠ½ занимаСтся ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΎΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ Π΄Π°Ρ‚Π° мэппинга ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ автоматичСски с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² ΠΈ инструмСнтов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ рассмотрСны Π΄Π°Π»Π΅Π΅.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ процСсса Π΄Π°Ρ‚Π° мэппинга

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ Ρ‚Ρ€ΡƒΠ΄ΠΎΠ΅ΠΌΠΊΠΎΡΡ‚ΡŒ мэппинга зависит ΠΎΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² [3]:

ΠžΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ процСсс маппирования ΠΌΠΎΠΆΠ½ΠΎ Π·Π° счСт ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… – свСдСниях ΠΎ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ°Ρ… ΠΈ свойствах ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ автоматичСски ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠΌΠΈ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ…. Π’ частности, Ссли ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈΡ… стандартизированный рССстр, Ρ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ [2]. Однако Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв процСсс мапирования Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапов [4]:

ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с большими объСмами Π΄Π°Π½Π½Ρ‹Ρ… Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ 3 основных ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ [2]:

Π’Π°ΠΊΠΆΠ΅ стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ полуавтоматичСскоС ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ конвСртирования схСм Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΠ³Π΄Π° спСциализированная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° сравниваСт источники Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ†Π΅Π»Π΅Π²ΡƒΡŽ схСму для консолидации. Π—Π°Ρ‚Π΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ провСряСт схСму маппирования ΠΈ вносит исправлСния, Π³Π΄Π΅ это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π”Π°Π»Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° конвСртирования схСм Π΄Π°Π½Π½Ρ‹Ρ… автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠ΄ Π½Π° C++, C # ΠΈΠ»ΠΈ Java для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² систСму ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ (рис. 3) [3].

ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² программированииРис. 3. ΠšΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ схСм Π΄Π°Π½Π½Ρ‹Ρ… Π² процСссС мэппинга

Π”Π°Π»Π΅Π΅ рассмотрим, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ срСдства Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹.

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ маппирования Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…

Как ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, всС срСдства для ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° 3 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ [6]:

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ пСрСчислСнных ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ всС 3 ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ: Ρ€ΡƒΡ‡Π½ΠΎΠΉ (GUI ΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅), data-driven ΠΈ сСмантичСский. Однако, сСмантичСский мэппинг Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия рССстров ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ имССтся Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ прСдприятии. А ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Π΅ рССстры ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅, отраслСвыС ΠΈΠ»ΠΈ городскиС Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ [7] Π½Π΅ всСгда Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΊΠΎΡ€Ρ€Π΅Π»ΠΈΡ€ΡƒΡŽΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с Π·Π°Π΄Π°Ρ‡Π°ΠΌΠΈ построСния локального DWH. Но, наряду с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ государствСнными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ датасСтами, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… DS-Π·Π°Π΄Π°Ρ‡Π°Ρ….

ΠŸΡ€ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ инструмСнта для ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹:

РСзюмС

Π˜Ρ‚Π°ΠΊ, ΠΌΠ°ΠΏΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… – это ваТная Ρ‡Π°ΡΡ‚ΡŒ процСсса Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π² Ρ‚ΠΎΠΌ числС ΠΈ для Data Scientist’а. Π­Ρ‚Π° ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° выполняСтся Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ ΠΊ ML-ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, Π² частности, ΠΏΡ€ΠΈ ΠΎΠ±ΠΎΠ³Π°Ρ‰Π΅Π½ΠΈΠΈ датасСтов. Π’ случаС ΠΎΠ΄Π½ΠΎΡ€Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ формирования датасСта ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ€Π°Π·Π½Ρ‹Ρ… источников сопоставлСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΠ»ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ самописного Python-скрипта. Однако, Ρ‚Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Π² ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм ΠΈΠ»ΠΈ построСнии ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ ΠΈ ΠΎΠ·Π΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π·Π½Π°Π½ΠΈΠ΅ инструмСнтов Π΄Π°Ρ‚Π° мэппинга пригодится ΠΊΠ°ΠΊ Data Scientist’у, Ρ‚Π°ΠΊ ΠΈ Data Engineer’у. НаконСц, сопоставлСниС Π΄Π°Π½Π½Ρ‹Ρ… с Ρ†Π΅Π»ΡŒΡŽ избавлСния ΠΎΡ‚ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΡ€Π΅Ρ‡ΠΈΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² Π·Π°Π΄Π°Ρ‡ΠΈ обСспСчСния качСства Π΄Π°Π½Π½Ρ‹Ρ… (Data Quality) [4]. Π’ свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Data Quality относится ΠΊ области отвСтствСнности стратСга ΠΏΠΎ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΈ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π° ΠΏΠΎ качСству Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ процСсса маппирования Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Data-спСциалисту.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Elasticsearch β€” Π£Ρ€ΠΎΠΊ 3.1 Mapping: схСма Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²

Маппинг (сопоставлСниС) β€” это процСсс опрСдСлСния схСмы ΠΈΠ»ΠΈ структуры Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ². Он описываСт свойства ΠΏΠΎΠ»Π΅ΠΉ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅. Бвойства поля Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, string, integer ΠΈ Ρ‚.Π΄.) ΠΈ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅.

Подобно Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ Π²Ρ‹ опрСдСляСтС схСму Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² SQL, Π²Π°ΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ схСму Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Как ΠΌΡ‹ обсуТдали Ρ€Π°Π½Π΅Π΅, Ρ‚ΠΈΠΏ Π² Elasticsearch ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ SQL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‚ΠΈΠΏ для Π·Π°ΠΊΠ°Π·ΠΎΠ²). ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈΠΌΠ΅Π΅Ρ‚ схСму. НаличиС Ρ€Π°Π·Π½Ρ‹Ρ… схСм Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠ΅ΠΉ для опрСдСлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Apache Lucene, которая Ρ…Ρ€Π°Π½ΠΈΡ‚ ваши Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡ‚ΠΎΠΌ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ понятия Ρ‚ΠΈΠΏΠΎΠ². Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΈΠΏΠ΅ хранится Π² ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ обрабатываСтся Elasticsearch.

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… Elasticsearch, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΈΡ… схСму. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅:

ДинамичСскоС ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Когда Π²Ρ‹ индСксируСтС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π±Π΅Π· указания сопоставлСния, Elasticsearch автоматичСски опрСдСляСт Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ»Π΅ΠΉ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ динамичСскоС сопоставлСниС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ сопоставлСниС Ρ‚ΠΈΠΏΠ° Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ устанавливаСтся автоматичСски:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π°, Ρ‡Ρ‚ΠΎ Elasticsearch ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… age ΠΊΠ°ΠΊ числовоС, date_of_birth ΠΊΠ°ΠΊ Π΄Π°Ρ‚Ρƒ ΠΈ name ΠΊΠ°ΠΊ строковоС. Когда встрСчаСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅, ΠΎΠ½ пытаСтся ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, являСтся Π»ΠΈ ΠΏΠΎΠ»Π΅ логичСским, числовым, тСкстовым ΠΈΠ»ΠΈ Π΄Π°Ρ‚ΠΎΠΉ.

БопоставлСниС числовых ΠΈ логичСских ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Π½Π½Ρ‹Ρ… являСтся простым, Π½ΠΎ для сопоставлСния ΠΏΠΎΠ»Π΅ΠΉ Π΄Π°Ρ‚Ρ‹ сначала провСряСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ строки, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, соотвСтствуСт Π»ΠΈ ΠΎΠ½ΠΎ Π»ΡŽΠ±Ρ‹ΠΌ извСстным шаблонам Π΄Π°Ρ‚.

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ провСряСтся Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ‚Ρ€Π΅Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² Π΄Π°Ρ‚, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π½ΠΈΠΆΠ΅:

Π₯отя Elasticsearch ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎ всС извСстныС поля, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Ρ… нСоТиданностСй. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π»ΡŽΠ±Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, Π½Π΅ входящих Π² сопоставлСниС, Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… опрСдСляСтся Π½Π° основС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ значСния поля. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ³ΠΎ сопоставлСния, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ динамичСскоС сопоставлСниС, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ДинамичСская настройка ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… значСния:

Иногда автоматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Ρ‚Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Если Π½Π°Ρ‡Π°Π»ΠΎ строкового поля случайно совпадаСт с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ Π΄Π°Ρ‚Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… поля ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСн Π½Π° Π΄Π°Ρ‚Π° вмСсто тСкста. Π§Ρ‚ΠΎΠ±Ρ‹ этого ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ автоматичСскоС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π΄Π°Ρ‚Ρ‹, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс с ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ схСму, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ API ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°.

API ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ HTTP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для запроса β€” PUT.

Если всС ΠΏΡ€ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΎΡ‚Π²Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° / поля

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ обсудили, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс со схСмой ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ обсудим, ΠΊΠ°ΠΊ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ Π½ΠΎΠ²Ρ‹Π΅ поля. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, Π½Π°Π·ΠΎΠ²Π΅ΠΌ Π΅Π³ΠΎ history с Ρ†Π΅Π»ΡŒΡŽ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π°ΠΌ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Π·Π°Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° _mapping Π² ΠΊΠΎΠ½Ρ†Π΅ URL-адрСса. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ имя Ρ‚ΠΈΠΏΠ° history Π² example3 индСкс, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Установив ip_address ΠΏΠΎΠ»Π΅ ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ ip, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запросы Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΈ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΏΠΎ IP-адрСсу. ΠœΡ‹ обсудим Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ip Π² скором Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ.

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ схСмы

API ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для извлСчСния ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ схСмы. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ схСму ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ индСкса ΠΈΠ»ΠΈ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ HTTP, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для запроса β€” GET.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚ содСрТит ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ всСх Ρ‚ΠΈΠΏΠΎΠ² Π² example3 :

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сопоставлСниС ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

ИзмСнСниС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ схСмы

Π‘Ρ…Π΅ΠΌΠ° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ»Π΅ΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°. Когда Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ, ΠΎΠ½ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π² ΠΈΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ индСксС Π² соотвСтствии с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Если Π²Ρ‹ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ поля, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ поля ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ нСсколько ΠΏΠΎΠ»Π΅ΠΉ для индСксации ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ поля с использованиСм Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ Π²Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ сопоставлСниС. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π½ΠΎΠ²ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ индСкс ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Reindex API. ΠœΡ‹ обсудим ΠΏΠ΅Ρ€Π΅ΠΈΠ½Π΄Π΅ΠΊΡΠ°Ρ†ΠΈΡŽ Π² 5 ΡƒΡ€ΠΎΠΊΠ΅. Если Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΡƒΠΆΠ΅ индСксированныС Π΄Π°Π½Π½Ρ‹Π΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»Π΅ с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…

Π’ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠΌ ΠΌΠΈΡ€Π΅ SQL Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ простым, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ integer, boolean ΠΈ Ρ‚. Π΄. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Elasticsearch прСдставлСны ΠΊΠ°ΠΊ JSON, ΠΎΠ½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ слоТными ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, массивы ΠΈ Ρ‚. Π΄.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

Π‘Π»ΠΎΠΆΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… Geo:

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…:

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ ΠΌΠ΅Ρ‚Π°-полях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТатся Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅.

ΠœΠ΅Ρ‚Π°-поля

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ индСкс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ индСксируСм, ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ‚Π°-поля, Ρ‚Π°ΠΊΠΆΠ΅ извСстныС ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚Π°-поля ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎΠ³ΠΎ опрСдСлСния Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°:

Как ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²Ρ‹Π΅ значСния

Когда Elasticsearch встрСчаСт Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ JSON Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅, ΠΎΠ½ΠΎ пропускаСт это ΠΏΠΎΠ»Π΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ проиндСксировано. Но Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ всС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹, содСрТащиС Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ Elasticsearch Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½ null_value Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠΎΠ»Π΅. ЦСлочислСнноС ΠΏΠΎΠ»Π΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½ΡƒΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся строкой.

Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°

Поиск ΠΏΠΎ всСм ΠΏΠΎΠ»Π΅ΠΌ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅

Когда ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ индСксируСтся вмСстС с полями Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Elasticsearch индСксируСт всС значСния ΠΏΠΎΠ»Π΅ΠΉ Π² ΠΎΠ΄Π½Ρƒ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ строку ( Β«john jake iphone 2017-02-08Β» ) Π² качСствС _all поля. Запрос для всСх Π·Π°ΠΊΠ°Π·ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат, item_title ΠΊΠ°ΠΊ iphone ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅:

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ»Π΅ _all Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ. Если Π²Ρ‹ Π½Π΅ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅. ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° индСкса Π½Π° дискС:

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ части ΡƒΡ€ΠΎΠΊΠ° ΠΌΡ‹ обсудим Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для получСния ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² поиска.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Π°ΡΡ‚ΡŒ 2. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ классов, ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΎΠ² ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π‘Π”

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ части Π±Ρ‹Π»ΠΈ рассмотрСны Π²ΠΈΠ΄Ρ‹ связСй (ΠΎΠ΄ΠΈΠ½-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ класс Book ΠΈ Π΅Π³ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³-класс BookMap. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ части ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ класс Book, создадим ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ классы ΠΈ связи ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ, ΠΊΠ°ΠΊ это Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΎ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π³Π»Π°Π²Π΅ Π² Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠΈΠ²ΡˆΠ΅ΠΉΡΡ Π½Π°Π΄ ΠΏΠΎΠ΄Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠΌ 1.3.1 Бвязи.

НСбольшоС объяснСниС
public virtual ISet Genres < get; set; >
public virtual ISet Authors

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΠ΅-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒ, ΠΎΠ΄ΠΈΠ½-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌ.

BookSeries
References(x => x.Series).Cascade.SaveUpdate();HasMany(x => x.Books)
.Inverse();

ΠœΠ΅Ρ‚ΠΎΠ΄ References примСняСтся Π½Π° сторонС «МногиС-ΠΊ-ΠΎΠ΄Π½ΠΎΠΌΡƒΒ», Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ сторонС «Один-ΠΊΠΎ-ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» Π±ΡƒΠ΄Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ HasMany.

Если сСйчас Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π‘Π” Bibilioteca, Ρ‚ΠΎ появятся Π½ΠΎΠ²Ρ‹Π΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с ΡƒΠΆΠ΅ сформированными связями.
ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ
Π”Π°Π»Π΅Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ созданныС Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ данными…
Для этого создадим тСстовоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π‘Π”, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ…, ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ² HomeController ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ (НСнуТныС участки ΠΊΠΎΠ΄Π° ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ):

ИзмСним прСдставлСниС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Маппинг для классов, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ наслСдованиС.
А ΠΊΠ°ΠΊ ΠΌΠ°ΠΏΠΏΠΈΡ‚ΡŒ классы Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ наслСдованиС? Допустим, ΠΈΠΌΠ΅Π΅ΠΌ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, Π½ΠΈΡ‡Π΅Π³ΠΎ слоТного Π² этом ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π΅ Π½Π΅Ρ‚, ΠΌΡ‹ просто создадим ΠΎΠ΄ΠΈΠ½ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ класса, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Triangle.

ПослС запуска прилоТСния, Π² Π‘Π” Biblioteca появится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ (пустая) Ρ‚Π°Π±Π»ΠΈΡ†Π°
ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ModelMapper ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½?

ΠΠ²Ρ‚ΠΎΡ€ΠΈΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ ModelMapper ΠΈ Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½?

ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π€ΠΎΡ‚ΠΎ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΎΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

Senior Java Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Usetech

Π’ Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ любого прилоТСния программист сталкиваСтся с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с модСлями Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², созданных для Ρ€Π°Π·Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ. И соотвСтствСнно, с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΌΠ΅ΠΆΠ΄Ρƒ собой. Если ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС развития, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рукописныС ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€Ρ‹. Но Ρ€Π°Π½ΠΎ ΠΈΠ»ΠΈ ΠΏΠΎΠ·Π΄Π½ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ станСт большС, ΠΈ Π²Ρ‹ ΡΡ‚ΠΎΠ»ΠΊΠ½Ρ‘Ρ‚Π΅ΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.

Одним ΠΈΠ· Ρ‚Π°ΠΊΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ являСтся МodelMapper. Π•Π³ΠΎ ΠΎΡ‡Π΅Π½ΡŒ просто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² самом Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π±Π΅Π· особых Π·Π½Π°Π½ΠΈΠΉ. ΠŸΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ основныС ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ использования Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ°.

Как Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ModelMapper?

Π‘Π½Π°Ρ‡Π°Π»Π° добавляСм Π΅Π³ΠΎ Π² зависимости. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ maven, Ρ‚ΠΎ:

implementation group: β€˜org.modelmapper’, name: β€˜modelmapper’, version: β€˜2.3.0’

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρƒ нас простой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ RestAPI ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ entity Π² dto ΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. На этапС ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠ° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ, ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π°ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ. МodelMapper всё сдСлаСт Π·Π° нас.

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, прСдставлСнном Π½ΠΈΠΆΠ΅, я Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ Lombok, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ =)

Наши entity:

Наша dto:

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΌΠ°ΠΏΠΏΠΈΡ‚ΡŒ entity Π² dto Π½Π°ΠΌ достаточно Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ простой ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€:

А для наполнСния Π±Π°Π·Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ entity:

И наш ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ с ΠΎΠ΄Π½ΠΈΠΌ СдинствСнным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ:

ПослС выполнСния запроса http://localhost:8080/book ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‚:

МodelMapper ΠΏΠΎ названию ΠΏΠΎΠ»Π΅ΠΉ сам догадываСтся, Ρ‡Ρ‚ΠΎ Π½Π° Ρ‡Ρ‚ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ°ΠΏΠΏΠΈΡ‚ΡŒ. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ мноТСство ΠΌΠΎΠ΄Π΅Π»Π΅ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² Ρ†Π΅Π»ΠΎΠΌ ΠΏΠΎΡ…ΠΎΠΆΠΈ Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π°. Π’Π΅ΡΡŒ процСсс ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ части: распознаниС ΠΈ связь ΠΏΠΎΠ»Π΅ΠΉ, Π° Ρ‚Π°ΠΊΠΆΠ΅ пСрСнос Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Если ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΌΠ°ΠΏΠΏΠ΅Ρ€Π° простыми словами, Ρ‚ΠΎ: ΠΎΠ½ сканируСт поля Π² соотвСтствии с AccessLevel, парсит ΠΈΡ… ΠΈ Π±ΡŒΡ‘Ρ‚ Π½Π° Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, сравнивая эти Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ ΠΎΠ½ пытаСтся ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ Π»ΠΈ ΠΏΠΎΠ»Π΅ для ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°. Π‘Ρ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΠΈ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ точности:

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ настройки Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ для ModelMapper:

Π­Ρ‚ΠΎ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ всС настройки МodelMapper, большС настроСк ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² классС InheritingConfiguration.

Маппинг ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ

Для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π΅Π³ΠΎ спСциалиста, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅, Π²ΠΏΠΎΠ»Π½Π΅ достаточно. Но для ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎΠ³ΠΎ прилоТСния Π½ΡƒΠΆΠ΅Π½ больший ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΎΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ. Π’Π°ΠΊΠΆΠ΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΌΠ°ΠΏΠΏΠΈΡ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ сущности. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ ΠΌΡ‹ рассмотрим, ΠΊΠ°ΠΊ Π½Π°ΠΌ с этим ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ МodelMapper.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ услоТним наш ΠΌΠ°ΠΏΠΏΠΈΠ½Π³. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π² нашСм ΠΏΠΎΠ»Π΅ index Π½Π΅ Π½ΡƒΠΆΠ½Π° подстрока ISBN:. Как Π½Π°ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ условия ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ поля ΠΌΡ‹ удаляли эту подстроку?

МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Converter :

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ создали TypeMap для Π΄Π²ΡƒΡ… Π½Π°ΡˆΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΡƒΠΊΠ°Π·Π°Π»ΠΈ ΠΏΠΎΠ»Π΅, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наш запрос Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

ΠœΡ‹ Π½Π°ΡƒΡ‡ΠΈΠ»ΠΈΡΡŒ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ ΠΈ Ρ†Π΅Π»Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π‘ этим ΡƒΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ. Но Π±Ρ‹Π²Π°ΡŽΡ‚ случаи, ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ просто ΡΠ²ΡΠ·Π°Ρ‚ΡŒ Π΄Π²Π° Π½Π°Π·Π²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ поля.

Π”ΠΎΠ±Π°Π²ΠΈΠΌ Π² наши ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ поля: comment Π² BookEntity ΠΈ review Π² BookDto ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ наш BookConverter:

И Ρ‚ΠΎΠ³Π΄Π° запрос Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΡ€ΠΈ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ Ρƒ нас Π±ΡƒΠ΄Π΅Ρ‚ мСньшС ΠΌΠΎΡ€ΠΎΠΊΠΈ.

А Ρ‡Ρ‚ΠΎ, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ°ΠΏΠΏΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ ΡΡƒΡ‰Π½ΠΎΡΡ‚ΡŒ? Для этого ΠΌΡ‹ снова ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌ BookDto ΠΈ добавляСм Ρ‚ΡƒΠ΄Π° ΠΏΠΎΠ»Π΅ author вмСсто authorName. А Ρ‚Π°ΠΊΠΆΠ΅ создаём класс AuthorDto, содСрТащий Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ»Π΅ name.

И наш BookConverter Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

А Π² ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π½Π° запрос ΠΊΠ½ΠΈΠ³ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

Маппинг и наслСдованиС

Π‘Π°ΠΌΠΎΠ΅ просто ΠΌΡ‹ Ρ€Π°Π·ΠΎΠ±Ρ€Π°Π»ΠΈ Ρ€Π°Π½Π΅Π΅. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΆΠ΅ ModelМapper Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с наслСдованиСм. Для этого ΠΌΡ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ модСль Π½Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…, Π΄ΠΎΠ±Π°Π²ΠΈΠ² наслСдников для ΠΊΠ½ΠΈΠ³.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ наша модСль Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

А наши Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊ:

И Π²ΠΎΡ‚ Ρ‚Π°ΠΊ ΠΌΡ‹ помСняСм наш ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΎΡ€:

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ModelМapper понял, Ρ‡Ρ‚ΠΎ AudioBookEntity ΠΈ HardCoverBookEntity β€” это наслСдники BookEntity, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊ TypeMap Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ include ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΈ. Но, ΠΊ соТалСнию, для Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ΠΎΠ² Π½Π°ΠΌ Π½Π°Π΄ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΌΠ°ΠΏΠΏΠΈΠ½Π³ всСх ΠΏΠΎΠ»Π΅ΠΉ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π­Ρ‚Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Ссли Ρƒ вас Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ классы ΠΈ развитая иСрархия наслСдования классов.

Π’ ΠΎΡ‚Π²Π΅Ρ‚Π΅ Π½Π° запрос Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ:

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

ModelМapper β€” это ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ Π½Π° стартС вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊ ΠΈ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ·Π΄Π½ΠΈΡ… этапах. Но Ρƒ Π½Π΅Π³ΠΎ, ΠΊΠ°ΠΊ ΠΈ Ρƒ любого инструмСнта, Π΅ΡΡ‚ΡŒ свои слабыС стороны ΠΈ ограничСния, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… стоит Π·Π½Π°Ρ‚ΡŒ ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *