SlideShare una empresa de Scribd logo
1 de 62
RubyKaigi2011




Underlaying Technology of
Modern O/R Mappter


makoto kuwata
http://www.kuwata-lab.com/
Table of Contents
 The Goal of Modern ORM
 Query Object
 View-layer Cacing
 Ruby-to-SQL Transformation
 How to Prevent SQL Injection
The Goal of Modern ORM
What is the Problem?
By the way...
Refactoring
Key Points
 Programming language can
  break large part into small pieces
  construct large part from small pieces
  add name to pieces in order to abstract
  them
Again, What is the Problem?
       	  	        	 
     	                    	    	 
     	    	             	 
     	 
      • SQL can't break large one into pieces
      • SQL can't be constructed from pieces
      • SQL can't name or abstract pieces
Does ORM Solve it?
    	                 	 
         	    	  	 



	 	                               	    	 
	 	                        	 
	 	 
                                Not abstracted
Abstract by Named Scope
History of Evolution
    OOP,
                Modern ORM
  Functional



  C, Pascal      DBI, ORM



  Assembler        SQL
Conclusion of this section
 SQL is just Assembler
  It can't be broken into pieces
  It can't be constructed from pieces
  It can't name or abstract pieces
 Modern ORM provides abstraction for
 SQL
  ex. named_scope
Query Object
Kwd arg vs. Method Chain
Query Object (1)
Query Object (2)
Method Call vs. Query Op
               Just a method call

	 	 	 	 	                   	      	    	 
	 	 	 	 	         	 


                  	    	      	 
	 	 	 	 	 	 
	 	 	 	 	 	 
                   Operation to Query object
Query Operation (1)
   	                    Just a method call
Query Operation (2)
   	                     Just a method call
Query Operation (3)
   	                    Just a method call
Query Operation (4)
   	                   Just a method call
Query == Collection
            Array
    	  	 
              	     	    	 

        ActiveRecord::Relation
Action to Collection
 	    	 
                       condition
                           	     	         	 

 	         	 
                  condition
SQL Abstraction (1)
SQL Abstraction (2)
OT: Partial Application
Conslution of this section
 Query object
  is the key concept for modern ORM
  behaves like a collection
  abstracts SQL
ORM and View-layer Cache
Example: Fragment Cache
Example: Controller
       	 
	 	         	  	 

            Submits SQL everytime
Move find() from C to V?
    	              	           	     	 

	 	      	                                 	     	    	 
	 	                  	    	 
	 	      	         	 
                                    MVC broken
Check Cache Existence?

                    C depends on V tightly
What is the Problem?
                    View

                                 Cache: Pull-style

MVC: Push-style
                       Context Data


                  Controller
Sol: Proc or Lambda (C)
      	 
	 	        	  	       	 
	 	 	 	 
	 	 
                   find(:all) is not called yet
Sol: Proc or Lambda (V)
   	        	            	    	 
	 	 
	 	  	                             	    	    	 
	 	 	 	          	       	 
	 	  	      	 
	 	                   Call find(:all) only when
     	   	            cache is expired
Sol: Proc or Lambda
 Pros.
  Easy to understand & implement
 Cons.
  Caching on V affects to C
  (C must be changed according to V)
Sol: Lazy Loading (C)
       	 
	 	      	    	 
	 	                 	  	 
	 	      	 
	 	                	  	 

                            SQL is not executed yet
Sol: Lazy Loading (V)
   	        	           	    	 
	 	 
	 	  	                  	    	    	 
	 	 	 	          	      	 
	 	  	      	 
	 	 
     	   	 
                      Nothing to be changed!
Sol: Lazy Loading
 Pros.
  Caching on V doesn't affect to C
 Cons.
  Availables only on modern ORM
  (not available on Rails2)
Conclusion of this section
 MVC and fragment cache are not good
 friends
  MVC: push-style
  Fragment cache: pull-style
 Laziness solves them
  Proc or lambda
  Lazy loading
N+1 Problem
What is N+1 Problem? (1)
       	 
	 	         	 


       	 
	 	              	 

                      Team : Member = 1 : N
