SlideShare uma empresa Scribd logo
1 de 73
Baixar para ler offline
UNDERSTANDING GORM
Alonso Torres @alotor
http://goo.gl/U6sK5E
Ego-slide
Alonso Torres
alotor @alotor
Engineer atKaleidos
GORM? Really?
Is so easy, the easiestpartof Grails!
Onlyafew POGO's to access the database
Peachy!
Some pitfalls
The 'When did I modified thatobject?'
defrenderBook(Stringisbn){
defbook=Book.findByIsbn(isbn)
//Renderasuppercase
book.title=book.title.toUpperCase()
[book:book]
}
Some pitfalls
The 'Rollback where are you?'
defbuyBook(Stringuser,StringbookTitle,Longqty){
deffound=Book.findByTitle(bookTitle)
//Saveaneworderfortheuser
deforder=newBookOrder(user:user,book:found,quantity:qty)
order.save()
found.stock=found.stock-1
//Whennotfoundthrowexceptiontorollback
if(found.stock<0){
thrownewException("Thisshouldrollback!")
}
returnfound
}
Some pitfalls
The 'Parallelprocessing, It's easy!!'
defprocessOrders(){
deforders=BookOrder.list()
//Parallelupdateorders
GParsPool.withPool(10){
orders.eachParallel{order->
dispatchingService.dispatch(order)
order.sent=true
order.save()
}
}
}
Some pitfalls
The 'Failwhale'
classUser{
Stringname
statichasMany=[followers:User]
}
user.followers.isEmpty()
CheckBurttalkabout"GORMPerformance"
GORM is dark and full of
terrors
Let's take a step back...
and start at the beginning
Understanding Bootstrapping
WHAT'S GOING ON BEHIND THE SCENES?
Your first Domain class
classBook{
Stringname
Stringisbn
Authorauthor
}
Grails Bootstrap
Inspect/grails-app
Classes inside /domain
Annotates them with @grails.persistence.Entity
grailsrun-app
1) Domain classes are found
DEBUGcommons.DefaultGrailsApplication
Inspecting[es.greach.gorm.Book]
[es.greach.gorm.Book]isnotaFiltersclass.
[es.greach.gorm.Book]isnotaCodecclass.
[es.greach.gorm.Book]isnotaTagLibclass.
[es.greach.gorm.Book]isnotaServiceclass.
[es.greach.gorm.Book]isnotaControllerclass.
[es.greach.gorm.Book]isnotaBootstrapclass.
[es.greach.gorm.Book]isaDomainclass.
Addingartefactclasses.greach.gorm.BookofkindDomain
Grails initializes the Domain Class
Prepares the relationship properties
Resolves class hierarchy
Add validation capabilities
Integrates domain classes with Spring
@grails.persistence.Entity
Includes 'id'and 'version'
Marks the classes as domain entities
You can putdomain classes inside /src/main/groovy
Manualyannotate them with @Entity
@Entity
classBook{
Longid
Longversion
Stringname
Stringisbn
Authorauthor
}
2) GORM enhances classes
classBook{
staticmapWith="mongo"
Stringname
Stringisbn
}
DEBUGcfg.HibernateUtils -EnhancingGORMentityBook
GORM Enhancer
Instances API (save, delete...)
Classes API (findAll, where, withCriteria...)
Dynamic Finders
Validation (unique)
GORM Enhancer
Instances API (save, delete...)
Classes API (findAll, where, withCriteria...)
Dynamic Finders
Validation (unique)
Bootstraping
DistinctGrails-base vs GORM
@Entitycould potentialybe used outside Grails
Problems with AST's
Grails dependencies
Understanding Spring
HOW INTERACT DOMAIN CLASSES AND SPRING
classBook{
defbookService
Stringname
Stringisbn
Authorauthor
StringtoString(){
returnbookService.parseBook(this)
}
}
defmyBook=newBook()
printlnmyBook.toString()
[DEBUG]BookService::parseBook
DI needs control on object instantiation
Spring should create the object
newBook()
So Grails kind of "cheats"
Spring Beans for a Domain Class
BookValidator
BookPersistentClass
BookDomainClass
Book
newBook()
Book.constructor={->
defctx=....//Springcontext
context.getBean("Book")
}
What does that means?
Springcreates your objects
Be carefulwhen usingsome capabilities
Example: SpringAOP
Understanding Hibernate GORM
WHERE THE DARKNESS LURKS
GORM > Hibernate
GORM provides abeautifulabstraction over hibernate
Convention over configuration
No more complicated XML or annotations
Better collections
But, Hibernate it's still there
classBook{
Stringname
Stringisbn
Authorauthor
}
grailsgenerate-controllerBook
//Grails2.2scafolding
classBookController{
defsave(){
definstance=newBook(params)
if(!instance.save(flush:true)){
render(view:"create",model:[bookInstance:instance])
return
}
redirect(action:"show",id:instance.id)
}
}
//Grails2.2scafolding
classBookController{
defsave(){
defbookInstance=newBook(params)
if(!bookInstance.save(flush:true)){
render(view:"create",model:[bookInstance:bookInstance])
return
}
redirect(action:"show",id:bookInstance.id)
}
}
OpenSessionInViewInterceptor
Creates anew Sessionwithin aController scope
Doesn'tcreate aTransaction
So... there is NO transaction atthe controller
After render the session is flushed
Session? Transaction? I'm confused
Session
Entrypointto the Hibernate Framework
In-Memorycache
No thread safe and normalythread-bound
GORM Entities
Entities have arelationship with the session
This defines a"life-cycle"
Transient -notyetpersisted
Persistent -has asession
Detached -persisted butwithoutsession
Session Flush
Session checks "DIRTY OBJECTS"
When flushed the changes are persisted to database
After flush, are my objects in the DB?
DEPENDS
Transaction
Database managed
Provider specific
Accessed through JDBC Driver
PeterLedbrok- http://spring.io/blog/2010/06/23/gorm-gotchas-part-1/
Hibernate Session
FLUSHING
vs
COMMIT
Database Transaction
Automatic session flushing
Queryexecuted
Acontroller completes
Before transaction commit
Some pitfalls
The 'When did I modified thatobject?'
defrenderBook(Stringisbn){
defbook=Book.findByIsbn(isbn)
//Renderasuppercase
book.title=book.title.toUpperCase()
[book:book]
}
Some pitfalls
The 'When did I modified thatobject?'
defrenderBook(Stringisbn){
defbook=Book.findByIsbn(isbn)
//Deattachtheobjectfromthesession
book.discard()
//Renderasuppercase
book.title=book.title.toUpperCase()
[book:book]
}
Where do I put my transactional logic?
withTransaction
Book.withTransaction{
//Transactionalstuff
}
Transactional services
@Transactional
classBookService{
defdoTransactionalStuff(){
...
}
}
Be careful!
Don'tinstanciate the services
Don'tuse closures
And...
newTransactionalService().doTransactionalStuff()
deftransactionalMethod={...}
DON'T THROW CHECKED EXCEPTIONS
Some pitfalls
The 'Rollback where are you?'
defbuyBook(Stringuser,StringbookTitle,Longqty){
deffound=Book.findByTitle(bookTitle)
//Saveaneworderfortheuser
deforder=newBookOrder(user:user,book:found,quantity:qty)
order.save()
found.stock=found.stock-1
//Whennotfoundthrowexceptiontorollback
if(found.stock<0){
thrownewException("Thisshouldrollback!")
}
returnfound
}
Some pitfalls
The 'Rollback where are you?'
defbuyBook(Stringuser,StringbookTitle,Longqty){
deffound=Book.findByTitle(bookTitle)
//Saveaneworderfortheuser
deforder=newBookOrder(user:user,book:found,quantity:qty)
order.save()
found.stock=found.stock-1
//Whennotfoundthrowexceptiontorollback
if(found.stock<0){
thrownewRuntimeException("Thisshouldrollback!")
}
returnfound
}
@Transactional vs @Transactional
Spring@Transactionalcreates aPROXY
Grails new @Transactionalis an AST
Understanding Parallel GORM
BRACE YOURSELVES
Session is Thread-Local
Some pitfalls
The 'Concurrency, It's easy!!'
defprocessOrders(){
deforders=BookOrder.list()
//Parallelupdateorders
GParsPool.withPool(10){
orders.eachParallel{order->
dispatchingService.dispatch(order)
order.sent=true
order.save()
}
}
}
Thread-local session
Recovers alistof orders
Each item is bound to the requestsession
When we spawn the concurrentthreads the objects don't
know where is their session
deforders=Orders.findTodayOrders()
Some pitfalls
The 'Concurrency, It's easy!!'
defprocessOrders(){
deforders=BookOrder.list()
//Parallelupdateorders
GParsPool.withPool(10){
orders.eachParallel{order->
BookOrder.withNewSession{
order.merge()
dispatchingService.dispatch(order)
order.sent=true
order.save()
}
}
}
}
Rule of thumb
Session = Thread
If entityhas recovered byanother thread
Putitin the currentthread session
Grails 2.3 Async GORM
The new async GORM solves some problems
Manages the session for the promise
defpromise=Person.async.findByFirstName("Homer")
defperson=promise.get()
Grails 2.3 Async GORM
Problem: Objecthas been retrieved byanother thread
After the promise is resolved we have to attach the object
defpromise=Person.async.findByFirstName("Homer")
defperson=promise.get()
person.merge()//Reboundtheobjecttothesession
person.firstName="Bart"
Closing thoughts
GORM is averycoolabstraction
You have to be aware of some of how things work
With greatpower, comes greatresponsibility
THANKS
@alotor
http://goo.gl/U6sK5E
Bonus track (references)
http://spring.io/blog/2010/06/23/gorm-gotchas-part-1/
http://sacharya.com/tag/gorm-transaction/
http://www.anyware.co.uk/2005/2012/11/12/the-false-
optimism-of-gorm-and-hibernate/
http://docs.jboss.org/hibernate/orm/3.6/reference/en-
US/html_single/#transactions-basics
Bonus track (references)
http://www.infoq.com/presentations/GORM-Performance
http://www.infoq.com/presentations/grails-transaction
http://blog.octo.com/en/transactions-in-grails/
https://community.jboss.org/wiki/OpenSessioninView

