ORM (англ. Object-relational mapping, Об'єктно-реляційна проєкція) — технологія програмування, яка зв'язує бази даних з концепціями об'єктно-орієнтованих мов програмування, створюючи «віртуальну об'єктну базу даних».
Проблема
В об'єктно-орієнтованому програмуванні об'єкти в програмі представляють об'єкти з реального світу. Як приклад можна навести адресну книгу, яка містить список людей разом з кількома телефонами і кількома адресами. В термінах об'єктно-орієнтованого програмування вони будуть представлені об'єктами класу «Людина», які міститимуть такі атрибути: ім'я, список (або масив) телефонів і список адрес.
Суть проблеми полягає в перетворенні таких об'єктів у форму, в якій вони можуть бути збережені у файлах або базах даних, і які легко можуть бути витягнуті в подальшому, зі збереженням властивостей об'єктів і відношень між ними. Ці об'єкти називають «постійними» (англ. persistent). Існує кілька підходів до розв'язання цієї задачі.
Реляційні СУБД
Вирішення проблеми зберігання даних існує — це реляційні системи управління базами даних. Використання реляційної бази даних для зберігання об'єктно-орієнтованих даних приводить до семантичного провалу, примушуючи програмістів писати програмне забезпечення, яке повинне вміти як обробляти дані в об'єктно-орієнтованому вигляді, так і вміти зберегти ці дані в реляційній формі. Ця постійна необхідність в перетворенні між двома різними формами даних не тільки сильно знижує продуктивність, але і створює труднощі для програмістів, оскільки обидві форми даних накладають обмеження одна на одну.
Реляційні бази даних використовують набір таблиць, що представляють прості дані. Додаткова або зв'язана інформація зберігається в інших таблицях. Часто для зберігання одного об'єкта в реляційній базі даних використовують кілька таблиць; це, у свою чергу, вимагає застосування операції JOIN для отримання всієї інформації, що стосується об'єкта, для її обробки. Наприклад, в розглянутому варіанті із записною книгою, для зберігання даних, швидше за все, використовуватимуться як мінімум дві таблиці: люди і адреси, і, можливо, навіть таблиця з телефонними номерами.
Оскільки системи управління реляційними базами даних зазвичай не реалізують реляційного представлення фізичного рівня зв'язків, виконання кількох послідовних запитів (що стосуються однієї «об'єктно-орієнтованої» структури даних) може бути дуже витратним. Зокрема, один запит вигляду «знайти такого-то користувача і всі його телефони і всі його адреси і повернути їх у такому форматі», швидше за все, буде виконаний швидше за серію запитів вигляду «Знайти користувача. Знайти його адреси. Знайти його телефони». Це відбувається завдяки роботі оптимізатора і витратам на синтаксичний аналіз запиту.
Деякі реалізації ORM автоматично синхронізують завантажені в пам'ять об'єкти з базою даних. Для того, щоб це було можливим, після створення SQL-запиту, що перетворює об'єкт в SQL, отримані дані копіюються в поля об'єкта, як у всіх інших реалізаціях ORM. Після цього об'єкт повинен стежити за змінами цих значень і записувати їх у базу даних.
Системи управління реляційними базами даних показують хорошу продуктивність на глобальних запитах, які зачіпають велику ділянку бази даних, але об'єктно-орієнтований доступ ефективніший при роботі з малими обсягами даних, бо це дозволяє скоротити семантичний провал між об'єктною і реляційною формами даних.
При одночасному існуванні цих двох різних світів збільшується складність об'єктного коду для роботи з реляційними базами даних, і він стає схильнішим до помилок. Розробники програмного забезпечення, що ґрунтується на базах даних, шукали легший спосіб досягнення постійності їхніх об'єктів.
Рішення
Розроблено безліч пакетів, що знімають необхідність у перетворенні об'єктів для зберігання в реляційних базах даних.
Деякі пакети вирішують цю проблему, надаючи бібліотеки класів, здатних виконувати такі перетворення автоматично. Маючи список таблиць в базі даних і об'єктів в програмі, вони автоматично перетворять запити з одного вигляду в іншій. В результаті запиту об'єкта «людина» (з прикладу з адресною книгою) необхідний SQL-запит буде сформований і виконаний, а результати «магічним» чином перетворені в об'єкти «номер телефону» всередині програми.
З погляду програміста система повинна виглядати як постійне сховище об'єктів. Він може просто створювати об'єкти і працювати з ними як завжди, а вони автоматично зберігатимуться в реляційній базі даних.
На практиці все не так просто і очевидно. Всі системи ORM зазвичай проявляють себе в тому або іншому вигляді, зменшуючи в деякому роді можливість ігнорування бази даних. Більш того, шар транзакцій може бути повільним і неефективним (особливо в термінах згенерованого SQL). Все це може привести до того, що програми працюватимуть повільніше і використовуватимуть більше пам'яті, ніж програми, написані «вручну».
Але ORM позбавляє програміста від написання великої кількості коду, часто одноманітного і схильного до помилок, тим самим значно підвищуючи швидкість розробки. Крім того, більшість сучасних реалізацій ORM дозволяє програмістові при необхідності жорстко задати код SQL-запитів, який використовуватиметься при тих чи інших діях (збереження в базу даних, завантаження, пошук тощо) з постійним об'єктом.
Реалізації
Існують як комерційні, так і вільні реалізації цієї технології.
- Sequelize (JavaScript)
- JPA, Hibernate (Java)
- Syrius, Doctrine (PHP)
- SQLAlchemy (Python)
- Entity Framework (.NET Framework)
- ((.NET Core))
Див. також
Ця стаття не містить . (жовтень 2014) |
Це незавершена стаття про інформаційні технології. Ви можете проєкту, виправивши або дописавши її. |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
ORM angl Object relational mapping Ob yektno relyacijna proyekciya tehnologiya programuvannya yaka zv yazuye bazi danih z koncepciyami ob yektno oriyentovanih mov programuvannya stvoryuyuchi virtualnu ob yektnu bazu danih ProblemaV ob yektno oriyentovanomu programuvanni ob yekti v programi predstavlyayut ob yekti z realnogo svitu Yak priklad mozhna navesti adresnu knigu yaka mistit spisok lyudej razom z kilkoma telefonami i kilkoma adresami V terminah ob yektno oriyentovanogo programuvannya voni budut predstavleni ob yektami klasu Lyudina yaki mistitimut taki atributi im ya spisok abo masiv telefoniv i spisok adres Sut problemi polyagaye v peretvorenni takih ob yektiv u formu v yakij voni mozhut buti zberezheni u fajlah abo bazah danih i yaki legko mozhut buti vityagnuti v podalshomu zi zberezhennyam vlastivostej ob yektiv i vidnoshen mizh nimi Ci ob yekti nazivayut postijnimi angl persistent Isnuye kilka pidhodiv do rozv yazannya ciyeyi zadachi Relyacijni SUBDDokladnishe Relyacijna sistema keruvannya bazami danih Virishennya problemi zberigannya danih isnuye ce relyacijni sistemi upravlinnya bazami danih Vikoristannya relyacijnoyi bazi danih dlya zberigannya ob yektno oriyentovanih danih privodit do semantichnogo provalu primushuyuchi programistiv pisati programne zabezpechennya yake povinne vmiti yak obroblyati dani v ob yektno oriyentovanomu viglyadi tak i vmiti zberegti ci dani v relyacijnij formi Cya postijna neobhidnist v peretvorenni mizh dvoma riznimi formami danih ne tilki silno znizhuye produktivnist ale i stvoryuye trudnoshi dlya programistiv oskilki obidvi formi danih nakladayut obmezhennya odna na odnu Relyacijni bazi danih vikoristovuyut nabir tablic sho predstavlyayut prosti dani Dodatkova abo zv yazana informaciya zberigayetsya v inshih tablicyah Chasto dlya zberigannya odnogo ob yekta v relyacijnij bazi danih vikoristovuyut kilka tablic ce u svoyu chergu vimagaye zastosuvannya operaciyi JOIN dlya otrimannya vsiyeyi informaciyi sho stosuyetsya ob yekta dlya yiyi obrobki Napriklad v rozglyanutomu varianti iz zapisnoyu knigoyu dlya zberigannya danih shvidshe za vse vikoristovuvatimutsya yak minimum dvi tablici lyudi i adresi i mozhlivo navit tablicya z telefonnimi nomerami Oskilki sistemi upravlinnya relyacijnimi bazami danih zazvichaj ne realizuyut relyacijnogo predstavlennya fizichnogo rivnya zv yazkiv vikonannya kilkoh poslidovnih zapitiv sho stosuyutsya odniyeyi ob yektno oriyentovanoyi strukturi danih mozhe buti duzhe vitratnim Zokrema odin zapit viglyadu znajti takogo to koristuvacha i vsi jogo telefoni i vsi jogo adresi i povernuti yih u takomu formati shvidshe za vse bude vikonanij shvidshe za seriyu zapitiv viglyadu Znajti koristuvacha Znajti jogo adresi Znajti jogo telefoni Ce vidbuvayetsya zavdyaki roboti optimizatora i vitratam na sintaksichnij analiz zapitu Deyaki realizaciyi ORM avtomatichno sinhronizuyut zavantazheni v pam yat ob yekti z bazoyu danih Dlya togo shob ce bulo mozhlivim pislya stvorennya SQL zapitu sho peretvoryuye ob yekt v SQL otrimani dani kopiyuyutsya v polya ob yekta yak u vsih inshih realizaciyah ORM Pislya cogo ob yekt povinen stezhiti za zminami cih znachen i zapisuvati yih u bazu danih Sistemi upravlinnya relyacijnimi bazami danih pokazuyut horoshu produktivnist na globalnih zapitah yaki zachipayut veliku dilyanku bazi danih ale ob yektno oriyentovanij dostup efektivnishij pri roboti z malimi obsyagami danih bo ce dozvolyaye skorotiti semantichnij proval mizh ob yektnoyu i relyacijnoyu formami danih Pri odnochasnomu isnuvanni cih dvoh riznih svitiv zbilshuyetsya skladnist ob yektnogo kodu dlya roboti z relyacijnimi bazami danih i vin staye shilnishim do pomilok Rozrobniki programnogo zabezpechennya sho gruntuyetsya na bazah danih shukali legshij sposib dosyagnennya postijnosti yihnih ob yektiv RishennyaRozrobleno bezlich paketiv sho znimayut neobhidnist u peretvorenni ob yektiv dlya zberigannya v relyacijnih bazah danih Deyaki paketi virishuyut cyu problemu nadayuchi biblioteki klasiv zdatnih vikonuvati taki peretvorennya avtomatichno Mayuchi spisok tablic v bazi danih i ob yektiv v programi voni avtomatichno peretvoryat zapiti z odnogo viglyadu v inshij V rezultati zapitu ob yekta lyudina z prikladu z adresnoyu knigoyu neobhidnij SQL zapit bude sformovanij i vikonanij a rezultati magichnim chinom peretvoreni v ob yekti nomer telefonu vseredini programi Z poglyadu programista sistema povinna viglyadati yak postijne shovishe ob yektiv Vin mozhe prosto stvoryuvati ob yekti i pracyuvati z nimi yak zavzhdi a voni avtomatichno zberigatimutsya v relyacijnij bazi danih Na praktici vse ne tak prosto i ochevidno Vsi sistemi ORM zazvichaj proyavlyayut sebe v tomu abo inshomu viglyadi zmenshuyuchi v deyakomu rodi mozhlivist ignoruvannya bazi danih Bilsh togo shar tranzakcij mozhe buti povilnim i neefektivnim osoblivo v terminah zgenerovanogo SQL Vse ce mozhe privesti do togo sho programi pracyuvatimut povilnishe i vikoristovuvatimut bilshe pam yati nizh programi napisani vruchnu Ale ORM pozbavlyaye programista vid napisannya velikoyi kilkosti kodu chasto odnomanitnogo i shilnogo do pomilok tim samim znachno pidvishuyuchi shvidkist rozrobki Krim togo bilshist suchasnih realizacij ORM dozvolyaye programistovi pri neobhidnosti zhorstko zadati kod SQL zapitiv yakij vikoristovuvatimetsya pri tih chi inshih diyah zberezhennya v bazu danih zavantazhennya poshuk tosho z postijnim ob yektom RealizaciyiIsnuyut yak komercijni tak i vilni realizaciyi ciyeyi tehnologiyi Sequelize JavaScript JPA Hibernate Java Syrius Doctrine PHP SQLAlchemy Python Entity Framework NET Framework NET Core Div takozhCya stattya ne mistit posilan na dzherela Vi mozhete dopomogti polipshiti cyu stattyu dodavshi posilannya na nadijni avtoritetni dzherela Material bez dzherel mozhe buti piddano sumnivu ta vilucheno zhovten 2014 Ce nezavershena stattya pro informacijni tehnologiyi Vi mozhete dopomogti proyektu vipravivshi abo dopisavshi yiyi