databaseに関するryosuke-fujiiのブックマーク (31)

  • 実践Immutable Data Model - 紙箱

    ランキング参加中プログラミング はじめに この記事では、Immutable Data Modelと呼ばれる設計手法をもとに、リレーショナル・データベースにおける、テーブル設計の話を書いています。また、今回の実践で利用する、別の考え方の背景を理解するために、Out of the tar pitという小論文の内容にも言及します。 「状態とは何か?」というややこしい話がたくさん出てきますし、データベースのテーブル設計についての話であることから、たくさんのSQLが出てきます。なので、データモデリングとか状態管理とか、特にSQLとかに興味がない人には面白くないと思います。 そのあたりに興味ある方は、読んでみて欲しいです。 Immutable Data Modelを、実際のアプリケーションで使うデータベースに採用するにあたり、どういう考え方で、どのようにテーブルを構成したか、自分なりの経験を書いていま

    実践Immutable Data Model - 紙箱
  • データベース設計の際に気をつけていること - 食べチョク開発者ブログ

    皆さんこんにちは、エンジニアの西尾です。 新しい機能・サービスを開発する際、私は特にデータベース設計に気をつかいます。 データベースはシステムの土台です。 土台が不安定だと、その上に積み上げていくアプリケーションコードがいびつなものになり、つらい思いをします。 また、一度動き出してしまったシステムのデータベース設計を変えるのは、容易なことではありません。 データベース設計には”これだ!”という正解はないと思っています。 サービスの特徴、システムの性質、toB向け/toC向け、Readが多い・少ない、Writeが多い・少ない。 その他もろもろの背景により、データベース設計の仕方も変わってきます。 このテーブルは正規化していないから駄目だ、この設計はいわゆるポリモーフィック関連だから使ってはいけない、などということはありません。 アンチパターンと呼ばれるものも時と場合によっては正解になります。

    データベース設計の際に気をつけていること - 食べチョク開発者ブログ
  • GitHub、1200台以上のMySQL 5.7を8.0へアップグレード。サービス無停止のまま成功させる

    GitHub、1200台以上のMySQL 5.7を8.0へアップグレード。サービス無停止のまま成功させる GitHubが提供するGitHub.comは、世界最大のソースコード管理システムを始めとするソフトウェア開発者向け支援サービスを提供しています。 そのGitHub.comはRuby on Railsで構築されており、同社はつねにRubyRuby on Railsをアップデートし続けていることを今年(2023年)4月に明らかにしています。 参考:GitHubは200万行規模のRailsアプリケーションであり、毎週RailsRubyを最新版にアップデートし続けている そして同社はこのGitHub.comを支える1200台以上のMySQL 5.7を、GitHub.comのサービスレベルを維持したまま1年以上かけてMySQL 8.0にアップグレードしたことをブログで明らかにしました。 Up

    GitHub、1200台以上のMySQL 5.7を8.0へアップグレード。サービス無停止のまま成功させる
  • PrismaでRLSを使う

    はじめに ここ一年ほどはDBクライアントを書くときにORMのPrismaを使っていますが、テーブル定義を書きやすかったりコード補完がバチバチに効いてくれたりと非常に気に入ってます。 そんなPrismaでPostgreSQLのRLS(Row Level Security)を使う時の設定について紹介します。 RLSのしっかりした説明はしていません🙇 以下のレポジトリにサンプルがあります。このサンプルに基づいて紹介していきます。 この記事では、以下の手順でRLSの設定をしていきます。 RLSをかけるDBユーザの追加・設定 Prismaスキーマファイルの作成 RLS定義マイグレーションファイル作成 Prisma Extensionsの定義 RLSが有効になったPrisma Clientを使う RLSをかけるDBユーザの追加・設定 まずは、RLSをかけるDBユーザを追加します。アプリケーションから

    PrismaでRLSを使う
  • 排他制御における楽観ロックと悲観ロックについて – Rainbow Engine

    <目次> (1) 排他制御における楽観ロックと悲観ロックについて (1-1) 楽観的排他制御 ●概要・仕組み ●イメージ図 ●楽観的排他制御で起こり得る問題 (1-2) 悲観的排他制御 ●概要・仕組み ●イメージ図 ●楽観的排他制御で起こり得る問題 (1) 排他制御における楽観ロックと悲観ロックについて システムにおいて、例えば「誰かが編集している明細を、別の人が開いた時には『読み取り専用モード』で開く、といった要件があった場合、「排他制御」の導入が必要となってきます。今回はその排他制御の種類である「楽観的排他制御」と「悲観的排他制御」の概要についてご紹介します。 (1-1) 楽観的排他制御 ●概要・仕組み

  • 排他制御(楽観ロック・悲観ロック)の基礎  - Qiita

    排他制御とは 共有資源(データやファイル)に対して複数のアクセスが見込まれる場合に、同時アクセスにより不整合が発生することを防ぐため、あるトランザクションが共有資源(データやファイル)にアクセスしている時は他トランザクションからはアクセスできないようにして直列に処理されるように制御すること。 ■同時アクセスによる不整合の例 ■排他制御をすることで整合性を保つ 排他制御の方式 排他制御の実現方式はいくつか存在するが、ここでは代表的な楽観ロック(楽観的排他制御)と悲観ロック(悲観的排他制御)を紹介する。 楽観ロック(楽観的排他制御) 楽観ロックとは、めったなことでは他者との同時更新は起きないであろう、という楽観的な前提の排他制御。データそのものに対してロックは行わずに、更新対象のデータがデータ取得時と同じ状態であることを確認してから更新することで、データの整合性を保証する方式。楽観ロックを使用

    排他制御(楽観ロック・悲観ロック)の基礎  - Qiita
  • 複雑なデータベースの知識は一切不要、気にするのはエンドポイントだけ 開発の生産性を高める「TiDB Serverless」の各種機能

    真のサーバーレスアーキテクチャについて語り、最新のエッジコンピューティングや生成系AIのサーバーレス実装を学び、クラウドネイティブで高速な開発プラクティスと向き合う2日間「ServerlessDays Tokyo 2023」。ここで登壇したのは、PingCAP株式会社の関口匡稔 氏。同社が開発する、オープンソースの分散型データベース「TiDB Serverless」について発表しました。全2回。後半は、TiDBを使ったアプリケーションのサンプル「OSS Insight」とChatGPTの機能「Chat2Query」について。前半はこちらから。 TiDBを使ったアプリケーションのサンプル「OSS Insight」 ここまで、TiDB Serverlessをどうやって作っていったかというコンセプトをご紹介してきました。ここから、TiDB Serverlessを実際に使ってみたという話をしたいと

    複雑なデータベースの知識は一切不要、気にするのはエンドポイントだけ 開発の生産性を高める「TiDB Serverless」の各種機能
  • イミュータブルデータモデル(世代編)

    第1回 しょぼべん ( http://connpass.com/event/10849/ ) で話しした、イミュータブルデータモデル(世代編)です。Read less

    イミュータブルデータモデル(世代編)
  • イミュータブルデータモデル(入門編)

    [B23] 事例で語る、社会インフラを支えるNonStop SQL ~見えないところで凄いんです~by Tetsuya ShinoharaInsight Technology, Inc.

    イミュータブルデータモデル(入門編)
  • 変更履歴を持つテーブルの設計 - Qiita

    ある日のできごと 少し前、「ブログの記事のようなものを、履歴を残しつつ編集できるようにするにはどのようなテーブル設計が良いか?」と尋ねられたことがありました. その時, まず思いついた(というか見聞きしたことがある方法)のは以下の様な2通りの方法だった. 記事テーブルにバージョン番号を持たせる方法 記事テーブルとは別に, だいたい同じ構造の履歴テーブルを持つ方法 こられの手法のメリット・デメリットについて, すこし考えていきたいと思います. その1 記事テーブルにバージョン番号を持たせる方法 概要 この方法では, 記事テーブルは一つだけ用意し, 更新される度に新しいレコードを追加していきます. 主キーはidとなるが, これはサロゲートキーで, 当の主キーは「記事グループid + verison」の複合主キーとなっています. 記事の最終更新日時は, 最新Versionのレコードのinser

    変更履歴を持つテーブルの設計 - Qiita
  • 24時間365日動き続けるデータシステムの設計手法 : 「データ指向アプリケーションデザイン」実践編

    「データ指向アプリケーションデザイン」をベースに、24時間365日動き続けるデータシステムを実装する際に必要となる技術や考え方を紹介します。 この資料は、2023大阪大学大学院 情報科学科 マルテメディア工学特別講義で使われた資料を一般用に修正して公開しています。 参考: 「30分でわかるデータベースデザイン」https://speakerdeck.com/xerial/30fen-dewakarudetazhi-xiang-apurikesiyondezain-data-engineering-study-number-18

    24時間365日動き続けるデータシステムの設計手法 : 「データ指向アプリケーションデザイン」実践編
    ryosuke-fujii
    ryosuke-fujii 2023/10/15
    むずい
  • 最強データベース(RDB)設計とは?アンチパターンの見極め方法も - FLEXY(フレキシー)

    ※2020年6月に公開された記事です。 日PostgreSQLユーザ会の理事を務める合同会社Have Fun Tech起業した曽根壮大(@soudai1025)と申します。元株式会社オミカレ副社長兼CTOです。直近では、『失敗から学ぶ RDBの正しい歩き方』を執筆しました。 今回はデータベースをテーマとして、魅力やMySQLとPostgreSQLの違い、アンチパターンの見極めなどの基礎知識に加え、勉強法などもご紹介します。 RDB関連の求人検索はこちら データベースを学ぶ魅力をエンジニア目線で考察 1.知識の費用対効果が高い エンジニアがデータベースを学ぶ利点という観点から言うと、データベースの特徴は寿命が長いことと私は考えています。 Webアプリケーションの界隈では1年単位でバージョンアップしたり流行っている言語が変わってしまうことがザラにありますが、データベースは10年、20年とい

    最強データベース(RDB)設計とは?アンチパターンの見極め方法も - FLEXY(フレキシー)
  • アジャイル開発とデータベース設計 - 変化に対応するシンプルな実装のために必要なこと - Agile Journey

    はじめまして。そーだい(@soudai1025)です。私は普段は技術コンサルティングや受託開発を請け負う合同会社HaveFunTechの代表として、また、予防治療の自社サービスを展開する株式会社リンケージのCTOという二足の草鞋を履き、日々、さまざまなWebサービスの開発に携わっています。 これまでの開発経験のなかで、データベース設計に関わるさまざまな問題に遭遇してきましたが、稿ではとくに、アジャイル開発時に発生しやすい問題とその対処についてお伝えしたいと思います。開発の現場で目にしやすい実装におけるアンチパターンを示しつつ、アジャイルという指針を維持しながら、対処となるデータベース設計についてご紹介します。 会員登録のアンチパターンと処方箋 イージーな実装とシンプルな実装 Userと言う名の罠 拡張と破綻 データベースは変化に弱い 仕様変更とテーブル変更 Addで変化に追従する 正規化

    アジャイル開発とデータベース設計 - 変化に対応するシンプルな実装のために必要なこと - Agile Journey
  • データベースを遅くするための8つの方法

    はじめに Twitterのタイムラインを見ていたらバッチ系のプログラムで逐次コミットをやめて一括コミットにしたら爆速になったというのを見ました。当たり前でしょ、と思ったけど確かに知らなければ分からないよね、と思って主に初心者向けにRDBを扱うときの注意点をまとめてみました。 プログラミングテクニック的なところからテーブル設計くらいの範疇でDBチューニングとかは入ってないです。 自分の経験的にOracleをベースに書いていますが、他のRDBでも特に変わらないレベルの粒度だと思います。 大量の逐次コミットをする バッチアプリケーションでDBにデータをインサートすると言うのはかなり一般的な処理です。しかしデータ量が少ない時はともかく大量のインサートを逐次コミットで処理するとめちゃくちゃ遅くなります。数倍から十数倍遅くなることもあるので、10分程度のバッチが1時間越えに化けることもザラにあるので原

    データベースを遅くするための8つの方法
    ryosuke-fujii
    ryosuke-fujii 2023/07/29
    スケーラビリティを高くするためには、並列処理を妨げるUPDATE処理をいかになくすかだなぁ
  • RDBでツリー構造を実現する | オートロ株式会社

    Tutorial Advent Calendar 22日目、エンジニアの吉野です。 先日、Rails でツリー構造に触れる機会があり、その際に初めて知ることが多くありました。今回はその際に得られた知見を共有させていただこうと思います。 ツリー構造って何?まず、ツリー構造(木構造)とはなんのことでしょうか? Wikipediaによると 木構造(きこうぞう)とは、グラフ理論の木の構造をしたデータ構造のこと。だそうです。下に示した組織図のように、ある要素から派生して階層構造が成り立っているものを、木が根から葉へと広がっていく様子になぞらえてツリー構造と呼んでいるわけですね。 身近なところでイメージしやすいのは、パソコンのフォルダで見られる階層構造もツリー構造にあたります。 RDB でツリー構造を実現する方法MySQL や PostgresQL といった、Web アプリケーション開発でよく用いられ

    RDBでツリー構造を実現する | オートロ株式会社
  • Cloud Spanner を徹底解説! - G-gen Tech Blog

    当記事は みずほリサーチ&テクノロジーズ × G-gen エンジニアコラボレーション企画 で執筆されたものです。 G-gen の片岩です。Google Cloud の Cloud Spanner について徹底解説します。Cloud Spanner は強整合性を持ちながらグローバルな負荷分散が可能なサービスです。高い可用性、データの完全性が求められる金融分野での活用が見込まれるサービスであり、仕様を調査することにしました。 Cloud Spanner の概要 Cloud Spanner とは 強整合性と結果整合性 水平スケーリング インターフェイス SQL API クライアント ユースケース Cloud Spanner が適したケース 代表的な事例 類似サービスの使い分け Cloud SQL AlloyDB Cloud Spanner 料金 インスタンスと構成 インスタンス リージョン構成/

    Cloud Spanner を徹底解説! - G-gen Tech Blog
  • Cloudflare、CDNエッジで稼働するSQLiteベースのRDB「Cloudflare D1」発表。ユーザーの近接CDNエッジに自動でレプリカを分散配置、高速アクセスを実現

    Cloudflare、CDNエッジで稼働するSQLiteベースのRDBCloudflare D1」発表。ユーザーの近接CDNエッジに自動でレプリカを分散配置、高速アクセスを実現 CDNベンダのCloudflareは、同社のCDNエッジ上にSQLiteベースのRDBサーバ機能を提供する新サービス「Cloudflare D1」を発表しました。同社にとって初めてのデータベースサービスです。 Today, we’re excited to announce D1, Cloudflare’s first SQL database, designed for Cloudflare Workers. https://t.co/KwehTYQhEt #PlatformWeek — Cloudflare (@Cloudflare) May 11, 2022 Cloudflare D1はマネージドサービスと

    Cloudflare、CDNエッジで稼働するSQLiteベースのRDB「Cloudflare D1」発表。ユーザーの近接CDNエッジに自動でレプリカを分散配置、高速アクセスを実現
    ryosuke-fujii
    ryosuke-fujii 2023/06/10
    CDNエッジがリードレプリカを持つことで読み込みは速くなるんだろうけど、書き込みはプライマリデータベースへアクセスする?から速くならない?
  • RDB - 実例で学ぶ、JOIN (NLJ) が遅くなる理屈と対処法 - Qiita

    "Nested Loop Joinしか取り上げて無いのにタイトルが大きすぎないか" と指摘を頂いたので、タイトルを修正しました。Merge JoinとHash Joinのことはまた今度書こうと思います。 「JOINは遅い」とよく言われます。特にRDBを使い始めて間がない内にそういう言説に触れた結果「JOIN=悪」という認識で固定化されてしまっている人も多いように感じています。 たしかに、JOINを含むようなSELECT文は、含まないものに比べて重たくなる傾向があることは事実です。また、質的に問い合わせたい内容が複雑で、対処することが難しいものも存在します。しかし、RDBの中で一体どういうことが起きているのかを知り、それに基いて対処すれば高速化できることも少なくないと考えています。 稿では、JOINの内部動作を解説した上で、Webサービスを作っているとよく出てくるJOIN SQLを例題に

    RDB - 実例で学ぶ、JOIN (NLJ) が遅くなる理屈と対処法 - Qiita
  • 5.8. 行セキュリティポリシー

    ryosuke-fujii
    ryosuke-fujii 2023/04/09
    公式のRLSの説明。ポリシーの条件には、副問合せを使えるが、なるべくシンプルが良い。
  • PostgreSQLのRow Level Securityを試す - Qiita

    概要 ・マルチテナントのテナント分離の実現方法の1つとしてRDBMSのRow Level Securityを使う方法がある ・PostgreSQLで試してみる 環境 ・macOS Catalina ・PostgreSQL 13.3 検証用データベース作成 ・PostgreSQLcreatedbコマンドを使う $ psql -l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-----------+----------+---------+-------+----------------------------- postgres | x.xxxxxxx | UTF8 | C | C | practice | x.xxxxxxx | UTF8 | C |

    PostgreSQLのRow Level Securityを試す - Qiita
    ryosuke-fujii
    ryosuke-fujii 2023/04/09
    app.tenant_idの設定値でRLSを行う方がよさげ。