SlideShare a Scribd company logo
1 of 35
Download to read offline
Presentation title here
Doctrine internals
UnitOfWork
Presentation title here
About me
https://www.facebook.com/yatsenco
https://github.com/anyt
about me…
Andrey Yatsenco
● PHP Developer at Oro Inc.
● 3 years with Symfony
● 6 years with PHP
Presentation title here
Doctrine Internals. UnitOfWork
Introduction
● Doctrine is the bottleneck for many apps
● You know how UnitOfWork is working, you
know how doctrine works
Presentation title here
Doctrine Internals. UnitOfWork
UnitOfWork track objects changes and
commit them transactionally to the Database.
Now you don’t manage object loading from
the DataBase. UOW do.
Presentation title here
Doctrine Internals. UnitOfWork
UOW use IdentityMap to track objects
changes and to avoid server round trip
It simple two level array storage
● First level keys are ClassNames
● Second level keys are object IDs.
Presentation title here
Doctrine Internals. UnitOfWork
Doctrine EntityManager is like all-in-one
decorator on
● Repository
● UnitOfWork
● MetadataFactory
● ProxyFactory
● etc.
Presentation title here
Doctrine Internals. UnitOfWork
EntityManager -> EntityRepository
● find
● findOneBy
● findAll
● customFindQueryWithHidration
● etc.
Presentation title here
Doctrine Internals. UnitOfWork
EntityManager->UnitOfWork
● persist
● refresh
● remove
● flush
● etc.
Presentation title here
Doctrine Internals. UnitOfWork
EntityManager->UnitOfWork
● persist
● refresh
● remove
● commit
● etc.
Presentation title here
Doctrine Internals. UnitOfWork
Doctrine flow
● 1) Fetch entities from the database or
create new and persist ‘em (Repo|UOW)
● 2) Update some of entities directly or using
wrapper like Form (uses PropertyAccess)
● Remove some, if needed (Forms etc.)
● 3) EM->flush() changes (UOW)
Presentation title here
Doctrine Internals. UnitOfWork
1) Fetching entities from the DB
● One entity:
○ find
○ findOneBy
● Several entities:
○ Lazy/Eager loading
○ Find partial
Presentation title here
Doctrine Internals. UnitOfWork
1) Persist
● Can be omitted if you fetched entities from
doctrine
● Required only for newly created entities
Presentation title here
Doctrine Internals. UnitOfWork
2) Update
Object changes outside Doctrine.
● Direct changes
● Forms (PropertyAccessor)
● etc.
Presentation title here
Doctrine Internals. UnitOfWork
3) Flush
Sync changes with the Database
Presentation title here
Doctrine Internals. UnitOfWork
3) Flush Flow
● Open DB transaction
● Complute change-sets for update
● Iterate over scheduled inserts, updates,
deletes
● Delegate to entity persister SQL generation
and execution
● Clear UOW on success
● Close DB transaction
Presentation title here
Doctrine Internals. UnitOfWork
UnitOfWork through Doctrine Events
● fetch
● persist
● remove
● flush
Presentation title here
Doctrine Internals. UnitOfWork
Fetch
Repo-> find|refresh|getReference|etc.
● (optional) sync data with DB
● Events::loadClassMetadata
○ If ! Events:onClassMetadataNotFound
● hydrate
● Events:postLoad
Presentation title here
Doctrine Internals. UnitOfWork
Persist
● Events:prePersist
● Entity ID isn’t exist at this time in most cases
● UOW->scheduleForInsert($entity)
Presentation title here
Doctrine Internals. UnitOfWork
Remove
● Events::preRemove
● UOW->scheduleForDelete($entity)
Presentation title here
Doctrine Internals. UnitOfWork
Flush
● UOW->commit(null|object|array $entity)
Presentation title here
Doctrine Internals. UnitOfWork
Flush (1)
● Events::preFlush
○ $em->flush() can be called safely
● compute insert|update|delete changesets
● If !changes
○ Events::onFlush
○ Events::postFlush
○ return
Presentation title here
Doctrine Internals. UnitOfWork
Flush (2)
● Events::onFlush
○ UOW->getScheduledEntityInsertions()
○ UOW->getScheduledEntityUpdates()
○ UOW->getScheduledEntityDeletions()
○ $em->persist() && UOW-
>computeChangeSet()
● connection->beginTransaction
Presentation title here
Doctrine Internals. UnitOfWork
Flush (3)
● Inserts
○ Persister->insert($entity)
○ Events::postPersist
■ entity can’t be updated directly anymore
■ UOW->scheduleExtraUpdate($entity, array $changeset)
Presentation title here
Doctrine Internals. UnitOfWork
Flush (4)
● Updates
○ Events::preUpdate
■ Entity can’t be updated directly, update changeset using
PreUpdateEventArgs
■ Relations changes not tracked too
○ UOW->recomputeSingleEntityChangeSet($class, $entity)
○ Persister->update($entity)
○ Events::postUpdate
■ Entity can’t be updated directly anymore
■ UOW->scheduleExtraUpdate($entity, array $changeset)
● UOW->executeExtraUpdates()
Presentation title here
Doctrine Internals. UnitOfWork
Flush (5)
● Deletions
○ Persister->delete($entity)
○ Events::postRemove
■ nothing to update here
Presentation title here
Doctrine Internals. UnitOfWork
Flush (6)
● connection->commit()
● Events::postFlush
○ Never call $em->flush() here
● UOW->clear();
○ Events::onClear
● in case of errors
○ connection->rollback()
That’s it.
Presentation title here
Doctrine Internals. UnitOfWork
Let’s talk a little bit about performance and
how to speed-up doctrine
Presentation title here
Doctrine Internals. UnitOfWork
How to speed-up doctrine
● Cache
○ Metadata
○ Query
○ result
Presentation title here
Doctrine Internals. UnitOfWork
How to speed-up doctrine
● Control lazy-loading
○ Never eager load
○ Write select queries with joins to needed
Presentation title here
Doctrine Internals. UnitOfWork
How to speed-up doctrine
● Fetch less
○ getReference
○ {partial}
Presentation title here
Doctrine Internals. UnitOfWork
How to speed-up doctrine
● Hydrate less
○ arrays instead of objects when you don’t
need them or performance is important
Presentation title here
Doctrine Internals. UnitOfWork
How to speed-up doctrine
● Make flush cheaper
○ Mark entities as readOnly
○ Chang tracking policy to
DEFERRED_EXPLICIT or NOTIFY
○ Provide flush arguments (applies
objects and arrays)
Presentation title here
Doctrine Internals. UnitOfWork
How to speed-up doctrine
● Optimize queries
Presentation title here
Doctrine Internals. UnitOfWork
Links:
docs
● http://www.doctrine-project.org/api/orm/2.0/class-Doctrine.ORM.UnitOfWork.html
● http://doctrine-orm.readthedocs.io/projects/doctrine-orm/
Patterns
● http://martinfowler.com/eaaCatalog/unitOfWork.html
● http://martinfowler.com/eaaCatalog/identityMap.html
Sergey Zhuravel presentation about Doctrine Events
● http://www.slideshare.net/sergeyz/oro-meetups-doctrine-events?qid=7d9177e9-c41c-4642-
bdba-e1fa3060bb17&v=&b=&from_search=1
Presentation title here
?

