「INDEXによる高速化」は本当なのか!?PostgreSQLでパフォーマンスチューニングしてみた

お久しぶりですね。
みんなの恋人(ラバー)、リモートワーカーの仲井です。

カタリストで作っている「とある魔術系のサイト」では、それなりに魔力(規模)が大きいためにどうしても詠唱(検索処理)が遅くなってしまうことがありました。
テーブルによっては1000万超のスペル(レコード)もあり、高名なハイウィザードでもないかぎり、ここの詠唱(検索処理)がボトルネックになることも多いです。

ちょっとひねって面白くしようと思ったけど、上司のウケも悪いし、続けるのもめんどくさいからこの魔術設定はやめますね。

(大規模サイト担当してる人から見ればたった1000万でしょ? となるかもですが、カタリストでは大きい方なのです。というかビッグデータを扱うサービスと比較するのは用途もスペックも違うんだしナンセンスですね。)

ここまで大きくなくても、数千、数万レベルのレコード数であっても設計を間違えるとそれがボトルネックになることもあり、必ずしも大容量データだと遅くなるというわけではありません。大容量でも適切なチューニングがされていれば問題はないのです。

DBのパフォーマンスチューニングについてはたくさんのサイトやブログで紹介があり、皆さま既に知識としてはご存知とは思いますので、細かい内容は無視して「チューニングすると、実際これくらい差が出る」ということを、私がこれまで経験した内容を紹介したいと思います。

<続きを読む>

ユニットテストを書こう (TypeScript版)

こんにちは、エンジニアの尾形です。

みなさん、ユニットテストを書いていますか?
このページに訪れた方は、少なくともユニットテストに興味がある方でしょう。

今回のブログでは、ユニットテストの流れをサンプルプログラムとともに簡単にご紹介します。
これからユニットテストを始めたいという方の参考になれば幸いです。

今回のサンプルプログラムはTypeScriptで記述していますが、
Node.jsやその他の言語でも考え方はほぼ同じです。

<続きを読む>