octopus を使ってみる (Rails)
Ruby Ruby on Rails
Published: 2020-03-28

やったこと

octopus をインストールして使ってみます。

確認環境

$ ruby --version
ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin17]

$ rails --version
Rails 5.2.3

$ sqlite3 --version
3.20.1 2017-08-24 16:21:36 8d3a7ea6c5690d6b7c3767558f4f01b511c55463e3f9e64506801fe9b74dce34

調査

今回 octopus という gem を使います。

octopus は下記機能を提供しています。

  • Sharding (with multiple shards, and grouped shards).
  • Replication (Master/slave support, with multiple slaves).
  • Moving data between shards with migrations.
  • Tools to manage database configurations. (soon)

Replication について動きを確かめてみます。

インストール

Gemfile

gem 'ar-octopus'

config

config/shards.yml

octopus:
  replicated: true
  environments:
    - development
  development:
    shard1:
      adapter: sqlite3
      database: db/development.slave1.sqlite3
    shard2:
      adapter: sqlite3
      database: db/development.slave2.sqlite3

アクセスしてみる

別々にアクセスしていることを確認するため、 使用するテーブルの最終行にデータを入れました。

  • development.slave1.sqlite3
  • development.slave2.sqlite3
$ rails c
Running via Spring preloader in process 74218
Loading development environment (Rails 5.2.4.1)
irb(main):001:0> Book.last
[Shard: shard2]  Book Load (0.4ms)  SELECT  "books".* FROM "books" ORDER BY "books"."id" DESC LIMIT ?  [["LIMIT", 1]]
=> #<Book id: 4, title: "222", status: nil, created_at: "2020-03-15 07:58:57", updated_at: "2020-03-15 07:58:57">
irb(main):002:0> Book.last
[Shard: shard1]  Book Load (0.1ms)  SELECT  "books".* FROM "books" ORDER BY "books"."id" DESC LIMIT ?  [["LIMIT", 1]]
=> #<Book id: 5, title: "123", status: 1, created_at: "2020-03-28 00:00:00", updated_at: "2020-03-28 00:00:00">

shard1、shard2 によって、異なるデータを取得していることが分かります。

最後に

Octopus will enter into maintainance mode once Rails 6 is released

Rails6 がリリースされているので、メンテナンスモードになっているようです。