フリーランスエンジニアをしているrevenue-hackです! 普段はGo言語でバックエンドを中心にやっています〜 ↓登壇したときの資料です! より図を入れて詳しく書いております! 今回はデータベースの特にRDBの仕組み(アーキテクチャ)についてざっくり理解して、なにかに役立てようぜ〜 というような内容になります。 ↓記事はこちらに移しました!↓
![データベースの仕組み(アーキテクチャ)をざっくり理解する](https://cdn-ak-scissors.b.st-hatena.com/image/square/fbf55e58d74b08ba7cff704c48d8aac9df8644f0/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--zoMx90ae--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E3%252583%252587%2525E3%252583%2525BC%2525E3%252582%2525BF%2525E3%252583%252599%2525E3%252583%2525BC%2525E3%252582%2525B9%2525E3%252581%2525AE%2525E4%2525BB%252595%2525E7%2525B5%252584%2525E3%252581%2525BF%252528%2525E3%252582%2525A2%2525E3%252583%2525BC%2525E3%252582%2525AD%2525E3%252583%252586%2525E3%252582%2525AF%2525E3%252583%252581%2525E3%252583%2525A3%252529%2525E3%252582%252592%2525E3%252581%252596%2525E3%252581%2525A3%2525E3%252581%25258F%2525E3%252582%25258A%2525E7%252590%252586%2525E8%2525A7%2525A3%2525E3%252581%252599%2525E3%252582%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Arevenue-hack%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzEwY2M5OWNkNGYuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png)
はじめまして2022/11に入社しましたソフトウェアエンジニアの葛西です。 主にバックエンド開発を担当しています。 社内で競プロ部を立ち上げたのでいつか機会があれば記事にしたいなと思っています! はじめに チーム内で現在のプロジェクトのDB(リポジトリ層)単体テストをどういう風にやろうかという話になり、色々悩みながらやり方を検討していったのでその過程と最終的にどのように実装したかを残しておきたいと思い記事にしました。 技術スタック まずDBテスト方法を検討する際の前提条件として現在のプロジェクトで使用している技術スタックを書いておきます。 言語 Go DBマイグレーションツール sql-migrate スキーマ変更用のSQLを用意しておけばコマンドでスキーマ変更などを反映してくれるというツールです。 スキーマ変更用のSQLはこのプロジェクトのディレクトリに直接置いています。 ORMライブラ
移行のゴールは単純で「ユーザの資産の引き継ぎ & 新バージョンで遊べるようにする」 です。ただし、いくつか追加、変更、削除された資産もあるので、補填を含めて対応する必要があります。 新しいバージョンの差分バージョンアップに伴い、データベースに以下の変更がありました。 テーブルの追加、削除インデックスの追加、変更、削除カラムの追加、削除またマスターデータも大幅に更新がありました。 マスターデータとは ゲームで使用するさまざまなパラメータ(敵や経験値、マップなどユーザ全員が共通して利用するもの)を保存したデータのことを指します。形式はゲームによってさまざまで、KVS・DB・CSVなどで管理されます 実際にどう進めたのか?実施した内容を、時系列順に紹介します。
RDBやデータモデリングに関する説明の中で「リレーションシップ」と言うべきところで「リレーション」と表現する誤用が目立つ。どうでもいいような違いに思われるかもしれないが、これらは明確に区別されるべきだ。そうでないと、RDBの用語の意味がわからなくなるからだ。 IBMのフェローであったE.F.コッド(1923-2003)による1970年のの歴史的論文 "A Relational Model of Data for Large Shared Data Banks" (大規模共有データバンク向けデータのリレーショナル・モデル。杉本さんによる対訳)によって、世界で初めてRDBの理論的枠組みが示された。この論文で使われている用語"relation"が、RDB(relational database)の呼称の由来である。 relationとは何か。その論文でコッド博士は、1個のテーブルに格納された行(
あけましておめでとうございます! 今年は異世界放浪メシのアニメが放送されるらしいので楽しみなバックエンドの原田 (tomtwinkle)です。 内部で運用しているSQLレビューチェックリストの一部を抽出し思いつきで追記して行った結果、結構な分量になってしまいました。 暇な時でも流し読みして頂けるとありがたいです。 Motivation SQLレビュー観点 大きくSQLが変更される修正の際にはEXPLAINをレビュー内容に加える 検索のキーにINDEXを使用しているか SQL発行回数がN+1(1+N)の構造になっていないか サブクエリを利用したSQLはパフォーマンス要チェック Viewの利用は基本的に禁止 CROSS JOINは禁止 WHERE句で十分に絞った検索をしているか 必要なcolumnだけSELECTしているか レコード数だけ必要な場合にCOUNT用のSQLを発行しているか 集計関
LocalDBに入門してみる FlutterでLocalDBといえば、sqflite、Hiveが良く使用されているみたいですが、ObjectBoxなるものが人気が出ているようで、気になって使ってみました。 数日前から、チュートリアルをやったりしましたが、Riverpodに書き換えたら、Runボタンを押してアプリを再起動しないと画面にデータが映らないのに、悩まされました😱 多分これは、アプリのライフサイクルというものでしょうね... 公式のサンプルを見てみたのですが、Streamを型に使っていて、画面に描画するときは、Streambuiderを使っていました! Hiveでもやっていたような? こんなアプリ作りました 完成したソースコード こちらが今回参考にした公式のサンプル こちらが公式の環境構築の方法が紹介されたページ アプリ作成で躓いたところ あまり情報がない どうやって対応した? 公
Qiita Advent Calendar 3回目の参加です。よろしくお願いします。 今年も個人的にお世話になった、Dapperに関するあれこれをまとめました。 Dapper とは .NETプラットフォーム用のマイクロORM(Object-relational mapping)です。 Dapperを使用する場合、SQLとマッピング用のクラスは自力で書く必要があります。SQLを書けることが前提のオブジェクトマッパーです。 通常のORMを使用したことがないのでなんとも言えないのですが、 単純にデータベースとオブジェクトをマッピングする場合、Dapperは非常に使いやすいのではないでしょうか。 Is Dapper an ORM? の項目に、通常のORMとの違いが記載されています。 IDbConnection と Dapper DapperはC#の IDbConnection を拡張して作られてい
::: message info これは[フィヨルドブートキャンプ Advent Calendar 2022 Part.1](https://adventar.org/calendars/7760)の25日目の記事です。 昨日の記事は:@shujiwatanabe:shujiwatanabeさんの[質問しながら出来るようにしていく](https://shu91327.hatenablog.com/entry/2022/12/24/091025)と:@saeyama:saeyamaさんの[Rails/Vue 編集時に画像をD&Dで入れ替えした時のActive Storageの保存方法](https://saeyama.hatenablog.com/entry/2022/12/24/000123)でした。 ::: ↓こういうのを職人が丹精込めて一つ一つ手作りする時代は終わりました。 ```sh
気にはなってるけど触ってないビッグデータ系のツール・サービスを触る Advent Calendar 2022の#9です。 Evidenceとは MarkdownにSQLクエリやグラフの設定を記載し、レポート用の静的なHTMLドキュメントを作成するツールです。 デモ画面を見ていただくと、作成できるレポートのイメージがしやすいと思います。 この方法(コードでレポートを定義、静的なHTMLドキュメントを作成)により、 ソースコードと同じように、バージョン管理やレビュー SQLクエリの結果を利用した、レポートの動的な制御(テンプレート) 色々な場所への埋め込みがしやすい などのご利益がありそうです。 (Evidence公式サイトより抜粋) インストール・プロジェクトの初期化 プロジェクトを設定するディレクトリで、npx degit evidence-dev/templateコマンドを実行します。
この記事はNuco アドベントカレンダーの16日目の記事です。 はじめまして、higasunです。 今回の内容は、データベースについてです。 種類や歴史に始まり、実際に作ってみるところまでやってみることで理解を深めていきます。 データベース初心者でも「データベースの基本を理解して、簡単なSQLなら書ける!」くらいの状態になれる仕上がりだと思っていますので、最後までお付き合いください。 ※もし間違いなどありましたらコメントで教えていただけると幸いです。 データベースって何? データベースの定義 データベースとは、構造を持ったデータの集合のことです。 平たく言うと、あるルールに従って格納・取り出されるデータの集まりです。 データベースには複数の種類があり、それぞれにデータの扱い方のルールがあります。 データベースの歴史 最も最初に登場したデータベースは50年以上も前に遡ります。 ここでは、様々
旧システムは3つのサービス種類から構成されており、サービス毎に3つ別々のシステムが用意されていました。 データの管理はそれぞれに行われ相互にユニークキーの重複などもある状態でした。 3つの内2つはほぼ同じ構成のシステムでしたが、残り1つのサービスは簡易的なスプレッドシートとGASで管理されており、手入力データが行われる事により新システム側で想定しない形のデータを多数含んでおり、データ構造も異なりました。 新システム(マイクロサービス) 旧システム(モノリシックだけど3つある) 旧システムから新システムへのデータの流れ 旧システムでは正規化レベルが低かったため1つのテーブルとして扱っていた情報が5つくらいにのテーブルに分かれたりしました。また、旧システムはサービス種類毎に異なる3つのシステムがあり、齟齬なく情報のユニーク性を保ちながらデータを移行しました。 データ移行は1月に第1弾、2月に第
概要 AWS で人気のサービス DynamoDB についての論文が公表され巷で噂になっていたと思う。 今回は、その論文を読み込んでいき、ざっくりまとめていくという記事になります。 完全趣味な記事なので、興味ある人がいれば幸いです笑 Abstract まず論文のタイトルですが、「Amazon DynamoDB: A Scalable, Predictably Performant, and Fully Managed NoSQL Database Service」と題したものとなっています。 Amazon DynamoDB は、NoSQL とよばれる部類のデータベースサービスです。 一貫した耐久性、可用性、パフォーマンスを提供してくれるマネージドなサービスなのが特徴ですね。 冒頭、2021年に66時間にわたる「Amazon Prime Day」中にピーク時8920万リクエスト/秒をさばいてい
初めに こんにちは。 株式会社HRBrainでバックエンドエンジニアインターンをしている、蔭山といいます。 株式会社HRBrainではアドベントカレンダーに参加しています。 本記事は4日目になります。 業務でDBデータを取り扱う機会もあり、改めてDBとSQLに関して学び直しました。 今回は、その中からすぐにプログラマとして業務に活かせて、とくに気をつけたほうが良いと感じたSQLでのNULLの取り扱いについて書きたいと思います。 何番煎じか分かりませんが、順を追って説明します。 SQLにおけるNULLとは何か 行のある列の値がない場合、その列はNULLである、またはNULLを含むといいます。NOT NULL整合性制約またはPRIMARY KEY整合性制約によって制限されていない列の場合は、どのデータ型の列でもNULLを含むことができます。実際のデータ値が不定または値に意味がない場合に、NUL
この記事の目的 Amazon DynamoDB(以下DynamoDBと記載)の可用性や書き込みのスループットの高さには大変魅力を感じています。 しかしながら、RDBとは全く異なる発想での設計が必要な点や、検索処理の自由度の低さに対しての有効な手立てを持ち合わせていない(スキルの問題)などがあり、なかなか実案件で採用するに至っていません。 そんな折に、とあるセミナーでDynamoDBの設計ノウハウを学ぶことが出来ましたので、その内容を自分なりに整理するためにこの記事を書きました。 (なお、セミナー主催者には本内容を記事で公開してよい旨の了解をいただいています。) 試したこと 試したことは大きく2つあります。 転置インデックスを用いて、ある程度複雑なデータモデルを1テーブルで処理する パーティションキーの属性で前方一致検索をする方法を模索する 表記ルール DynamoDBの用語については、文末
DBMS に依存するロジックのテストを書く時、主に2つの手法があると思います。 Repository 層などを mock する Service 層のテストをする時は、その下位の Repository 層を mock して、DBMS に依存しない形にしてからテストする レイヤードなアプリケーションで適用できる手法 テスト実行時も DBMS を裏で動かして、それを使う 本番と同じスキーマを持つ DBMS に対して、実際に insert したり select してテストする DBMS は docker-compose upとかで事前に立ち上げておく 双方にそれぞれ良さがあって、プロダクトによってどっちでやるか変わってくると思います。 この記事では 2 の手法を Prisma でどうやるかについて紹介します。 前提 実際のテストコードの例 テストヘルパーを作る 別解: ヘルパーを自動生成する je
SurrealDBというRust製データベースを知ったので紹介します。このデータベースはすごいです。リレーショナル、ドキュメント、グラフ、あらゆる種類のデータ構造を扱うことができ、かつインメモリ、単一ノード、分散環境、全てで動かすことができます。さらにHTTPやWebSocketによるアクセスと柔軟なユーザ認証、認可機能とがDB本体に内包されており、ブラウザから直に接続するWebDBとしても使えます。とにかくなんでもできる夢のデータベースといった感じです。 特徴 機能を挙げていたら多くなりすぎたので、特に面白い部分を挙げます。 配列やオブジェクトをネストした複雑なデータ構造を持てるのに、レコードリンクという機能によりリレーションに対応していてしかもSQLやMongoDBより簡潔にクエリが書ける。 スキーマレスで各レコードには任意のフィールドを持てるが、必要ならスキーマを定義することもできる
Microsoft SQL ServerMySQLOracle DatabasePostgreSQLSolarWinds DPAデータベース運用主要RDBMS製品の比較 2022.09.01 渡部 亮太 主要RDBMS製品の比較 – アーキテクチャ, スキーマ, データベース, メモリ Oracle ACE Proの渡部です。 主要なRDBMS製品についてアーキテクチャを比較します。 大枠を整理することが最大の目的です。細かい例外事項や拡張機能は適宜記載を割愛しています。 2022年9月時点の最新バージョンをベースに記載していますが、記載内容にバージョン依存は少ないはずです。 時間ができた時に随時追記予定です。 もし誤りを見つけた場合は、優しく教えていただけると嬉しいです。→ https://twitter.com/wrcsus4 or ryota.watabe at cosol dot
風音屋では、データエンジニア、データアナリスト、データコンサルタントを募集しています。 書籍執筆者やOSSコントリビューターなど、業界を代表する20名以上のアドバイザーと一緒にベストプラクティスを追求できる環境です。 ぜひカジュアルトークをお申し込みください。 風音屋アドバイザーの山田雄(@nii_yan)です。 データ活用においてセキュリティ対策が最重要トピックであることは言うまでもありません。 風音屋でBigQueryの導入支援を行うにあたって、どのようなセキュリティ対策を行っているのかをご紹介します。 この記事の全体像 この記事は2つのパートに分かれています。 最初に、BigQuery導入プロジェクトを始めるにあたって、セキュリティ観点でどのようなコミュニケーションが必要になるかを説明します。 次に、一般的な情報セキュリティ対策である「抑止」「予防」「検知」「回復」の4つの観点にもと
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く