Relational Data Base Management System の略。 日本語では、「リレーショナルデータベース管理システム」「関係データベース管理システム」と訳される。 DBMSの一種。RDBを構築・運用するために用いられる管理ソフトウェアのこと。 汎用RDBMS製品の例としては次のようなものがある。
エキサイトの武藤です。 エキサイトホールディングス Advent Calendar 2022の14日目の記事です。 https://qiita.com/advent-calendar/2022/excite-hd 担当しているサービスのランキング機能のリビルドを行いました。 実現するにあたって、考慮したところを紹介します。 どのようなランキングか? 記事メディアを前提として、ランキングの仕様を説明します。 下記の仕様を想定します。 記事ごとのPVやいいね数を集計したランキング 日次更新 以前のランキング機能のシステム概要 以前のランキング機能のシステム概要について説明します。 まず、バッチが集…
HottyDB という検索エンジンとレコメンドエンジンの機能を搭載したRDBMSを開発し、α版を公開しました! www.hottydb.com ので、この記事ではHottyDBの概要と導入事例について紹介したいと思います! 概要 HottyDBとは? HottyDBとは、検索エンジンとレコメンドエンジンの機能を搭載したRDBMS(リレーショナルデータベース)です。 SQLを用いた通常のデータ操作に加え、文書の全文検索や検索結果の機械学習ランキング(MLR)・アイテムレコメンデーションのロジックなどを全て1つのソフトウェアで担います。 1つのソフトウェアでこれらを実現することで、面倒なデータ伝送…
違法すれすれの『ライン上』に位置する設計 代理キー:主キーが役に立たない時 ケース1:入力データに主キーになるような一意キーが存在しない ケース2:一意キーはあるが、サイクリックに使いまわされる ケース3:一意キーはあるが、途中で指す対象が変化する 代理キーによる解決 自然キーによる解決 列持ちテーブル アドホックな集計キー 多段ビュー データクレンジングの重要性 参考 違法すれすれの『ライン上』に位置する設計 上手に使えば論理設計に効果があるが、間違った使い方をすると運用に支障をきたすといった、『バッドノウハウ』ではないが『グレー』な設計方法について学ぶ。メリデメを理解した上で利用することが…
論理設計の『やってはいけない』 非スカラ値(第一正規形未満) ダブルミーニング 単一参照テーブル テーブル分割 水平分割 垂直分割 テーブル分割の代替手段 不適切なキー ダブルマスター 参考 論理設計の『やってはいけない』 戦略の失敗を戦術で取り返すことはできない という有名な言葉があるらしい。システム開発における戦略は設計で、プログラミングは戦術に相当する。つまり、プログラムの品質を決めるのは設計になる。そんな設計において品質を致命的なレベルで損なってしまうバッドノウハウ(アンチパターン)を学ぶ。 非スカラ値(第一正規形未満) 第一正規系未満(セルにデータは1つ)のテーブルも存在する。例えば…
RDBMSの論理設計の基本の概念は正規化であり、それは『データ整合性を保持する』ために行っている。一方で正規化による背反として、『SQLのパフォーマンス劣化』を引き起こす。 正規化を行うと基本的にテーブルが増えていく。よって、SQL文を実行する際には、結合(JOIN)が必要になるが、この結合がSQL文の処理としては高コストなものになるため、多用するとSQL文の速度が悪化する。 その対処法に非正規化があるが、『正規化によるデータ整合性』と『非正規化による検索パフォーマンス』はトレードオフの関係のため、最良策にはならない。 『じゃあ、どうするの🤔』ってことだけど、原則として非正規化は許さないという…
テーブルの関連のパターン ER図の描き方 参考 テーブルの関連のパターン 同じ意味の列を持つテーブル同士の間には、通常次の3パーンの関連がある。 1対1(1:1) 『1対1』というのはほぼ見ないらしい。理由は2つのテーブルのレコードが1対1に対応するというのは、主キーが一致するケースなので、通常1つのテーブルにまとめても問題ないため。よって、正規化の過程で『1対1』のテーブルが作られることは無い。 1対多(1:N) 『1対多』は最もよくある関連のタイプ。正規化によって作られる関連の多くはここに属する。 多対多(N:N) 『多対多』は特殊なカテゴリで、RDBMSでは『多対多』の関連は作っていけな…
テーブル設計の流れ 図書館の予約申込書 メインとなるテーブル名を出す(イベント系エンティティを洗い出す) 「誰が・何が」、「誰を・何を」を考えてテーブル名を出す(リソース系エンティティを洗い出す) 各テーブルのカラムを出す 表現できていない情報を、テーブルにするか、カラムに追加するかを考える 関連を入れる 制約とデフォルト値とINDEXを考える 参考書:解答例 参考 テーブル設計の流れ テーブル設計の流れの概要にめちゃくちゃわかりやすくテーブル設計の手順が書かれていたので記載。これをベースに作業を進める。 メインとなるテーブル名を出す 「誰が・何が」を考えてテーブル名を出す 「誰を・何を」を考…
ウィンドウ関数 ウィンドウ関数は、ランキング、連番生成等の集約関数で通常できないような操作をする際に用いる。別名としてOLAP関数(OnLine Analytical Processing)とも呼ばれ、データベースをリアルタイムに処理して、オンラインでデータ分析などを行う際に使用する。よって、ウィンドウ関数は、OLAP用途のために、SQLに追加された機能。 具体的にどんなものかというと次のようなもの。 ウィンドウにすることの旨味としては、区切られたウィンドウ内でデータを操作できる点。ウィンドウ関数の構文は次のようになっている。 ウィンドウ関数 OVER ([PARTITION BY 列リスト]…
テーブルの足し算と引き算 UNION:テーブルの足し算 INETRSECT:テーブルのAND EXCEPT:レコードの引き算 テーブルを列方向に連結する 内部結合 外部結合 クロス結合 参考 テーブルの足し算と引き算 2つ以上のテーブルを使う場合のSQL文を学ぶ。テーブルのレコード同士を足したり引いたりするのが集合演算子。次の集合演算子についてまとめる。 UNION:テーブルの足し算 INTERSECT:テーブルの共通部部分の選択 EXCEPT:レコードの引き算 次のテーブルに対して色々操作してみる。 UNION:テーブルの足し算 UNIONはテーブルの『和集合』をとる。ベン図で示すと次の通り…
ビューとテーブル ビューの旨味 ビューを使う ビューを作る ビューを実行する ビューを削除する サブクエリ スカラ・サブクエリ 相関サブクエリ 参考 ビューとテーブル テーブルを作る(CREATE TABLE)、検索する(SELECT)、更新する(INSERT,DELETE,UPDATE)を学んだが、新しい知識としてビュー(VIEW)を学ぶ。 ビューとは、『SELECT文を保存したもの』と覚えておけば良さそう。テーブルではデータを保存するが、ビューではSELECT文を記録する、つまり検索文を記憶したようなもの。検索文を記憶しておくと、その実行結果としてはテーブルデータが返ってくる。よって見た目…
書籍には、特定領域の専門家たちが習得してきた知識のエッセンスが詰まっています。だからこそ「本を読むこと」は、ITエンジニアがスキルを向上させるうえで効果的な取り組みといえます。では、著名エンジニアたちはこれまでどのような書籍を読み、そこから何を学んできたのでしょうか。今回は8人の著名なエンジニアのキャリアに影響を与えた“珠玉の書籍”を、ご本人にまつわるエピソードとともに紹介してもらいました。 *…人名の50音順に掲載。回答者は敬称略。 岡野真也が紹介『こんにちはマイコン』 すがやみつる先生の『こんにちはマイコン』は、私が小学生だった約30年前に図書室で出会った書籍です。本書はコンピューターの基…
KanmuでPoolを開発しているhataです。最近、ロボット掃除機を買いました。ロボと猫がじゃれている景色はいいですね。 今回はGoのユニットテストの並行化についての記事です。 TL;DR Goのテストは、並行化することでテスト実行時間の短縮やテスト対象の脆弱性の発見などのメリットがある 基本的にはそのままでも最適化されているが、テストコードにt.parallelを記述することでよりきめ細やかな最適化を施すことができる ただし、一定規模以上のアプリケーションへの導入・運用は大変 テストコードを一気に並行化するtparagenというツールや、並行化忘れを防ぐ静的解析ツールがあり、これらを使うこ…
G-gen の杉村です。Google Cloud のフルマネージドな分析用データベースである BigQuery について、徹底的に解説します。当記事は基本編であり、当記事を読み終わったあとは応用編もご参照ください。 概要 BigQuery とは 利用方法 フルマネージド (サーバーレス) 他の Google Cloud サービスとの連携 他クラウドサービスとの連携 料金 料金体系の基本 ストレージ料金 ストレージ料金の基本 Physical Storage と Logical Storage Active Storage と Long-term Storage コンピュート料金 無料枠 コンポ…
Cloudflare Worker + D1 + Hono + OpenAIでLINE Botを作るを見て、Cloudflare Workersに興味を持った。そこでLINEで英会話や添削ができるbotを作ってみた。 作ったもの こんな形で英会話をしたり、英作文テーマを作ってくれたり、添削をしてくれたりする。 実際のコードは https://github.com/shibayu36/english-line-bot 。このコードをforkしてもらって、LINEチャネルの作成、Cloudflareへのデプロイ、src/prompt.tsのカスタマイズをすると、自分用のLINE botも作れると思…
こんにちは、SRE&プラットフォームグループの和田です。LegalOn Technologiesでは、2019年4月に「LegalForce」、2021年1月に「LegalForceキャビネ」を正式リリースして以来、毎月機能アップデートをしています。また、リリース初期段階では予期できなかった技術的な課題に対処するために、バックエンドやインフラの改善も進めています。このような取り組みの中で、DBスキーマの更新も多数発生してきました。「LegalForce」では、シーケンシャルなDBスキーマ管理を採用していましたが、運用面での懸念が顕在化していました。一方、「LegalForceキャビネ」は、No…
「えっ、SQLite3ってこんな仕様なの!?」と最近ビックリしたことを紹介します。 たとえばこんな2つのテーブルがあったとします。 CREATE TABLE blogs ( id int primary key, title varchar(32) ); CREATE TABLE comments ( id int primary key, content varchar(32), blog_id int, foreign key (blog_id) references blogs(id) ); ポイントはcommentsテーブルのblog_idにはblogs(id)への外部キー制約が貼って…
https://namonakimichi.hatenablog.com/entry/2023/05/15/225621 で書いてたやつなんですが、間に合わなかったので次回に向けて書くことにします。 どんな本を書きたかったかだけ、下記に置いとくので良かったらご意見ください。 また楽しみにしていた皆さんは本当に申し訳ございません。私自身も4月体調不良が続き5月はGWも休まずgitの本書いて、こちらも構想だけまとめて色々なものを削って書いてましたが、現実的に無理でした。 背景 今のWeb構成において、とてもベーシックな3層構造のアーキテクチャが合致してないように感じる。 それをもう少し分解していっ…
さい データベーススペシャリスト試験を受験する方向けに、午前Ⅱ対策を中心としたチートシートを用意しました。 こちらは、あくまで試験合格を目的とした内容になっていますので、きちんと学習したい方は、過去問題解説ページ等をご覧ください。 当ページの内容は動画(YouTube)でも公開していますので是非ご利用ください。 午前 午後 速報 (adsbygoogle = window.adsbygoogle || []).push({}); 試験別 午前Ⅰ 同時開催の応用情報技術者試験午前問題と同じ問題が出題されます。(80問中30問)よって、対策は応用情報技術者のページを参考にしてください。 なお、午前…
かなり前にOracle9iR2環境で、IN句を含んだSQLの性能問題に遭遇した時のことをふと思い出したので、そのときのSQLの実行計画を再現させて、色々調べてみた。
RDBMSが二つの表を結合する方法のうち,ソートマージ結合法に関する記述はどれか。 一方の表の結合する列がインデックスに含まれている場合,もう一方の表の結合する列とインデックスの値で結合する。 一方の表の結合する列の値でハッシュ表を作成し,もう一方の表の結合する列と結合する。 一方の表の結合する列の値を順に読み出し,もう一方の表の結合する列と結合する。 結合する列の値で並べ替えたそれぞれの表の行を,先頭から順に結合する。 解答・解説 (adsbygoogle = window.adsbygoogle || []).push({}); 解答 エ 解説 ー 一方の表の結合する列がインデックスに含ま…
RDBMSの機能によって実現されるトランザクションの性質はどれか。 ACID特性 関数従属性 候補キーの一意性 データ独立性 解答・解説 (adsbygoogle = window.adsbygoogle || []).push({}); 解答 ア 解説 ー ACID特性ー 関数従属性ー 候補キーの一意性ー データ独立性ー 参考書・問題集 参考情報 分野・分類 分野 テクノロジ系 大分類 技術要素 中分類 データベース 小分類 トランザクション処理 出題歴 FE 平成29年度秋期 問29 前問 一覧 次問
RDBMSのロックの粒度に関する次の記述において,a,bの組合せとして適切なものはどれか。 a b ア 行 行 イ 行 表 ウ 表 行 エ 表 表 解答・解説 (adsbygoogle = window.adsbygoogle || []).push({}); 解答 ウ 解説 ー ーー ーー ーー ーー 参考書・問題集 参考情報 分野・分類 分野 テクノロジ系 大分類 技術要素 中分類 データベース 小分類 トランザクション処理 出題歴 FE 平成30年度春期 問30 前問 一覧 次問
スマレジの テックファーム(SES 部門) でWebエンジニアとして働いている やまて(@r_yamate) と申します。 実務では、2023 年 3 月末で SES の派遣先で、テーブルオーダーシステムの機能改修業務の設計などを担当していた業務を終えたところです。 4月からは、スマレジの関連アプリの開発業務を担当しています。触ったことのなかった Flutter での開発で、日々奮闘中です。 はじめに 今回は、 SES の初めての現場での経験を振り返り、そこで学んだことや感じたことを書きたいと思います。 期間としては 2022 年 3 月から 2023 年 3 月までの約1年間、担当はテーブル…
タイトルの通りRDBMSをGo言語で自作してみました。 GitHub - ue-sho/ohako: 自作DBMS はじめた動機 自分は業務ではNoSQL(DynamoDB)しか使ったことがなく、RDBMSは遊びで触ったことしかなかったです。 それもORMを使っていたため、特に仕組みを詳しく知ることなく扱っていました。 エンジニアとしてそれはまずいと思い、自作RDBMSを作って中身を知っていこうと考えました。 使ってみたい言語だったので実装はGo言語でやっています。 やったこと 最初は簡単な概要を知るために、データベースシステム自作入門を読んで簡単に実装してみました。 著者はセキュリティキャン…
気づいたら入社して 8 年も経っていた。 2022 年の 4 月にアプリケーションエンジニアへ転向したので、その経緯や転向してやったこと、今やっていることをまとめてみる。 転向の経緯 自分で作りたいものを作りたかったからというのが一番大きい。 アイレットに入社してから 7 年間インフラエンジニアとして生きてきて、ほぼ毎日楽しく業務に励んでいた。5 年目くらいから「あーこれつくれたら便利だな」という場面に何度も遭遇した。 例えば、日々の業務を効率化するような Web アプリケーションや CLI、内部向け API などあったら便利なモノだ。 「よしつくったろ!」と意気込むも手が進まず、最終的には諦…