What is N+1 Problem? (2)
                      	    	       	 

	    	    	    	    	           }1
	    	    	    	    	      	     	 
	 
	 
     	 
     	 
          	 
          	 
               	 
               	 
                    	 
                    	 
                           	 
                           	 
                                 	 
                                 	      }N
Sol: Eager Loading
Sol: Eager Loading
 Pros.
  Easy to understand
 Cons.
  Not adaptive to changes
    Easy to forget
    Hard to notice
  Unused eager loading is very waste
Sol: Strategic Eager Loading
Sol: Strategic Eager Loading
    	 
              	  	 

	 	      	             	  	     	 

	 	  	 	 	             	  	     	 
	 	  	 	 	 	 	 	 	 	 	 	 	 	      	    	    	 
                • Each item knows its collection
                • Collection resolves relationships
Sol: Strategic Eager Loading
 Pros.
  Adaptive to changes
  (No need to specify relationship for eager
  loading)
 Cons.
  Not supported in Rails (2 & 3)
Conclusion of this section
 Eager loading
  Easy to forget, hard to notice
 Strategic Eager Loading
  No need to specify relation names
  Adaptive to changes
Ruby-to-SQL Translation
Evaluation

    x=1
    x+1      2
AST by Evaluation

 x = Column.new(:x)

 x+1             +


             x       1
Operator Override
Ruby to AST to SQL
	    	  	 	 	 	 	 	 	 	 	         	  	 


                                 ==
	    	  	 	 	 	                           	  	  	 	 	 

Operator                     x        1
Override
Other Examples
Sequel Example
Pitfalls
 1.8 doesn't allow to override '!=' operator
  Use 1.9
 Impossible to override '&&' nor '||'
  Use '&' and '|' instead, or 'AND()', 'OR()'
OT: Operast
 Library to convert Ruby expression into
 other language (such as SQL).
 https://github.com/kwatch/operast
OT: Oktest
 New-style testing library for Python
 Apply Operator Override to Testing
 http://packages.python.org/Oktest/
Conclusion of this section
 How to
  Ruby to AST (by Operator Override)
  AST to SQL
Any Questions?
Underlaying Technology of Modern O/R Mapper

Más contenido relacionado

Destacado

Software de gerenciamento de impressão - Thiarlei - Impressão Gerenciada
Software de gerenciamento de impressão - Thiarlei - Impressão GerenciadaSoftware de gerenciamento de impressão - Thiarlei - Impressão Gerenciada
Software de gerenciamento de impressão - Thiarlei - Impressão Gerenciada
Thiarlei Macedo
 
LTS presentation
LTS presentationLTS presentation
LTS presentation
dharden
 
Intro to Python for Data Science
Intro to Python for Data ScienceIntro to Python for Data Science
Intro to Python for Data Science
paul gureghian
 
Ana Popovic HE Marketing
Ana Popovic HE MarketingAna Popovic HE Marketing
Ana Popovic HE Marketing
Ana Popović
 
As relacións semánticas
As relacións semánticasAs relacións semánticas
As relacións semánticas
rrlvp
 

Destacado (18)

Software de gerenciamento de impressão - Thiarlei - Impressão Gerenciada
Software de gerenciamento de impressão - Thiarlei - Impressão GerenciadaSoftware de gerenciamento de impressão - Thiarlei - Impressão Gerenciada
Software de gerenciamento de impressão - Thiarlei - Impressão Gerenciada
 
Pst to eml converter for Mac
Pst to eml converter for MacPst to eml converter for Mac
Pst to eml converter for Mac
 
Horario de recuperaciones jornada mañana
Horario de recuperaciones jornada mañanaHorario de recuperaciones jornada mañana
Horario de recuperaciones jornada mañana
 
Wiki y blog
Wiki y blog Wiki y blog
Wiki y blog
 
Financial Inclusion for Inclusive Growth – Save the Farmer Campaign
Financial Inclusion for Inclusive Growth – Save the Farmer CampaignFinancial Inclusion for Inclusive Growth – Save the Farmer Campaign
Financial Inclusion for Inclusive Growth – Save the Farmer Campaign
 