Mais conteúdo relacionado

Mais procurados

Scripting as a Second Language
Scripting as a Second LanguageScripting as a Second Language
Scripting as a Second LanguageRob Dunn
 
High Performance Social Plugins
High Performance Social PluginsHigh Performance Social Plugins
High Performance Social PluginsStoyan Stefanov
 
Building a real life application in node js
Building a real life application in node jsBuilding a real life application in node js
Building a real life application in node jsfakedarren
 
jQuery in the [Aol.] Enterprise
jQuery in the [Aol.] EnterprisejQuery in the [Aol.] Enterprise
jQuery in the [Aol.] EnterpriseDave Artz
 
Spock Framework (Java Day BY 2015)
Spock Framework (Java Day BY 2015)Spock Framework (Java Day BY 2015)
Spock Framework (Java Day BY 2015)katoquro
 
JavaScript Performance Patterns
JavaScript Performance PatternsJavaScript Performance Patterns
JavaScript Performance PatternsStoyan Stefanov
 
OOCSS for JavaScript Pirates jQcon Boston
OOCSS for JavaScript Pirates jQcon BostonOOCSS for JavaScript Pirates jQcon Boston
OOCSS for JavaScript Pirates jQcon BostonJohn Hann
 
Progressive Downloads and Rendering - take #2
Progressive Downloads and Rendering - take #2Progressive Downloads and Rendering - take #2
Progressive Downloads and Rendering - take #2Stoyan Stefanov
 
