やわらかテック

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

データベースにおけるJSON型のカラムの使い所

最近、データベースのテーブル設計を担当したり、既存のテーブル設計を見ることが多いです。
テーブルの設計書を見てみるとJSON型が指定されているカラムが目につくことがあります。既存のテーブルでもJSON型が使われている箇所がありました。
json型を使うな!」というわけではありませんが、前から何度も言っているように設計やアーキテクチャというのは常にトレードオフです。JSON型のカラムについても同様にメリット・デメリットがあります。
今回はRDBにおいてJSON型を使っても良いケース、避けるべきケースについて個人的な所感を書いてみたいと思います。なお、今回の内容はSQLアンチパターンでも紹介されている「ジェイウォーク(信号無視)」を参考にしています。

SQLアンチパターン

SQLアンチパターン

Amazon

とても良い書籍なので、データベースを触る人は一度は読んでおいて損はありません。

  • RDBの強み
  • JSON型のデメリット
    • 外部キー制約が設定できない
    • SQLが複雑になる
    • インデックスが効かないケースが多い
  • JSON型のメリット
    • 外部テーブルを定義しなくて良い
    • 検索・更新しないデータ
  • まとめ
続きを読む

HonoのNode.jsランタイムにマージされた神PRを見てみる

先日、Twitterにて素晴らしいツイートを見かけました。

このツイートはHono製作者のYusuke Wadaさんのもので、どうやらNode.jsランタイム上でHonoのパフォーマンスがめちゃくちゃ改善されたとのこと。この対応はTaku Amanoさんという方が行われたそうで、神PRと称賛されていました。

現在、世界中で注目されているOSSのHonoに取り込まれた神PRとは、一体、どのような内容なのでしょうか。
気になってしょうがないので実際に神PRの内容を見てみたいと思います。Hono全体のアーキテクチャやWEBフレームワークの作りに詳しいわけではないので、理解できる情報に限界はありますが、チャレンジしてみます。

対応についての全体像はPRを出されたTaku Amanoさんが解説されていました。

ふむふむ...。
このツイートを頼りにRequestとResponse周りを中心に見ていきたいと思います。

続きを読む

エアコンの分解洗浄をして内部の汚さに衝撃を受けた

ある日のこと、ポストに「エアコンの分解洗浄しませんか?」という旨のチラシが入っていました。
今までこういったチラシが入っていたことはなくて、どうもエリアを移動しながら洗浄を行なっているようで、今回、たまたま自分の住んでいる場所が洗浄エリアになったようです。
エアコンの掃除はフィルターを夏と冬、エアコン初稼働の前に簡単に掃除するぐらいで、内部の洗浄までは行なったことがありません。 ただ吹き出し口から内部を覗いてみると、黒くなったホコリが気になります。
とはいえ、手が届かない上に賃貸に付属しているエアコンなので、壊してしまったらどうしよう...と思うと怖くてエアコン内部の洗浄には手が出ませんでした。

そんな感じで、元から「エアコン内部の洗浄をしたいなぁ..」と思っていたので、エアコン分解洗浄をお願いすることにしました。

続きを読む

中間テーブルへのデータ更新(削除・追加)を効率的に行う方法

以下のようなテーブルがあったとします。
ユーザーは記事(posts)に対して、自由にタグ(tags)を設定することが可能です。
記事とタグは多対多の関係にあるため、中間テーブル(post_tags)にて記事へ設定したタグの一覧を管理しています。

仕様上、ユーザーは記事に設定したタグを自由に付け外しできます。
既存のある記事にタグA・Bが設定されている状態で、新たにユーザーがタグBを外して、タグCを設定したとします。最終的に中間テーブルには記事とタグA・Cが紐付くデータが残ります。 この場合、中間テーブルのデータ更新のアプローチには大きく2つのアイディアが考えられます。

続きを読む

Cloud Run上でのexpressとhonoのパフォーマンス比較

最近、JavaScript界隈の盛り上がりがすごいですね。
zigで作られたJavaScriptのランタイムであるbunは、その便利さ・パフォーマンスの良さから驚くような勢いで広まっています。その一方で新たな軽量WEBフレームワークhonoも非常に注目されています。
honobun同様にパフォーマンスが良く、エッジサーバーでの実行を想定しているようで非常に軽量です。Cloudflare Workersを筆頭に、さまざまなランタイム上での動作をサポートしておりbunも対象です。

github.com

話は少し変わりますが、自分はJavaScript(Node.js)でマイクロサービスを作る際はexpressを脳死で選択してきました。
実行環境はプロジェクトの技術選定の制約がありCloud Runになることが多いです。しかし、現在となってはbunhonoといったexpressよりも軽量でパフォーマンスが良いとされる素晴らしいものが登場しています。
とはいえ、いきなり本番環境に採用するのは難しいため、今回は1つのエビデンスとなるようにCloud Run上で動作するexpresshonoのパフォーマンスを比較してみたいと思います。合わせてランタイムをbunにした場合のパフォーマンスも計測します。

続きを読む