More Related Content

What's hot

Collectors in the Wild
Collectors in the WildCollectors in the Wild
Collectors in the WildJosé Paumard
 
Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018André Luiz Forchesatto
 
collection framework in java
collection framework in javacollection framework in java
collection framework in javaMANOJ KUMAR
 
Spring framework Controllers and Annotations
Spring framework   Controllers and AnnotationsSpring framework   Controllers and Annotations
Spring framework Controllers and AnnotationsAnuj Singh Rajput
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introductionJonathan Holloway
 
Inversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionInversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionDinesh Sharma
 
Collections - Maps
Collections - Maps Collections - Maps
Collections - Maps Hitesh-Java
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to javaAjay Sharma
 
Oracle Forms Tutorial
Oracle Forms TutorialOracle Forms Tutorial
Oracle Forms TutorialATR Login
 
Inheritance in c++ by Manan Pasricha
Inheritance in c++ by Manan PasrichaInheritance in c++ by Manan Pasricha
Inheritance in c++ by Manan PasrichaMananPasricha
 
Mysql creating stored function
Mysql  creating stored function Mysql  creating stored function
Mysql creating stored function Prof.Nilesh Magar
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)arvind pandey
 
Collections - Lists, Sets
Collections - Lists, Sets Collections - Lists, Sets
Collections - Lists, Sets Hitesh-Java
 