Server Side JavaScript - You ain't seen nothing yet
Server Side JavaScript - You ain't seen nothing yetServer Side JavaScript - You ain't seen nothing yet
Server Side JavaScript - You ain't seen nothing yetTom Croucher
 
jQuery: Nuts, Bolts and Bling
jQuery: Nuts, Bolts and BlingjQuery: Nuts, Bolts and Bling
jQuery: Nuts, Bolts and BlingDoug Neiner
 
AMD - Why, What and How
AMD - Why, What and HowAMD - Why, What and How
AMD - Why, What and HowMike Wilcox
 
Unobtrusive javascript with jQuery
Unobtrusive javascript with jQueryUnobtrusive javascript with jQuery
Unobtrusive javascript with jQueryAngel Ruiz
 
React.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIsReact.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIsAdam Solove
 
JavaScript!
JavaScript!JavaScript!
JavaScript!RTigger
 
the 5 layers of web accessibility - Open Web Camp II
the 5 layers of web accessibility - Open Web Camp IIthe 5 layers of web accessibility - Open Web Camp II
the 5 layers of web accessibility - Open Web Camp IIDirk Ginader
 
jQuery Features to Avoid
jQuery Features to AvoidjQuery Features to Avoid
jQuery Features to Avoiddmethvin
 
