dev.classmethod.jp 2日前

【MySQL】SELECT MAX(id) FOR UPDATEでID採番すると同時実行でデッドロックする理由を調べてみた

MySQL 8.4でSELECT MAX(id) FOR UPDATEによるID採番を並列実行するとデッドロックが発生する事象を検証。原因はレコードロックとギャップロック(末尾supremumへのロック)の取得順序がセッション間で交差するため。対策としてAUTO_INCREMENT、シーケンステーブル、GET_LOCKによるアドバイザリーロック、UUID採番の4方式を比較し、AUTO_INCREMENTかMySQL公式シーケンスパターンを推奨している。

MySQL 8.4でSELECT MAX(id) FOR UPDATEによるID採番を並列実行するとデッドロックが発生する事象を検証。原因はレコードロックとギャップロック(末尾supremumへのロック)の取得順序がセッション間で交差するため。対策としてAUTO_INCREMENT、シーケンステーブル、GET_LOCKによるアドバイザリーロック、UUID採番の4方式を比較し、AUTO_INCREMENTかMySQL公式シーケンスパターンを推奨している。
↗ 元記事を開く
zenn.dev 3日前

42日でバックエンドエンジニアの基礎を完全に理解する #17 - context(タイムアウト・キャンセル)

Go の context を使い、DBクエリのタイムアウトとクライアント切断のキャンセルをhandler/usecase/repositoryの3層に貫通させる方法を実験付きで解説。context なしでは接続断後もDBがクエリを実行し続けること、WithTimeoutでの期限管理、ctx.Err()による確実なタイムアウト判定、504返却の実装例までを扱う実践的なGo学習記事。

Go の context を使い、DBクエリのタイムアウトとクライアント切断のキャンセルをhandler/usecase/repositoryの3層に貫通させる方法を実験付きで解説。context なしでは接続断後もDBがクエリを実行し続けること、WithTimeoutでの期限管理、ctx.Err()による確実なタイムアウト判定、504返却の実装例までを扱う実践的なGo学習記事。
↗ 元記事を開く
tech.asoview.co.jp 3日前

フロントエンドに依存しない、より確実なGAイベント計測の実現 〜Measurement Protocol APIの活用〜

アソビューがGA(Google Analytics)のpurchaseイベント計測をフロントエンド依存から脱却させた事例。GTM経由の送信ではブラウザ環境やQR決済(PayPay/au PAY)特有のアプリ遷移で計測漏れが発生するため、Measurement Protocol APIを使いバックエンドから直接イベント送信する方式を導入。通常導線ではWorkerアプリが購入完了通知を非同期処理し、QR決済ではclient_idを事前にDBへ保存しておきポーリング自動完了時にも紐付けて送信することで、計測漏れを解消した。

アソビューがGA(Google Analytics)のpurchaseイベント計測をフロントエンド依存から脱却させた事例。GTM経由の送信ではブラウザ環境やQR決済(PayPay/au PAY)特有のアプリ遷移で計測漏れが発生するため、Measurement Protocol APIを使いバックエンドから直接イベント送信する方式を導入。通常導線ではWorkerアプリが購入完了通知を非同期処理し、QR決済ではclient_idを事前にDBへ保存しておきポーリング自動完了時にも紐付けて送信することで、計測漏れを解消した。
↗ 元記事を開く
zenn.dev 4日前

DMM Sprint Go に参加してきました🌟

学生がDMM Sprint Go(Go言語のバックエンド開発を学ぶ5日間のインターン)に参加した体験記。AIを使わずにYatterというSNSアプリのバックエンド実装に取り組み、オニオンアーキテクチャやcontextの扱い、CQRS等の設計判断を講師と議論しながら学んだ様子や、対面でのチーム開発・交流会を通じた学びが語られている。

学生がDMM Sprint Go(Go言語のバックエンド開発を学ぶ5日間のインターン)に参加した体験記。AIを使わずにYatterというSNSアプリのバックエンド実装に取り組み、オニオンアーキテクチャやcontextの扱い、CQRS等の設計判断を講師と議論しながら学んだ様子や、対面でのチーム開発・交流会を通じた学びが語られている。
↗ 元記事を開く
typebase.io 4日前

Show HN: Typebase – A single-folder back end you write in TypeScript

TypeScriptだけでバックエンドを書ける新ツール「Typebase」の紹介。アプリ内のtypebase/フォルダにスキーマ・サーバーアクション・認証を定義すると、型付きサーバーとしてVercel/Cloudflare Workers/Deno Deployにデプロイできる。RLSのような暗黙的でSQL依存の認可ではなく、コード上で明示的に権限チェックを行う点を特徴として訴求している。

TypeScriptだけでバックエンドを書ける新ツール「Typebase」の紹介。アプリ内のtypebase/フォルダにスキーマ・サーバーアクション・認証を定義すると、型付きサーバーとしてVercel/Cloudflare Workers/Deno Deployにデプロイできる。RLSのような暗黙的でSQL依存の認可ではなく、コード上で明示的に権限チェックを行う点を特徴として訴求している。
↗ 元記事を開く
zenn.dev 5日前

42日でバックエンドエンジニアの基礎を完全に理解する #15 - レイヤードアーキテクチャ② repository層

バックエンドエンジニア基礎学習連載の第15回。レイヤードアーキテクチャのうちrepository層の切り出しを扱い、データ出し入れ担当の役割・メソッド命名・エラーの返し方・書いてはいけない処理など設計上の勘所を解説する

バックエンドエンジニア基礎学習連載の第15回。レイヤードアーキテクチャのうちrepository層の切り出しを扱い、データ出し入れ担当の役割・メソッド命名・エラーの返し方・書いてはいけない処理など設計上の勘所を解説する
↗ 元記事を開く