Introduction to JCR and Apache Jackrabbi
Introduction to JCR and Apache JackrabbiIntroduction to JCR and Apache Jackrabbi
Introduction to JCR and Apache JackrabbiJukka Zitting
 

What's hot (20)

Collectors in the Wild
Collectors in the WildCollectors in the Wild
Collectors in the Wild
 
Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018Spring Security e Spring Boot Aula - 2018
Spring Security e Spring Boot Aula - 2018
 
Js: master prototypes
Js: master prototypesJs: master prototypes
Js: master prototypes
 
collection framework in java
collection framework in javacollection framework in java
collection framework in java
 
Second Level Cache in JPA Explained
Second Level Cache in JPA ExplainedSecond Level Cache in JPA Explained
Second Level Cache in JPA Explained
 
Spring framework Controllers and Annotations
Spring framework   Controllers and AnnotationsSpring framework   Controllers and Annotations
Spring framework Controllers and Annotations
 
Jdbc
JdbcJdbc
Jdbc
 
Spring boot - an introduction
Spring boot - an introductionSpring boot - an introduction
Spring boot - an introduction
 
Inversion of Control and Dependency Injection
Inversion of Control and Dependency InjectionInversion of Control and Dependency Injection
Inversion of Control and Dependency Injection
 
Basics of Java
Basics of JavaBasics of Java
Basics of Java
 
Collections - Maps
Collections - Maps Collections - Maps
Collections - Maps
 
Core Java Tutorial
Core Java TutorialCore Java Tutorial
Core Java Tutorial
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
 
Oracle Forms Tutorial
Oracle Forms TutorialOracle Forms Tutorial
Oracle Forms Tutorial
 
Inheritance in c++ by Manan Pasricha
Inheritance in c++ by Manan PasrichaInheritance in c++ by Manan Pasricha
Inheritance in c++ by Manan Pasricha
 
Mysql creating stored function
Mysql  creating stored function Mysql  creating stored function
Mysql creating stored function
 
Core java complete ppt(note)
Core java  complete  ppt(note)Core java  complete  ppt(note)
Core java complete ppt(note)
 
Collections - Lists, Sets
Collections - Lists, Sets Collections - Lists, Sets
Collections - Lists, Sets
 
Introduction to JCR and Apache Jackrabbi
Introduction to JCR and Apache JackrabbiIntroduction to JCR and Apache Jackrabbi
Introduction to JCR and Apache Jackrabbi
 
Php with mysql ppt
Php with mysql pptPhp with mysql ppt
Php with mysql ppt
 

Similar to Doctrine Internals. UnitOfWork

Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsJeff Durta
 
Loaders (and why we should use them)
Loaders (and why we should use them)Loaders (and why we should use them)
Loaders (and why we should use them)Michael Pustovit
 
Automation Abstraction Layers: Page Objects and Beyond
Automation Abstraction Layers: Page Objects and BeyondAutomation Abstraction Layers: Page Objects and Beyond
Automation Abstraction Layers: Page Objects and BeyondAlan Richardson
 
Tool Development 07 - Undo & Redo, Drag & Drop
Tool Development 07 - Undo & Redo, Drag & DropTool Development 07 - Undo & Redo, Drag & Drop
Tool Development 07 - Undo & Redo, Drag & DropNick Pruehs
 