Write Less Do More
Write Less Do MoreWrite Less Do More
Write Less Do MoreRemy Sharp
 

Mais procurados (20)

Scripting as a Second Language
Scripting as a Second LanguageScripting as a Second Language
Scripting as a Second Language
 
High Performance Social Plugins
High Performance Social PluginsHigh Performance Social Plugins
High Performance Social Plugins
 
Building a real life application in node js
Building a real life application in node jsBuilding a real life application in node js
Building a real life application in node js
 
jQuery in the [Aol.] Enterprise
jQuery in the [Aol.] EnterprisejQuery in the [Aol.] Enterprise
jQuery in the [Aol.] Enterprise
 
Spock Framework (Java Day BY 2015)
Spock Framework (Java Day BY 2015)Spock Framework (Java Day BY 2015)
Spock Framework (Java Day BY 2015)
 
JavaScript Performance Patterns
JavaScript Performance PatternsJavaScript Performance Patterns
JavaScript Performance Patterns
 
OOCSS for JavaScript Pirates jQcon Boston
OOCSS for JavaScript Pirates jQcon BostonOOCSS for JavaScript Pirates jQcon Boston
OOCSS for JavaScript Pirates jQcon Boston
 
Progressive Downloads and Rendering - take #2
Progressive Downloads and Rendering - take #2Progressive Downloads and Rendering - take #2
Progressive Downloads and Rendering - take #2
 
Server Side JavaScript - You ain't seen nothing yet
Server Side JavaScript - You ain't seen nothing yetServer Side JavaScript - You ain't seen nothing yet
Server Side JavaScript - You ain't seen nothing yet
 
jQuery Introduction
jQuery IntroductionjQuery Introduction
jQuery Introduction
 
Intro to Sail.js
Intro to Sail.jsIntro to Sail.js
Intro to Sail.js
 
jQuery: Nuts, Bolts and Bling
jQuery: Nuts, Bolts and BlingjQuery: Nuts, Bolts and Bling
jQuery: Nuts, Bolts and Bling
 
End-to-end testing with geb
End-to-end testing with gebEnd-to-end testing with geb
End-to-end testing with geb
 
AMD - Why, What and How
AMD - Why, What and HowAMD - Why, What and How
AMD - Why, What and How
 
Unobtrusive javascript with jQuery
Unobtrusive javascript with jQueryUnobtrusive javascript with jQuery
Unobtrusive javascript with jQuery
 
React.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIsReact.js & Om: A hands-on walkthrough of better ways to build web UIs
React.js & Om: A hands-on walkthrough of better ways to build web UIs
 
JavaScript!
JavaScript!JavaScript!
JavaScript!
 
the 5 layers of web accessibility - Open Web Camp II
the 5 layers of web accessibility - Open Web Camp IIthe 5 layers of web accessibility - Open Web Camp II
the 5 layers of web accessibility - Open Web Camp II
 
jQuery Features to Avoid
jQuery Features to AvoidjQuery Features to Avoid
jQuery Features to Avoid
 
Write Less Do More
Write Less Do MoreWrite Less Do More
Write Less Do More
 

Destaque

Webinar: MongoDB 2.4 Feature Demo and Q&A on Geo Capabilities
Webinar: MongoDB 2.4 Feature Demo and Q&A on Geo CapabilitiesWebinar: MongoDB 2.4 Feature Demo and Q&A on Geo Capabilities
Webinar: MongoDB 2.4 Feature Demo and Q&A on Geo CapabilitiesMongoDB
 
(Codemotion 2014) 20 lenguajes en 40 minutos
(Codemotion 2014) 20 lenguajes en 40 minutos(Codemotion 2014) 20 lenguajes en 40 minutos
(Codemotion 2014) 20 lenguajes en 40 minutosAlonso Torres
 