Software de monitoramento de impressoras pela internet - Thiarlei - Impressão...
Software de monitoramento de impressoras pela internet - Thiarlei - Impressão...Software de monitoramento de impressoras pela internet - Thiarlei - Impressão...
Software de monitoramento de impressoras pela internet - Thiarlei - Impressão...
 
LTS presentation
LTS presentationLTS presentation
LTS presentation
 
Plato,jarra
Plato,jarraPlato,jarra
Plato,jarra
 
Intro to Python for Data Science
Intro to Python for Data ScienceIntro to Python for Data Science
Intro to Python for Data Science
 
Parquetry Flooring in Sydney
Parquetry Flooring in SydneyParquetry Flooring in Sydney
Parquetry Flooring in Sydney
 
Panorama do Mercado de Impressoras 2013 - Thiarlei - Outsourcing Trends 2014
Panorama do Mercado de Impressoras 2013  - Thiarlei - Outsourcing Trends 2014Panorama do Mercado de Impressoras 2013  - Thiarlei - Outsourcing Trends 2014
Panorama do Mercado de Impressoras 2013 - Thiarlei - Outsourcing Trends 2014
 
Software de impressão segura por biometria - Thiarlei - Impressão Gerenciada
Software de impressão segura por biometria - Thiarlei - Impressão GerenciadaSoftware de impressão segura por biometria - Thiarlei - Impressão Gerenciada
Software de impressão segura por biometria - Thiarlei - Impressão Gerenciada
 
Cluster bean
Cluster beanCluster bean
Cluster bean
 
Condition of farmer in india
Condition of farmer in indiaCondition of farmer in india
Condition of farmer in india
 
Estações quarentenárias e aspectos legais do uso de agentes de controle bioló...
Estações quarentenárias e aspectos legais do uso de agentes de controle bioló...Estações quarentenárias e aspectos legais do uso de agentes de controle bioló...
Estações quarentenárias e aspectos legais do uso de agentes de controle bioló...
 
Ana Popovic HE Marketing
Ana Popovic HE MarketingAna Popovic HE Marketing
Ana Popovic HE Marketing
 
Natural resource
Natural resourceNatural resource
Natural resource
 
As relacións semánticas
As relacións semánticasAs relacións semánticas
As relacións semánticas
 

Similar a Underlaying Technology of Modern O/R Mapper

Scotas - Oracle Open World Sao Pablo
Scotas - Oracle Open World Sao PabloScotas - Oracle Open World Sao Pablo
Scotas - Oracle Open World Sao Pablo
Julian Arocena
 
Rapid java application development @ JUG.ru 25.02.2012
Rapid java application development @ JUG.ru 25.02.2012Rapid java application development @ JUG.ru 25.02.2012
Rapid java application development @ JUG.ru 25.02.2012
Anton Arhipov
 
High performance database applications with pure query and ibm data studio.ba...
High performance database applications with pure query and ibm data studio.ba...High performance database applications with pure query and ibm data studio.ba...
High performance database applications with pure query and ibm data studio.ba...
Vladimir Bacvanski, PhD
 
Reuse and cloud in component based development
Reuse and cloud in component based developmentReuse and cloud in component based development
Reuse and cloud in component based development
scuffio
 
Thu 1100 duncan_john_color
Thu 1100 duncan_john_colorThu 1100 duncan_john_color
Thu 1100 duncan_john_color
DATAVERSITY
 

Similar a Underlaying Technology of Modern O/R Mapper (20)

01.egovFrame Training Book II
01.egovFrame Training Book II01.egovFrame Training Book II
01.egovFrame Training Book II
 
Jvm fundamentals
Jvm fundamentalsJvm fundamentals
Jvm fundamentals
 
Cocoa Design Patterns
Cocoa Design PatternsCocoa Design Patterns
Cocoa Design Patterns
 
Introducing spring
Introducing springIntroducing spring
Introducing spring
 
Solving performance problems in MySQL without denormalization
Solving performance problems in MySQL without denormalizationSolving performance problems in MySQL without denormalization
Solving performance problems in MySQL without denormalization
 
Akiban Technologies: Renormalize
Akiban Technologies: RenormalizeAkiban Technologies: Renormalize
Akiban Technologies: Renormalize
 