MobileCity:Core Data
MobileCity:Core DataMobileCity:Core Data
MobileCity:Core DataAllan Davis
 
Doctrine ORM Internals. UnitOfWork
Doctrine ORM Internals. UnitOfWorkDoctrine ORM Internals. UnitOfWork
Doctrine ORM Internals. UnitOfWorkIllia Antypenko
 
React Internals - How understanding React implementation can help us write be...
React Internals - How understanding React implementation can help us write be...React Internals - How understanding React implementation can help us write be...
React Internals - How understanding React implementation can help us write be...Ankit Muchhala
 
Deep dive - Concourse CI/CD and Pipelines
Deep dive  - Concourse CI/CD and PipelinesDeep dive  - Concourse CI/CD and Pipelines
Deep dive - Concourse CI/CD and PipelinesSyed Imam
 
How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowPyData
 
.NET @ apache.org
 .NET @ apache.org .NET @ apache.org
.NET @ apache.orgTed Husted
 
Performance #6 threading
Performance #6  threadingPerformance #6  threading
Performance #6 threadingVitali Pekelis
 
Symfony Form Basics - OroMeetup #3 Cherkassy
Symfony Form Basics - OroMeetup #3 CherkassySymfony Form Basics - OroMeetup #3 Cherkassy
Symfony Form Basics - OroMeetup #3 CherkassyAndrew Yatsenko
 
Building data flows with Celery and SQLAlchemy
Building data flows with Celery and SQLAlchemyBuilding data flows with Celery and SQLAlchemy
Building data flows with Celery and SQLAlchemyRoger Barnes
 
How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowLaura Lorenz
 
ReactJS Component Lifecycle hooks with examples
ReactJS Component Lifecycle hooks with examples ReactJS Component Lifecycle hooks with examples
ReactJS Component Lifecycle hooks with examples Ravi Mone
 
Customise Odoo addons modules
Customise Odoo addons modulesCustomise Odoo addons modules
Customise Odoo addons modulesGLC Networks
 
Background Processing With Work Manager
Background Processing With Work ManagerBackground Processing With Work Manager
Background Processing With Work ManagerSeven Peaks Speaks
 

Similar to Doctrine Internals. UnitOfWork (20)

Adding a modern twist to legacy web applications
Adding a modern twist to legacy web applicationsAdding a modern twist to legacy web applications
Adding a modern twist to legacy web applications
 
Loaders (and why we should use them)
Loaders (and why we should use them)Loaders (and why we should use them)
Loaders (and why we should use them)
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Automation Abstraction Layers: Page Objects and Beyond
Automation Abstraction Layers: Page Objects and BeyondAutomation Abstraction Layers: Page Objects and Beyond
Automation Abstraction Layers: Page Objects and Beyond
 
Tool Development 07 - Undo & Redo, Drag & Drop
Tool Development 07 - Undo & Redo, Drag & DropTool Development 07 - Undo & Redo, Drag & Drop
Tool Development 07 - Undo & Redo, Drag & Drop
 
MobileCity:Core Data
MobileCity:Core DataMobileCity:Core Data
MobileCity:Core Data
 
Doctrine ORM Internals. UnitOfWork
Doctrine ORM Internals. UnitOfWorkDoctrine ORM Internals. UnitOfWork
Doctrine ORM Internals. UnitOfWork
 
React Internals - How understanding React implementation can help us write be...
React Internals - How understanding React implementation can help us write be...React Internals - How understanding React implementation can help us write be...
React Internals - How understanding React implementation can help us write be...
 
React workshop
React workshopReact workshop
React workshop
 
Deep dive - Concourse CI/CD and Pipelines
Deep dive  - Concourse CI/CD and PipelinesDeep dive  - Concourse CI/CD and Pipelines
Deep dive - Concourse CI/CD and Pipelines
 
How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with Airflow
 
