Update multi-db docs
* Add note about schema cache * Add note about opening too many connections * Improve headers in caveats section
This commit is contained in:
parent
f813119aec
commit
dfb519ac71
|
@ -32,6 +32,7 @@ The following features are not (yet) supported:
|
||||||
* Sharding
|
* Sharding
|
||||||
* Joining across clusters
|
* Joining across clusters
|
||||||
* Load balancing replicas
|
* Load balancing replicas
|
||||||
|
* Dumping schema caches for multiple databases
|
||||||
|
|
||||||
## Setting up your application
|
## Setting up your application
|
||||||
|
|
||||||
|
@ -121,6 +122,12 @@ config.active_record.writing_role = :default
|
||||||
config.active_record.reading_role = :readonly
|
config.active_record.reading_role = :readonly
|
||||||
```
|
```
|
||||||
|
|
||||||
|
It's important to connect to your database in a single model and then inherit from that model
|
||||||
|
for the tables rather than connect multiple individual models to the same database. Database
|
||||||
|
clients have a limit to the number of open connections there can be and if you do this it will
|
||||||
|
multiply the number of connections you have since Rails uses the model class name for the
|
||||||
|
connection specification name.
|
||||||
|
|
||||||
Now that we have the database.yml and the new model set up it's time to create the databases.
|
Now that we have the database.yml and the new model set up it's time to create the databases.
|
||||||
Rails 6.0 ships with all the rails tasks you need to use multiple databases in Rails.
|
Rails 6.0 ships with all the rails tasks you need to use multiple databases in Rails.
|
||||||
|
|
||||||
|
@ -253,17 +260,29 @@ for the 'nonexistent' role.)`
|
||||||
|
|
||||||
## Caveats
|
## Caveats
|
||||||
|
|
||||||
|
### Sharding
|
||||||
|
|
||||||
As noted at the top, Rails doesn't (yet) support sharding. We had to do a lot of work
|
As noted at the top, Rails doesn't (yet) support sharding. We had to do a lot of work
|
||||||
to support multiple databases for Rails 6.0. The lack of support for sharding isn't
|
to support multiple databases for Rails 6.0. The lack of support for sharding isn't
|
||||||
an oversight, but does require additional work that didn't make it in for 6.0. For now
|
an oversight, but does require additional work that didn't make it in for 6.0. For now
|
||||||
if you need sharding it may be advisable to continue using one of the many gems
|
if you need sharding it may be advisable to continue using one of the many gems
|
||||||
that supports this.
|
that supports this.
|
||||||
|
|
||||||
|
### Load Balancing Replicas
|
||||||
|
|
||||||
Rails also doesn't support automatic load balancing of replicas. This is very
|
Rails also doesn't support automatic load balancing of replicas. This is very
|
||||||
dependent on your infrastructure. We may implement basic, primitive load balancing
|
dependent on your infrastructure. We may implement basic, primitive load balancing
|
||||||
in the future, but for an application at scale this should be something your application
|
in the future, but for an application at scale this should be something your application
|
||||||
handles outside of Rails.
|
handles outside of Rails.
|
||||||
|
|
||||||
Lastly, you cannot join across databases. Rails 6.1 will support using `has_many`
|
### Joining Across Databases
|
||||||
|
|
||||||
|
Applications cannot join across databases. Rails 6.1 will support using `has_many`
|
||||||
relationships and creating 2 queries instead of joining, but Rails 6.0 will require
|
relationships and creating 2 queries instead of joining, but Rails 6.0 will require
|
||||||
you to split the joins into 2 selects manually.
|
you to split the joins into 2 selects manually.
|
||||||
|
|
||||||
|
### Schema Cache
|
||||||
|
|
||||||
|
If you use a schema cache and multiple database you'll need to write an initialzer
|
||||||
|
that loads the schema cache from your app. This wasn't an issue we could resolve in
|
||||||
|
time for Rails 6.0 but hope to have it in a future version soon.
|
||||||
|
|
Loading…
Reference in New Issue