Akiban Technologies: Renormalize
Akiban Technologies: RenormalizeAkiban Technologies: Renormalize
Akiban Technologies: Renormalize
 
Advanced Php/Mysql Training With live project
Advanced Php/Mysql Training With live projectAdvanced Php/Mysql Training With live project
Advanced Php/Mysql Training With live project
 
04.egovFrame Runtime Environment Workshop
04.egovFrame Runtime Environment Workshop04.egovFrame Runtime Environment Workshop
04.egovFrame Runtime Environment Workshop
 
Cp7 rpc
Cp7 rpcCp7 rpc
Cp7 rpc
 
Build Java Web Application Using Apache Struts
Build Java Web Application Using Apache Struts Build Java Web Application Using Apache Struts
Build Java Web Application Using Apache Struts
 
Object- Relational Persistence in Smalltalk
Object- Relational Persistence in SmalltalkObject- Relational Persistence in Smalltalk
Object- Relational Persistence in Smalltalk
 
Object Oriented Concepts and Principles
Object Oriented Concepts and PrinciplesObject Oriented Concepts and Principles
Object Oriented Concepts and Principles
 
High-performance model queries
High-performance model queriesHigh-performance model queries
High-performance model queries
 
Scotas - Oracle Open World Sao Pablo
Scotas - Oracle Open World Sao PabloScotas - Oracle Open World Sao Pablo
Scotas - Oracle Open World Sao Pablo
 
Rapid java application development @ JUG.ru 25.02.2012
Rapid java application development @ JUG.ru 25.02.2012Rapid java application development @ JUG.ru 25.02.2012
Rapid java application development @ JUG.ru 25.02.2012
 
High performance database applications with pure query and ibm data studio.ba...
High performance database applications with pure query and ibm data studio.ba...High performance database applications with pure query and ibm data studio.ba...
High performance database applications with pure query and ibm data studio.ba...
 
Oracle sql demo
Oracle sql demoOracle sql demo
Oracle sql demo
 
Reuse and cloud in component based development
Reuse and cloud in component based developmentReuse and cloud in component based development
Reuse and cloud in component based development
 
Thu 1100 duncan_john_color
Thu 1100 duncan_john_colorThu 1100 duncan_john_color
Thu 1100 duncan_john_color
 

Más de kwatch

文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた
kwatch
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"
kwatch
 

Más de kwatch (20)

How to make the fastest Router in Python
How to make the fastest Router in PythonHow to make the fastest Router in Python
How to make the fastest Router in Python
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアル
 
なんでもID
なんでもIDなんでもID
なんでもID
 
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
Nippondanji氏に怒られても仕方ない、配列型とJSON型の使い方
 
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
【SQLインジェクション対策】徳丸先生に怒られない、動的SQLの安全な組み立て方
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?正規表現リテラルは本当に必要なのか?
正規表現リテラルは本当に必要なのか?
 
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
【公開終了】Python4PHPer - PHPユーザのためのPython入門 (Python2.5)
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
SQL上級者こそ知って欲しい、なぜO/Rマッパーが重要か?
 
Fantastic DSL in Python
Fantastic DSL in PythonFantastic DSL in Python
Fantastic DSL in Python
 
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
What is wrong on Test::More? / Test::Moreが抱える問題点とその解決策
 
PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門PHP5.5新機能「ジェネレータ」初心者入門
PHP5.5新機能「ジェネレータ」初心者入門
 
Pretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/MercurialPretty Good Branch Strategy for Git/Mercurial
Pretty Good Branch Strategy for Git/Mercurial
 
Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -Oktest - a new style testing library for Python -
Oktest - a new style testing library for Python -
 
文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた文字列結合のベンチマークをいろんな処理系でやってみた
文字列結合のベンチマークをいろんな処理系でやってみた
 
I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"I have something to say about the buzz word "From Java to Ruby"
I have something to say about the buzz word "From Java to Ruby"
 
Cより速いRubyプログラム
Cより速いRubyプログラムCより速いRubyプログラム
Cより速いRubyプログラム
 
Javaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジンJavaより速いLL用テンプレートエンジン
Javaより速いLL用テンプレートエンジン
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 

Underlaying Technology of Modern O/R Mapper