.NET @ apache.org
 .NET @ apache.org .NET @ apache.org
.NET @ apache.org
 
Performance #6 threading
Performance #6  threadingPerformance #6  threading
Performance #6 threading
 
Symfony Form Basics - OroMeetup #3 Cherkassy
Symfony Form Basics - OroMeetup #3 CherkassySymfony Form Basics - OroMeetup #3 Cherkassy
Symfony Form Basics - OroMeetup #3 Cherkassy
 
Building data flows with Celery and SQLAlchemy
Building data flows with Celery and SQLAlchemyBuilding data flows with Celery and SQLAlchemy
Building data flows with Celery and SQLAlchemy
 
How I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with AirflowHow I learned to time travel, or, data pipelining and scheduling with Airflow
How I learned to time travel, or, data pipelining and scheduling with Airflow
 
ReactJS Component Lifecycle hooks with examples
ReactJS Component Lifecycle hooks with examples ReactJS Component Lifecycle hooks with examples
ReactJS Component Lifecycle hooks with examples
 
UPC Testing talk 2
UPC Testing talk 2UPC Testing talk 2
UPC Testing talk 2
 
Customise Odoo addons modules
Customise Odoo addons modulesCustomise Odoo addons modules
Customise Odoo addons modules
 
Background Processing With Work Manager
Background Processing With Work ManagerBackground Processing With Work Manager
Background Processing With Work Manager
 

More from Andrew Yatsenko

Code Quality Control in a PHP project. GeekTalks, Cherkassy 2020
Code Quality Control in a PHP project. GeekTalks, Cherkassy 2020Code Quality Control in a PHP project. GeekTalks, Cherkassy 2020
Code Quality Control in a PHP project. GeekTalks, Cherkassy 2020Andrew Yatsenko
 
OroCommerce Storefront Design. Non-standard Layout Customisation.
OroCommerce Storefront Design. Non-standard Layout Customisation.OroCommerce Storefront Design. Non-standard Layout Customisation.
OroCommerce Storefront Design. Non-standard Layout Customisation.Andrew Yatsenko
 
Gear Up for OroPlatform 4.1 LTS. Dependency Injection Improvements Overview ...
Gear Up for OroPlatform 4.1 LTS.  Dependency Injection Improvements Overview ...Gear Up for OroPlatform 4.1 LTS.  Dependency Injection Improvements Overview ...
Gear Up for OroPlatform 4.1 LTS. Dependency Injection Improvements Overview ...Andrew Yatsenko
 
Effectively Reuse the Code Between PHP Projects
Effectively Reuse the Code Between PHP ProjectsEffectively Reuse the Code Between PHP Projects
Effectively Reuse the Code Between PHP ProjectsAndrew Yatsenko
 
Performance profiling and testing of symfony application 2
Performance profiling and testing of symfony application 2Performance profiling and testing of symfony application 2
Performance profiling and testing of symfony application 2Andrew Yatsenko
 
Data cache management in php
Data cache management in phpData cache management in php
Data cache management in phpAndrew Yatsenko
 
Writing extensible applications
Writing extensible applicationsWriting extensible applications
Writing extensible applicationsAndrew Yatsenko
 

More from Andrew Yatsenko (9)

Code Quality Control in a PHP project. GeekTalks, Cherkassy 2020
Code Quality Control in a PHP project. GeekTalks, Cherkassy 2020Code Quality Control in a PHP project. GeekTalks, Cherkassy 2020
Code Quality Control in a PHP project. GeekTalks, Cherkassy 2020
 
OroCommerce Storefront Design. Non-standard Layout Customisation.
OroCommerce Storefront Design. Non-standard Layout Customisation.OroCommerce Storefront Design. Non-standard Layout Customisation.
OroCommerce Storefront Design. Non-standard Layout Customisation.
 
