やわらかテック

興味のあること。業務を通して得られた発見。個人的に試してみたことをアウトプットしています🍵

2023年に読んで良かった本

気づいたらクリスマスが終わっていました。本当に早いですね...。
前回、公開した「2023年に買って良かったもの」に引き続き、年末恒例の「~年に読んで良かった本」についても紹介していきたいと思います。

www.okb-shelf.work

買って使ってみて本当に良かった...と感じたものだけを紹介しているので、ぜひ合わせて読んでみてください。
今年はアウトプットをメインに活動したこともあって、昨年度と比べるとあまり本を読むことができませんでしたが、それでも何冊か衝撃・感銘を受けた書籍がありました。なんだかんだで新しい知識を得ることができる読書が好きで、気づいた時には書店に行ってしまいます。学生の頃は読書とは無縁の生活をしていたのに不思議なものです。

ということで2023年度に読んで良かった本を5冊、順不同で紹介していきます。

  • RubyでつくるRuby
  • 一汁一菜でよいという提案
  • モモ
  • ソフトウェアアーキテクチャの基礎
  • SQLパフォーマンス詳解
  • 最後に
続きを読む

今更ながらMATERIALIZED VIEW(マテリアライズドビュー)について学ぶ

アプリケーションにおいて高負荷になりやすい処理の一つにレポート・データ集計があります。
リアルタイム性が求められる場合もあれば、ある時点までに集計されたデータを見れればOKなど、要件はさまざまですが、一般的にはデータベースに対して複雑なクエリや複数テーブルに対しての結合を行う必要があります。そのためデータ量に依存しやすく、リリース当初は問題なくレポートが見れていたのに、サービスの運用期間が長くなるとレポートが見えなくなったという話をよく聞きます。

この問題への対処方法の1つとして、データのキャッシュ化が挙げられます。
リアルタイム性は失われてしまいますが、ある時点までの集計がされているデータを用意しておけば、都度、集計を行う必要がないため結果を表示するまでの時間を大幅に短縮することができます。

MATERIALIZED VIEWによるキャッシュ化

キャッシュ化をアプリケーション側で実装しても良いですが、実はデータベースにはMATERIALIZED VIEW(マテリアライズドビュー)という、SQLの実行結果をキャッシュする機能が提供されています。通常のビューとは異なり、SQLの実行結果を保持してくれるため、あたかも1つのテーブルのように扱うことができます。

PostgreSQLにおけるマテリアライズドビューはビューのようにルールシステムを使用しますが、あたかもテーブルであるかのような形態で結果を保持します。

マテリアライズドビュー

続きを読む

2023年に買って良かったもの

早いもので2023年も終わろうとしています。
いやー、今年もあっという間でしたね。今年もたくさん記事を書いてきましたが、どうでしたでしょうか。
読者の皆さんをはじめ、僕の記事を読んでくださる方には頭が上がりません。本当にいつもありがとうございます。年末なので毎年恒例(?)の「〜年に買って良かったもの」の記事を書きたいと思います。

自称ミニマリストなんですが、なんだかんだで色々と買ってしまいました。
新居に引っ越して今年で2年経つのですが、長く住んでいるとモノが悪くなってきたり「うーん、何か違うなぁ...」と目につくものが続々と現れる一年間でした。
ということで、2023年に買って良かったと感じているものを順不同で紹介していきたいと思います。

  • Dyson Micro Origin (SV33 FF OR)
  • モニター: BenQ GW2785TC
  • Anker 523 Charger (Nano 3, 47W)
  • GU: ヘビーウェイトクルーネックT(長袖)
  • 美酢(ミチョ)
  • 最後に
続きを読む

NULL値が含まれるカラムにインデックスは有効なのか

データベースで0対Nのモデルを表現する際に、よく外部キー制約とNULL許容の制約を定義することがあります。
値は特定のテーブルのIDもしくはNULLのどちらかを持つことになります。これを出版社(publishers)と書籍(books)のモデルをテーブルに落とし込んでみると以下のようになります。
基本的に書籍は出版社から出版されてbooksテーブルのレコードはpublisher_idで紐付けられますが、個人出版・データベースに登録されていない出版社から出版された書籍はpublisher_idNULLを持つこととします。別途、個人か企業による出版かのカラムを持たせたり...と考えられることはありますが、今回は簡単のために省略します。

しばしば出版社がどんな書籍を出版しているのかを検索したいため、books.publishers_idに検索用のインデックスを作成します。 このインデックスは出版社から出版されている書籍に対して、検索の高速化を期待してのものですが、果たして個人出版の書籍の絞り込み(books.publishers_idNULL)に対しても有効なのでしょうか。
NULLを含むカラムを検索するということは一般的なことだと思いますが、意外にも深く考えたことがなかったテーマです。 事前の予測ではインデックスが効いてくれると思いますが、実際に検証してみたいと思います。

続きを読む

Ruby3.4で追加されるブロックパラメーター"it"について

先週、届いたRuby Weeklyに面白そうなトピックが紹介されていました。

Ruby 3.4 Will Have 'it'
— There’s never been any doubt: Ruby has it. But now as well as the ‘it’ factor,
it really will have it. Confused? it is a nicer looking shortcut to the first parameter in a block (a la _1) – e.g. arr.each { puts it }.
Ruby 3.3 will warn on it with 3.4 (due in a year’s time) getting the real deal.
TAKASHI KOKUBUN

Re-reconsider numbered parameters: it as a default block parameter

ふむふむ...。
要するにRuby3.4系では、ブロック構文のデフォルトパラメーターにitが設定されてブロック引数をしてしなくても要素の参照が可能になるということです。

# 3.4系だとOK
[1,2,3].each do 
  puts it
end
続きを読む