ボクココ

個人開発に関するテックブログ

データベース

慣れないインデックス貼り vol.2

ども、@kimihom です。 前回のインデックス貼り に続き、インデックス対応についての追記を記す。 外部キー のインデックスの効果 よく、関連する外部キーにインデックスをデフォルトで貼る書き方がある。 class CreateTweets < ActiveRecord::Migration[5.0…

0->1 サービス開発者の慣れないインデックス貼り

ども、@kimihom です。 本記事は、普段アプリケーションエンジニアとして 0->1 でのサービス開発をやってきて、クエリ処理が重くなってどうしたものかという状況へ達した際に考えたいことをまとめてみる。 インフラエンジニアか自分でやるか まず、サービス…

SQLの負荷分析と改善

ども、@kimihom です。 今回 SQL の負荷を分析して改善することをしたので、その実施を残しておこう。 パフォーマンス解析 基礎 何かしらサービスをローンチする時点で、パフォーマンス解析するようなサービスを導入することかと思う。 New Relic | パフォー…

Heroku Postgres のアクセスが遅くなった時にした対応

ども、@kimihom です。 先日、Heroku Postgres の Hobby プランを使っていたら、急に DB へのアクセスが遅くなった事象が発生した。その原因と対応について記しておく。 問題の原因 まず、どんなときに遅くなったのかというと、1つのレコードに大量のデータ…

自前 SaaS における DB 設計サンプル

ども、@kimihom at 長野 です。 昨年ライブ配信システムの wellcast をリリースし、何社か導入いただいている中でコツコツと改善を繰り返してきている。 www.wellcast.in そこで現状の SaaS DB 設計(マルチテナントアーキテクチャ)をシェアしつつ、今後の見…

プログラマのための SQL を読んで

ども、@kimihom です。 今回は以下の本をざっと読んだので感想を書く。760ページにもなる超大型本だ。 プログラマのためのSQL 第4版作者:ジョー・セルコ,Joe Celko翔泳社Amazon SQL でここまでできる 私は普段、Web アプリケーションのコードを書くエンジニ…

CRUD のその先へ。データ分析をはじめよう

ども、@kimihom です。 Rails を使って Web アプリケーションを作ってる分には、ActiveRecord をちゃんと理解すれば十分だ。そして複数テーブルにまたがった join や preload の方法などを理解することで、効果的なクエリの発行を学んでいくことだろう。以下…

PostgreSQL の JSONB 型の紹介とメリット

ども、@kimhom です。 今回は必要に駆られて PostgreSQL で新しく登場した JSONB 型について調べるきっかけがあったので、まとめてみる。 予め断っておくと JSONB 型はいわば PostgreSQL のリレーショナルデータベースからの脱却だ。これは一見魅力的に見え…

データベースの移設をやって感じた大事なこと

ども、@kimihom です。 今回は運用ネタ。API で使っていたデータベース (Compose MongoDB) の無料プランがなくなるという告知が終了の2週間前にメールで届くっていう事態になった。てことで慌てて他のデータベースを探し、移設することになった。もちろん、…

MongoDB のインデックス貼る時の注意

毎回つまずくのでメモ。。 Rails の Mongoid を使っている時は、rakeタスクでインデックスを貼る。 bundle exec rake db:mongoid:create_indexes さて、このインデックスを修正して、貼りなおしたいといったとき。もう一回上記コマンドを打っても変更が反映…

DB の state は State Machine で管理する

最近は毎日プログラミングの日々を過ごしている。 そんな中、とあるテーブル(ドキュメント)で状態を管理しなきゃいけない場面があった。 この問題の一つの手としてはstate をint で保存し、一つ一つの数字を何かしらの状態に紐づけるやり方だ。これを実践し…

ユーザ登録・API 認証の仕組みを Rails で実現する

スマホアプリから会員の新規登録、ログインが両方できるようにAPIを作成中。ようやく自前でアクセストークンを作ってOAuth認証が出来たのでまとめておく。 まず何がしたいか? スマホアプリでAPI認証ができるように、OAuthを自前で作成したい。 -> スマホア…

Hello! MongoDB レプリカセット!

いよいよ来ましたレプリケーション。本番環境のMongoDBでは障害に対応できるよう複数DBサーバ構成にする。これによりデータ損失やサービス停止を防ぐ。そして負荷分散にもつながるレプリケーションについて学んでいこう。 MongoDB では複数のMongoDBをまとめ…

MongoDB のスキーマデザイン

さて、今回はアプリを書くほうのエンジニアにとっては一番大事なスキーマ設計について学んだことをまとめていこう。ここはユーザが増えるにつれて全てのエンジニアが直面する部分なので、予めそれらを予見してスキーマを設計できるようになる必要がある。 正…

MongoDB の Index 入門その2

前回 基本的なIndexの貼り方を紹介したので、引き続きMongoDB関連のエントリー。 今回はドキュメント内に配列や Embed Documentがあった場合。 Embed Document ご存知の通り、MongoDBはドキュメント内にドキュメントをさらに書ける。 { "name" : "hoge", "lo…

MongoDB の Index 入門

最近はひたすらMongoDB について学習中。 日本語の書籍が全くないので、英語で。ちょいと時間がかかるが英語と一緒に勉強できるからいい感じだ。 さて、MongoDBの CRUD 系は割とどこの本でも同じようなことを書いてあるが、今回読んでる本はindex についてわ…

アプリエンジニアがインフラに挑戦その4

どーも。 ホストOS側のChef環境がそろったので、いよいよゲストOS(Virtual Machine) に Rails 環境をインストールしていきます。今回は一つのゲストOS にRailsとMongoDB, Nginx 全て入れていきます。 今回のChef Recipes は Github においてますので適宜参照…

アプリエンジニアがインフラに挑戦

どーも。 普段は Rails アプリをメインに、 AngularJS などのフロントエンドばかりやっている人間が、デプロイについて学んだのでまとめます。 対象読者: アプリしか書いたことなくて、本番公開などやったこと無い人。今までHerokuで本番公開してきたけど、…

本屋で感じた技術本のこと

久々に普通の本屋に行ってきた。 他の分野もざーっと見て、何か自分の興味のそそるものがないかを探りにね。 そこで感じたのが、自分の中で重要だと思っていた技術に関する本が全くなく、逆にそれ学ぶ必要あるか?みたいな本がすごいたくさん置かれていたと…

Rails x MongoDB x RSpec にしたときのScaffoldで作られるファイルたち

$ rails g scaffold article subject:string body:text invoke mongo_mapper create app/models/article.rb invoke rspec create spec/models/article_spec.rb invoke factory_girl create spec/factories/articles.rb route resources :articles invoke sca…

Rails x MongoDB x jQuery x CoffeeScript x RSpec x Autotest な環境構築

Railsといえばこのコンボではないだろうか?とはいえそれぞれ何ナノ?って方の為に簡単に解説。Ruby on Rails言わずと知れたWebアプリケーションフレームワークの一つ。Rubyの柔軟性を存分に活かしたその作りは開発者の無駄なコードを書く時間を最小限にとど…