Gear Up for OroPlatform 4.1 LTS. Dependency Injection Improvements Overview ...
Gear Up for OroPlatform 4.1 LTS.  Dependency Injection Improvements Overview ...Gear Up for OroPlatform 4.1 LTS.  Dependency Injection Improvements Overview ...
Gear Up for OroPlatform 4.1 LTS. Dependency Injection Improvements Overview ...
 
Make the most of twig
Make the most of twigMake the most of twig
Make the most of twig
 
Effectively Reuse the Code Between PHP Projects
Effectively Reuse the Code Between PHP ProjectsEffectively Reuse the Code Between PHP Projects
Effectively Reuse the Code Between PHP Projects
 
Performance profiling and testing of symfony application 2
Performance profiling and testing of symfony application 2Performance profiling and testing of symfony application 2
Performance profiling and testing of symfony application 2
 
Using Oro layouts
Using Oro layoutsUsing Oro layouts
Using Oro layouts
 
Data cache management in php
Data cache management in phpData cache management in php
Data cache management in php
 
Writing extensible applications
Writing extensible applicationsWriting extensible applications
Writing extensible applications
 

Recently uploaded

FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756dollysharma2066
 
Online banking management system project.pdf
Online banking management system project.pdfOnline banking management system project.pdf
Online banking management system project.pdfKamal Acharya
 
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Bookingroncy bisnoi
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapRishantSharmaFr
 
data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfJiananWang21
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Christo Ananth
 
Intze Overhead Water Tank Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank  Design by Working Stress - IS Method.pdfIntze Overhead Water Tank  Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank Design by Working Stress - IS Method.pdfSuman Jyoti
 
Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . pptDineshKumar4165
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTbhaskargani46
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)simmis5
 
PVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELL
PVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELLPVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELL
PVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELLManishPatel169454
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXssuser89054b
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptMsecMca
 
Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Christo Ananth
 
Unit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfUnit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfRagavanV2
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...SUHANI PANDEY
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...ranjana rawat
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringmulugeta48
 

Recently uploaded (20)

FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
FULL ENJOY Call Girls In Mahipalpur Delhi Contact Us 8377877756
 
Online banking management system project.pdf
Online banking management system project.pdfOnline banking management system project.pdf
Online banking management system project.pdf
 
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance BookingCall Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
Call Girls Wakad Call Me 7737669865 Budget Friendly No Advance Booking
 
Unleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leapUnleashing the Power of the SORA AI lastest leap
Unleashing the Power of the SORA AI lastest leap
 
data_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdfdata_management_and _data_science_cheat_sheet.pdf
data_management_and _data_science_cheat_sheet.pdf
 
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
Call for Papers - Educational Administration: Theory and Practice, E-ISSN: 21...
 
Intze Overhead Water Tank Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank  Design by Working Stress - IS Method.pdfIntze Overhead Water Tank  Design by Working Stress - IS Method.pdf
Intze Overhead Water Tank Design by Working Stress - IS Method.pdf
 
Thermal Engineering Unit - I & II . ppt
Thermal Engineering  Unit - I & II . pptThermal Engineering  Unit - I & II . ppt
Thermal Engineering Unit - I & II . ppt
 
Generative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPTGenerative AI or GenAI technology based PPT
Generative AI or GenAI technology based PPT
 
Roadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and RoutesRoadmap to Membership of RICS - Pathways and Routes
Roadmap to Membership of RICS - Pathways and Routes
 
Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)Java Programming :Event Handling(Types of Events)
Java Programming :Event Handling(Types of Events)
 
PVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELL
PVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELLPVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELL
PVC VS. FIBERGLASS (FRP) GRAVITY SEWER - UNI BELL
 
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
 
notes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.pptnotes on Evolution Of Analytic Scalability.ppt
notes on Evolution Of Analytic Scalability.ppt
 
Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...Call for Papers - International Journal of Intelligent Systems and Applicatio...
Call for Papers - International Journal of Intelligent Systems and Applicatio...
 