(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your GroovyAlonso Torres
 
[Greach 2016] Down The RabbitMQ Hole
[Greach 2016] Down The RabbitMQ Hole[Greach 2016] Down The RabbitMQ Hole
[Greach 2016] Down The RabbitMQ HoleAlonso Torres
 
(Codemotion 2014) JVM GC: WTF?!
(Codemotion 2014) JVM GC: WTF?!(Codemotion 2014) JVM GC: WTF?!
(Codemotion 2014) JVM GC: WTF?!Alonso Torres
 
(Greach 2015) Decathlon Sport Meeting
(Greach 2015) Decathlon Sport Meeting(Greach 2015) Decathlon Sport Meeting
(Greach 2015) Decathlon Sport MeetingAlonso Torres
 
[Jbcn 2016] Garbage Collectors WTF!?
[Jbcn 2016] Garbage Collectors WTF!?[Jbcn 2016] Garbage Collectors WTF!?
[Jbcn 2016] Garbage Collectors WTF!?Alonso Torres
 
[Greach 17] make concurrency groovy again
[Greach 17] make concurrency groovy again[Greach 17] make concurrency groovy again
[Greach 17] make concurrency groovy againAlonso Torres
 

Destaque (8)

Webinar: MongoDB 2.4 Feature Demo and Q&A on Geo Capabilities
Webinar: MongoDB 2.4 Feature Demo and Q&A on Geo CapabilitiesWebinar: MongoDB 2.4 Feature Demo and Q&A on Geo Capabilities
Webinar: MongoDB 2.4 Feature Demo and Q&A on Geo Capabilities
 
(Codemotion 2014) 20 lenguajes en 40 minutos
(Codemotion 2014) 20 lenguajes en 40 minutos(Codemotion 2014) 20 lenguajes en 40 minutos
(Codemotion 2014) 20 lenguajes en 40 minutos
 
(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy(Greach 2015) Dsl'ing your Groovy
(Greach 2015) Dsl'ing your Groovy
 
[Greach 2016] Down The RabbitMQ Hole
[Greach 2016] Down The RabbitMQ Hole[Greach 2016] Down The RabbitMQ Hole
[Greach 2016] Down The RabbitMQ Hole
 
(Codemotion 2014) JVM GC: WTF?!
(Codemotion 2014) JVM GC: WTF?!(Codemotion 2014) JVM GC: WTF?!
(Codemotion 2014) JVM GC: WTF?!
 
(Greach 2015) Decathlon Sport Meeting
(Greach 2015) Decathlon Sport Meeting(Greach 2015) Decathlon Sport Meeting
(Greach 2015) Decathlon Sport Meeting
 
[Jbcn 2016] Garbage Collectors WTF!?
[Jbcn 2016] Garbage Collectors WTF!?[Jbcn 2016] Garbage Collectors WTF!?
[Jbcn 2016] Garbage Collectors WTF!?
 
[Greach 17] make concurrency groovy again
[Greach 17] make concurrency groovy again[Greach 17] make concurrency groovy again
[Greach 17] make concurrency groovy again
 

Semelhante a Understanding GORM (Greach 2014)

Understanding Database Transactions and Hibernate Sessions in Grails
Understanding Database Transactions and Hibernate Sessions in GrailsUnderstanding Database Transactions and Hibernate Sessions in Grails
Understanding Database Transactions and Hibernate Sessions in GrailsJonas Witt
 
Plugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingPlugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingMayflower GmbH
 
Building DSLs with Groovy
Building DSLs with GroovyBuilding DSLs with Groovy
Building DSLs with GroovySten Anderson
 
Async queue-transaction
Async queue-transaction Async queue-transaction
Async queue-transaction Fei (James) Liu
 
Hibernate Tutorial
Hibernate TutorialHibernate Tutorial
Hibernate TutorialRam132
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
Intro to IndexedDB (Beta)
Intro to IndexedDB (Beta)Intro to IndexedDB (Beta)
Intro to IndexedDB (Beta)Mike West
 
Introduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10genIntroduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10genMongoDB
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}.toster
 
The Inclusive Web: hands-on with HTML5 and jQuery
The Inclusive Web: hands-on with HTML5 and jQueryThe Inclusive Web: hands-on with HTML5 and jQuery
The Inclusive Web: hands-on with HTML5 and jQuerycolinbdclark
 
NoSQL: Why, When, and How
NoSQL: Why, When, and HowNoSQL: Why, When, and How
NoSQL: Why, When, and HowBigBlueHat
 
Ember background basics
Ember background basicsEmber background basics
Ember background basicsPhilipp Fehre
 
JavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM ManipulationJavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM Manipulationborkweb
 
Sprout core and performance
Sprout core and performanceSprout core and performance
Sprout core and performanceYehuda Katz
 
MongoDB .local Toronto 2019: Using Change Streams to Keep Up with Your Data
MongoDB .local Toronto 2019: Using Change Streams to Keep Up with Your DataMongoDB .local Toronto 2019: Using Change Streams to Keep Up with Your Data
MongoDB .local Toronto 2019: Using Change Streams to Keep Up with Your DataMongoDB
 
Real World Caching with Ruby on Rails
Real World Caching with Ruby on RailsReal World Caching with Ruby on Rails
Real World Caching with Ruby on RailsDavid Roberts
 
Look Up Mobile Javascript
Look Up Mobile JavascriptLook Up Mobile Javascript
Look Up Mobile JavascriptDron Rathore
 
Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.Peter Higgins
 

Semelhante a Understanding GORM (Greach 2014) (20)

Understanding Database Transactions and Hibernate Sessions in Grails
Understanding Database Transactions and Hibernate Sessions in GrailsUnderstanding Database Transactions and Hibernate Sessions in Grails
Understanding Database Transactions and Hibernate Sessions in Grails
 
Plugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debuggingPlugging holes — javascript memory leak debugging
Plugging holes — javascript memory leak debugging
 
Building DSLs with Groovy
Building DSLs with GroovyBuilding DSLs with Groovy
Building DSLs with Groovy
 
Async queue-transaction
Async queue-transaction Async queue-transaction
Async queue-transaction
 
Hibernate Tutorial
Hibernate TutorialHibernate Tutorial
Hibernate Tutorial
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
Week3
Week3Week3
Week3
 
Intro to IndexedDB (Beta)
Intro to IndexedDB (Beta)Intro to IndexedDB (Beta)
Intro to IndexedDB (Beta)
 
Introduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10genIntroduction to the new official C# Driver developed by 10gen
Introduction to the new official C# Driver developed by 10gen
 
NodeJS
NodeJSNodeJS
NodeJS
 
Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}Matthew Eernisse, NodeJs, .toster {webdev}
Matthew Eernisse, NodeJs, .toster {webdev}
 
