Relational Data Base Management System の略。 日本語では、「リレーショナルデータベース管理システム」「関係データベース管理システム」と訳される。 DBMSの一種。RDBを構築・運用するために用いられる管理ソフトウェアのこと。 汎用RDBMS製品の例としては次のようなものがある。
ENECHANGE所属のエンジニア id:tetsushi_fukabori こと深堀です。 花粉症の大変厳しい季節、皆様いかがお過ごしでしょうか。 私は「あー」か「うー」しか発することができない生き物として日々を過ごしています。 スギ花粉の飛散を抑制する研究が一日でも早く結実することを願いこのブログを書いています。 いわゆるミッションクリティカルなシステムの構築に携わった皆様であれば百も承知かと思われますが、システムにおいてトレーサビリティは大変むずかしい課題です。 特に処理とデータのトレーサビリティ、つまり「この処理はどの状態のデータにアクセスしたか」は難しい課題かと思います。 今回はTe…
はじめに Raftについて 3つの状態 リーダー フォロワー 候補者 障害が起こると リーダー障害 フォロワー障害 ネットワークパーティション term simpledb-goでの設計方針 Raftログエントリの構造 ローカルWALとの関係 実装 リーダー選出 投票リクエストの処理 投票で失敗するケース データ複製のシーケンス フォロワー側のログ取り込み FSM(Finite State Machine) 障害シナリオ 1. リーダーのネットワーク障害 2. 過半数に複製される前にリーダー死亡 3. 過半数に複製が成功したがクライアントへのレスポンス前にリーダー死亡 他にも... 実際に動かし…
はじめに 前回はDatabase Design and Implementation: Second EditionをもとにGoで再実装したsimpledb-goについて紹介しました。このDBには簡素なB-treeインデックスを実装したため、今回は実際に読み取り性能がどれくらい向上するのか計測してみました。せっかくインデックスを作ったからには、ちゃんと効果を確認したいところです。 github.com ベンチマークツールを作成し、インデックスの有無によるSELECT性能の違いを調べていきます。 simpledb-goのインデックス まずsimpledb-goに実装してあるB-tree Inde…
普段業務で色々なデータベースを触っていると、こいつの中身はどうなっているんだろうと気になることがあります。そんなわけでDatabase Design and Implementation: Second Editionという書籍をもとに、Go言語でRDBMSを自作しました。本書はJavaで書かれていますが、そのまま写経するのは面白くないのでGoでリライトしています。 出来上がったもの: github.com CREATE TABLE / INDEX / VIEW、SELECT、INSERT、UPDATE、DELETEといった基本的なSQLが実行できます。書籍では終盤GROUP BYやクエリ最適…
はじめに JSON 型の基礎知識 内部的な処理について INSERT 時の挙動 SELECT 時の挙動 バイナリフォーマットを採用している理由 SQL 例 前提となるテーブル設計 通常の SELECT 文 通常の INSERT 文 JSON_OBJECT を使用 文字列を使用 JSON_EXTRACT ( JSON 内の値で検索条件を定義し、一致するレコードを抽出する) JSON_CONTAINS_PATH ( 指定したパスが存在するレコードを抽出する) JSON_KEYS (カラムに存在する key を抽出する) JSON_SET ( JSON 内の値を部分的に更新する) JSON_REMO…
ゆるく書く 約6年くらいずっとRDBMSはMySQLを使ってきてたけど、Postgresを触る機会があって「すげー!こんな機能MySQLにも欲しかった!」と思った機能をMySQL onlyなユーザー向けにどういうものかを健忘録も含めて書いてみる MySQLのシンプルさに慣れてしまっているのでOracleDBとか使ったら高機能さに目ん玉飛び出るんじゃないかと思うのでいつか使ってみたい RLS (Row Level Security) 今回のPJでポスグレを採用した理由でもあるRLS DBレベルでよりセキュアに設計できるので安心感がある CREATE TABLE accounts (manager…
日付の範囲指定は業務アプリでよく使う、特に「1日分を絞り込む」処理、でもBETWEEN を使うと、DBの精度次第で“漏れ”が発生するリスクがある!
関係データモデル(Relational Data Model)とは? 関係データモデルとは、データを「関係(Relation)」=表形式の構造で表現するモデルであり、現在広く使われているリレーショナルデータベース(RDBMS)の基礎となる理論である。1970年にE.F.コッド(Edgar F. Codd)によって提唱され、構造化された情報の管理と操作を可能にする。 関係データモデルの導入が大きな効果を発揮した一例として、ある地方自治体の文書管理システム刷新プロジェクトがある。従来はExcelファイルで管理されていた「文書」「担当部署」「作成者」「更新履歴」などの情報を一元化することが目的だった…
ーーーー講義録始めーーーー データベースを利用する利点とNoSQLの登場 ここで改めて、なぜデータベースを使用することが望ましいのか、およびどのようなメリットがあるのかについて簡単に説明します。 データベースを使用する利点 データベースを用いる主な利点としては、次のような点が挙げられます。 管理上の無駄の削減とデータ整合性の確保 データベースを使用すると、扱うデータが一元化されます。これにより、管理上の無駄が省かれるだけでなく、適切な制約を定義することでデータの矛盾を防ぎ、整合性が維持されます。 具体例として、大学の教務課、学生課、経理課など各部局がそれぞれ学生名簿を表計算ソフトで管理している…
ーーーー講義録始めーーーー 代表的なデータモデルとしては、階層データモデル、ネットワークデータモデル、リレーショナルデータモデル、およびオブジェクト指向データモデルがあります。ここでは、現在主流となっているリレーショナルデータモデルの例を示します。 以下の表は、教育機関における学生と学部のデータを表現しています。 リレーション(学部) 学部コード 学部名 1001 文学部 1002 理学部 リレーション(学生) 学生番号 氏名 所属学部 220001 山田太郎 1001 220002 佐藤花子 1002 このように、リレーショナルデータモデルは、表形式で表現されるリレーションと呼ばれる集合で構…