【Rails】MongoDBとMySQLそれぞれへのindexの貼り方とか
Overview
いつも仕事でメインはMongoDB、サブはMySQLみたいな使い方をしていて、MySQLってどうやるんだっけ?と忘れることがあるのでその備忘。
MySQL
みなさんご存知のRDBです。
migrateを実行してDBに各種定義を反映していきます。
table & column作成
bundle exec rails g migration AddHogehogeTable
上記で作成されたmigrateファイルを編集します。
class AddHogehogeTable < ActiveRecord::Migration[5.X] def change create_table :hogehoges do |t| t.string :fugafuga end end end
index作成
class AddHogehogeTable < ActiveRecord::Migration[5.X] def change create_table :hogehoges do |t| t.string :fugafuga end add_index :hogehoges, :fugafuga ← NEW end end
migrate実行
ステータスの確認をしてupになっていれば問題なし。
あとはrails consoleからデータを作成できるかも確認しましょう。
bundle exec rake db:migrate
bundle exec rake db:migrate:status
MongoDB
NoSQL Databaseです。
基本モデルと連動しているので、再読み込みさせることによって各種定義が反映されます。
table(collection)作成
rails g model Hogehoge
column(field)作成
hogehogeファイルを開いて、下記を記載するだけ。
includeしているモジュールはmongoid(ORM)経由でMongoDBに定義するため必要なものになります。
class Hogehoge include Mongoid::Document field :fugafuga end
index作成
# ターミナルにてrails consoleに入ります $ bundle exec rails console -e development 略 pry(main)> Hogehoge.create_indexs # index作成 pry(main)> Hogehoge.collection.indexes.to_a # 作成されたindexが確認できる
まとめ
MongoDBはschema定義がそのままモデルに記載されているので、MySQLより簡単にDB定義を変更できます。
ですが、トランザクションがないため整合性を重要視するプロダクトには向かないかもです。(一応MongoDB4.0からトランザクション機能が増えたので、かなりよくなっているかもですが)
MySQLはトランザクションがあるので、整合性に関しても安心できそうです。
その分こういうのがあったりしますが。
schema定義はそのままschema.rb
にあるので見やすいですが、ある程度MongoDBに慣れてしまうとmigrate実行漏れがあったりするので気をつけましょう。