File tree 3 files changed +58
-0
lines changed
documentation/topics/advanced
3 files changed +58
-0
lines changed Original file line number Diff line number Diff line change @@ -34,6 +34,7 @@ Welcome! `AshPostgres` is the PostgreSQL data layer for [Ash Framework](https://
34
34
- [ Expressions] ( documentation/topics/advanced/expressions.md )
35
35
- [ Manual Relationships] ( documentation/topics/advanced/manual-relationships.md )
36
36
- [ Schema Based Multitenancy] ( documentation/topics/advanced/schema-based-multitenancy.md )
37
+ - [ Read Replicas] ( documentation/topics/advanced/using-multiple-repos.md )
37
38
38
39
## Reference
39
40
Original file line number Diff line number Diff line change
1
+ # Using Multiple Repos
2
+
3
+ When scaling PostgreSQL you may want to setup _ read_ replicas to improve
4
+ performance and availability. This can be achieved by configuring multiple
5
+ repositories in your application.
6
+
7
+ ## Setup Read Replicas
8
+
9
+ Following the [ ecto docs] ( https://hexdocs.pm/ecto/replicas-and-dynamic-repositories.html ) , change your Repo configuration:
10
+
11
+ ``` elixir
12
+ defmodule MyApp .Repo do
13
+ use Ecto .Repo ,
14
+ otp_app: :my_app ,
15
+ adapter: Ecto .Adapters .Postgres
16
+
17
+ @replicas [
18
+ MyApp .Repo .Replica1 ,
19
+ MyApp .Repo .Replica2 ,
20
+ MyApp .Repo .Replica3 ,
21
+ MyApp .Repo .Replica4
22
+ ]
23
+
24
+ def replica do
25
+ Enum .random (@replicas )
26
+ end
27
+
28
+ for repo <- @replicas do
29
+ defmodule repo do
30
+ use Ecto .Repo ,
31
+ otp_app: :my_app ,
32
+ adapter: Ecto .Adapters .Postgres ,
33
+ read_only: true
34
+ end
35
+ end
36
+ end
37
+ ```
38
+
39
+ ## Configure AshPostgres
40
+
41
+ Now change the ` repo ` argument for your ` postgres ` block as such:
42
+
43
+ ``` elixir
44
+ defmodule MyApp .MyDomain .MyResource do
45
+ use Ash .Resource ,
46
+ date_layer: AshPostgres .DataLayer
47
+
48
+ postgres do
49
+ table " my_resources"
50
+ repo fn
51
+ _resource , :read -> MyApp .Repo .replica ()
52
+ _resource , :mutate -> MyApp .Repo
53
+ end
54
+ end
55
+ end
56
+ ```
Original file line number Diff line number Diff line change @@ -97,6 +97,7 @@ defmodule AshPostgres.MixProject do
97
97
"documentation/topics/development/upgrading-to-2.0.md" ,
98
98
"documentation/topics/advanced/expressions.md" ,
99
99
"documentation/topics/advanced/schema-based-multitenancy.md" ,
100
+ "documentation/topics/advanced/using-multiple-repos.md" ,
100
101
"documentation/topics/advanced/manual-relationships.md" ,
101
102
{ "documentation/dsls/DSL-AshPostgres.DataLayer.md" ,
102
103
search_data: Spark.Docs . search_data_for ( AshPostgres.DataLayer ) } ,
You can’t perform that action at this time.
0 commit comments