database multitenancy in ruby
TRANSCRIPT
![Page 1: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/1.jpg)
DATABASE MULTITENANCY
RUBY IDIOM CASE
![Page 2: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/2.jpg)
TYPICAL MULTITENANCY OPTIONS
SQL WORLD
SHAREDSame Database
Different SchemaISOLATED
![Page 3: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/3.jpg)
TYPICAL MULTITENANCY OPTIONS
SQL WORLD
SHAREDSame Database
Different Schema
Different Database
Same SchemaISOLATED
![Page 4: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/4.jpg)
TYPICAL MULTITENANCY OPTIONS
SQL WORLD
SHAREDSame Database
Different Schema
Different Database
Same Schema
Different Database
Different SchemaISOLATED
![Page 5: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/5.jpg)
TYPICAL MULTITENANCY OPTIONS
SQL WORLD
SCHEMA-LESS WORLD - MONGODB
SHAREDSame Database
Different Schema
Different Database
Same Schema
Different Database
Different SchemaISOLATED
SHAREDSame Database
Different CollectionISOLATED
![Page 6: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/6.jpg)
TYPICAL MULTITENANCY OPTIONS
SQL WORLD
SCHEMA-LESS WORLD - MONGODB
SHAREDSame Database
Different Schema
Different Database
Same Schema
Different Database
Different SchemaISOLATED
SHAREDSame Database
Different Collection
Different Database
Different CollectionISOLATED
Reference: Considerations on MongoDB multitenancy blog post
![Page 7: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/7.jpg)
![Page 8: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/8.jpg)
![Page 9: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/9.jpg)
![Page 10: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/10.jpg)
![Page 11: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/11.jpg)
MONGODB
SETUP TENANT DATABASE
▸ Create Database
▸ Create collections
▸ Shard collections
▸ Define shard keys
▸ Set tagged ranges
▸ Create indices
▸ Seed with initial data
![Page 12: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/12.jpg)
Building on top of Mongoid
![Page 13: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/13.jpg)
Building on top of Mongoid
![Page 14: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/14.jpg)
Building on top of Mongoid
![Page 15: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/15.jpg)
![Page 16: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/16.jpg)
PROS AND CONSPROS
Rack compliant
![Page 17: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/17.jpg)
PROS AND CONSPROS
Rack compliant
No one needs to care
![Page 18: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/18.jpg)
PROS AND CONSPROS
Rack compliant
No one needs to care
Isolates multitenancy implementation to a single method
![Page 19: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/19.jpg)
PROS AND CONSPROS
Rack compliant
No one needs to care
Isolates multitenancy implementation to a single method
If something goes wrong it ensures it goes back to the default
![Page 20: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/20.jpg)
PROS AND CONSPROS
Rack compliant
No one needs to care
Isolates multitenancy implementation to a single method
If something goes wrong it ensures it goes back to the default
CONS
Always need to define the database for maintenance tasks
![Page 21: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/21.jpg)
PROS AND CONSPROS
Rack compliant
No one needs to care
Isolates multitenancy implementation to a single method
If something goes wrong it ensures it goes back to the default
CONS
Always need to define the database for maintenance tasks
Need to store the tenant database name somewhere else
![Page 22: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/22.jpg)
PROS AND CONSPROS
Rack compliant
No one needs to care
Isolates multitenancy implementation to a single method
If something goes wrong it ensures it goes back to the default
CONS
Always need to define the database for maintenance tasks
Need to store the tenant database name somewhere else
You need to be ready to not have the database setup right away
![Page 23: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/23.jpg)
REAL WORLD
ADVANTAGES
▸ Performance not affected by other customers data growth
▸
![Page 24: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/24.jpg)
REAL WORLD
ADVANTAGES
▸ Performance not affected by other customers data growth
▸ Easier to perform data migrations for single customers
![Page 25: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/25.jpg)
REAL WORLD
ADVANTAGES
▸ Performance not affected by other customers data growth
▸ Easier to perform data migrations for single customers
▸ Delete old customers data is a simple DROP DATABASE
![Page 26: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/26.jpg)
REAL WORLD
ADVANTAGES
▸ Performance not affected by other customers data growth
▸ Easier to perform data migrations for single customers
▸ Delete old customers data is a simple DROP DATABASE
GOTCHAS
▸ You are on your own, no support, no one will care about if creating a database is slow or listing them takes ages (MongoDB Cloud Manager)
![Page 27: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/27.jpg)
REAL WORLD
ADVANTAGES
▸ Performance not affected by other customers data growth
▸ Easier to perform data migrations for single customers
▸ Delete old customers data is a simple DROP DATABASE
GOTCHAS
▸ You are on your own, no support, no one will care about if creating a database is slow or listing them takes ages (MongoDB Cloud Manager)
▸ Monitoring tools like New Relic discard database information when showing query performance metrics
![Page 28: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/28.jpg)
YOU CAN JOIN US
WE ARE HIRING
▸ Backend
▸ Frontend
▸ Mobile iOS/Android
TALK TO ME
https://github.com/lqd-io
![Page 29: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/29.jpg)
ME
JOÃO SOARES
@_jasoares
github.com/jasoares
linkedin.com/in/jaisoares
CTO & Cofounder @ Liquid
Previously:
Mobitto
Way2Inov
![Page 30: Database Multitenancy in Ruby](https://reader031.vdocuments.net/reader031/viewer/2022021813/587877641a28ab497b8b77cd/html5/thumbnails/30.jpg)
ASK ME ANYTHING