Unit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdfUnit 1 - Soil Classification and Compaction.pdf
Unit 1 - Soil Classification and Compaction.pdf
 
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Ankleshwar 7001035870 Whatsapp Number, 24/07 Booking
 
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
VIP Model Call Girls Kothrud ( Pune ) Call ON 8005736733 Starting From 5K to ...
 
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
The Most Attractive Pune Call Girls Manchar 8250192130 Will You Miss This Cha...
 
chapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineeringchapter 5.pptx: drainage and irrigation engineering
chapter 5.pptx: drainage and irrigation engineering
 

Doctrine Internals. UnitOfWork

  • 1. Presentation title here Doctrine internals UnitOfWork
  • 2. Presentation title here About me https://www.facebook.com/yatsenco https://github.com/anyt about me… Andrey Yatsenco ● PHP Developer at Oro Inc. ● 3 years with Symfony ● 6 years with PHP
  • 3. Presentation title here Doctrine Internals. UnitOfWork Introduction ● Doctrine is the bottleneck for many apps ● You know how UnitOfWork is working, you know how doctrine works
  • 4. Presentation title here Doctrine Internals. UnitOfWork UnitOfWork track objects changes and commit them transactionally to the Database. Now you don’t manage object loading from the DataBase. UOW do.
  • 5. Presentation title here Doctrine Internals. UnitOfWork UOW use IdentityMap to track objects changes and to avoid server round trip It simple two level array storage ● First level keys are ClassNames ● Second level keys are object IDs.
  • 6. Presentation title here Doctrine Internals. UnitOfWork Doctrine EntityManager is like all-in-one decorator on ● Repository ● UnitOfWork ● MetadataFactory ● ProxyFactory ● etc.
  • 7. Presentation title here Doctrine Internals. UnitOfWork EntityManager -> EntityRepository ● find ● findOneBy ● findAll ● customFindQueryWithHidration ● etc.
  • 8. Presentation title here Doctrine Internals. UnitOfWork EntityManager->UnitOfWork ● persist ● refresh ● remove ● flush ● etc.
  • 9. Presentation title here Doctrine Internals. UnitOfWork EntityManager->UnitOfWork ● persist ● refresh ● remove ● commit ● etc.
  • 10. Presentation title here Doctrine Internals. UnitOfWork Doctrine flow ● 1) Fetch entities from the database or create new and persist ‘em (Repo|UOW) ● 2) Update some of entities directly or using wrapper like Form (uses PropertyAccess) ● Remove some, if needed (Forms etc.) ● 3) EM->flush() changes (UOW)
  • 11. Presentation title here Doctrine Internals. UnitOfWork 1) Fetching entities from the DB ● One entity: ○ find ○ findOneBy ● Several entities: ○ Lazy/Eager loading ○ Find partial
  • 12. Presentation title here Doctrine Internals. UnitOfWork 1) Persist ● Can be omitted if you fetched entities from doctrine ● Required only for newly created entities
  • 13. Presentation title here Doctrine Internals. UnitOfWork 2) Update Object changes outside Doctrine. ● Direct changes ● Forms (PropertyAccessor) ● etc.
  • 14. Presentation title here Doctrine Internals. UnitOfWork 3) Flush Sync changes with the Database
  • 15. Presentation title here Doctrine Internals. UnitOfWork 3) Flush Flow ● Open DB transaction ● Complute change-sets for update ● Iterate over scheduled inserts, updates, deletes ● Delegate to entity persister SQL generation and execution ● Clear UOW on success ● Close DB transaction
  • 16. Presentation title here Doctrine Internals. UnitOfWork UnitOfWork through Doctrine Events ● fetch ● persist ● remove ● flush
  • 17. Presentation title here Doctrine Internals. UnitOfWork Fetch Repo-> find|refresh|getReference|etc. ● (optional) sync data with DB ● Events::loadClassMetadata ○ If ! Events:onClassMetadataNotFound ● hydrate ● Events:postLoad
  • 18. Presentation title here Doctrine Internals. UnitOfWork Persist ● Events:prePersist ● Entity ID isn’t exist at this time in most cases ● UOW->scheduleForInsert($entity)
  • 19. Presentation title here Doctrine Internals. UnitOfWork Remove ● Events::preRemove ● UOW->scheduleForDelete($entity)
  • 20. Presentation title here Doctrine Internals. UnitOfWork Flush ● UOW->commit(null|object|array $entity)
  • 21. Presentation title here Doctrine Internals. UnitOfWork Flush (1) ● Events::preFlush ○ $em->flush() can be called safely ● compute insert|update|delete changesets ● If !changes ○ Events::onFlush ○ Events::postFlush ○ return
  • 22. Presentation title here Doctrine Internals. UnitOfWork Flush (2) ● Events::onFlush ○ UOW->getScheduledEntityInsertions() ○ UOW->getScheduledEntityUpdates() ○ UOW->getScheduledEntityDeletions() ○ $em->persist() && UOW- >computeChangeSet() ● connection->beginTransaction
  • 23. Presentation title here Doctrine Internals. UnitOfWork Flush (3) ● Inserts ○ Persister->insert($entity) ○ Events::postPersist ■ entity can’t be updated directly anymore ■ UOW->scheduleExtraUpdate($entity, array $changeset)
  • 24. Presentation title here Doctrine Internals. UnitOfWork Flush (4) ● Updates ○ Events::preUpdate ■ Entity can’t be updated directly, update changeset using PreUpdateEventArgs ■ Relations changes not tracked too ○ UOW->recomputeSingleEntityChangeSet($class, $entity) ○ Persister->update($entity) ○ Events::postUpdate ■ Entity can’t be updated directly anymore ■ UOW->scheduleExtraUpdate($entity, array $changeset) ● UOW->executeExtraUpdates()
  • 25. Presentation title here Doctrine Internals. UnitOfWork Flush (5) ● Deletions ○ Persister->delete($entity) ○ Events::postRemove ■ nothing to update here
  • 26. Presentation title here Doctrine Internals. UnitOfWork Flush (6) ● connection->commit() ● Events::postFlush ○ Never call $em->flush() here ● UOW->clear(); ○ Events::onClear ● in case of errors ○ connection->rollback() That’s it.
  • 27. Presentation title here Doctrine Internals. UnitOfWork Let’s talk a little bit about performance and how to speed-up doctrine
  • 28. Presentation title here Doctrine Internals. UnitOfWork How to speed-up doctrine ● Cache ○ Metadata ○ Query ○ result
  • 29. Presentation title here Doctrine Internals. UnitOfWork How to speed-up doctrine ● Control lazy-loading ○ Never eager load ○ Write select queries with joins to needed
  • 30. Presentation title here Doctrine Internals. UnitOfWork How to speed-up doctrine ● Fetch less ○ getReference ○ {partial}
  • 31. Presentation title here Doctrine Internals. UnitOfWork How to speed-up doctrine ● Hydrate less ○ arrays instead of objects when you don’t need them or performance is important
  • 32. Presentation title here Doctrine Internals. UnitOfWork How to speed-up doctrine ● Make flush cheaper ○ Mark entities as readOnly ○ Chang tracking policy to DEFERRED_EXPLICIT or NOTIFY ○ Provide flush arguments (applies objects and arrays)
  • 33. Presentation title here Doctrine Internals. UnitOfWork How to speed-up doctrine ● Optimize queries
  • 34. Presentation title here Doctrine Internals. UnitOfWork Links: docs ● http://www.doctrine-project.org/api/orm/2.0/class-Doctrine.ORM.UnitOfWork.html ● http://doctrine-orm.readthedocs.io/projects/doctrine-orm/ Patterns ● http://martinfowler.com/eaaCatalog/unitOfWork.html ● http://martinfowler.com/eaaCatalog/identityMap.html Sergey Zhuravel presentation about Doctrine Events ● http://www.slideshare.net/sergeyz/oro-meetups-doctrine-events?qid=7d9177e9-c41c-4642- bdba-e1fa3060bb17&v=&b=&from_search=1