The Inclusive Web: hands-on with HTML5 and jQuery
The Inclusive Web: hands-on with HTML5 and jQueryThe Inclusive Web: hands-on with HTML5 and jQuery
The Inclusive Web: hands-on with HTML5 and jQuery
 
NoSQL: Why, When, and How
NoSQL: Why, When, and HowNoSQL: Why, When, and How
NoSQL: Why, When, and How
 
Ember background basics
Ember background basicsEmber background basics
Ember background basics
 
JavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM ManipulationJavaScript: Ajax & DOM Manipulation
JavaScript: Ajax & DOM Manipulation
 
Sprout core and performance
Sprout core and performanceSprout core and performance
Sprout core and performance
 
MongoDB .local Toronto 2019: Using Change Streams to Keep Up with Your Data
MongoDB .local Toronto 2019: Using Change Streams to Keep Up with Your DataMongoDB .local Toronto 2019: Using Change Streams to Keep Up with Your Data
MongoDB .local Toronto 2019: Using Change Streams to Keep Up with Your Data
 
Real World Caching with Ruby on Rails
Real World Caching with Ruby on RailsReal World Caching with Ruby on Rails
Real World Caching with Ruby on Rails
 
Look Up Mobile Javascript
Look Up Mobile JavascriptLook Up Mobile Javascript
Look Up Mobile Javascript
 
Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.Your Library Sucks, and why you should use it.
Your Library Sucks, and why you should use it.
 

Último

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comFatema Valibhai
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfonteinmasabamasaba
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdfPearlKirahMaeRagusta1
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfayushiqss
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfonteinmasabamasaba
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesVictorSzoltysek
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park masabamasaba
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxalwaysnagaraju26
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 

Último (20)

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
HR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.comHR Software Buyers Guide in 2024 - HRSoftware.com
HR Software Buyers Guide in 2024 - HRSoftware.com
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
ManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide DeckManageIQ - Sprint 236 Review - Slide Deck
ManageIQ - Sprint 236 Review - Slide Deck
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptxBUS PASS MANGEMENT SYSTEM USING PHP.pptx
BUS PASS MANGEMENT SYSTEM USING PHP.pptx
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 

Understanding GORM (Greach 2014)