タグ

DBに関するnyangryのブックマーク (20)

  • 4ステップで作成する、DB論理設計の手順とチェックポイントまとめ - Qiita

    はじめに 「達人に学ぶDB設計」、「SQLアンチパターン」を読んだのでDB設計をする流れとその過程でのチェックポイントをまとめてみました。 今回はに載っているものの中でも特に重要そうな部分に絞ってみました。 さらに詳しいことを知りたい方はを購入してみてください。個人的には達人に学ぶDB設計徹底指南書のほうがおすすめです。こちらだけあれば十分だと思います。 DB設計には大きく分けて論理設計と物理設計の二つがありますが、今回はアプリケーション開発でメインとなる論理設計の部分に焦点をあてて説明をします。 一番最後にチェックポイントだけをまとめた章を用意したので、チェックポイントだけ知りたい方は最後だけ見ていただければと思います。 DB論理設計の流れ DB論理設計は以下のようなステップで進めていきます。 エンティティの抽出 エンティティの定義 正規化 ER図の作成 以下では各ステップごとに章を

    4ステップで作成する、DB論理設計の手順とチェックポイントまとめ - Qiita
    nyangry
    nyangry 2016/11/10
  • Railsのコネクションプーリングについて

  • Mobage を支える Ruby の技術 ~ 複数DB編 ~

    OSC 2011 Hokkaidoの発表で使用したスライド資料です。 弊社が「ブラウザ三国志」や「英雄クエスト」といったゲームを、PHPMySQLで構築してきた上で、身につけたノウハウや、注意すべき箇所、指針などをまとめた資料となっています。

    Mobage を支える Ruby の技術 ~ 複数DB編 ~
  • Airbnbのメインデータベースをどうやって2週間で分割したか | POSTD

    スケーリング=時速160㎞で走行しながら自動車の全ての部品を取り替えること -Mike Krieger  Instagramの共同設立者@ Airbnb OpenAir 2015 Airbnbのピーク時のアクセス数は、毎年夏のピーク時で見ると年率3.5倍で増加しています。 2015年夏の旅行シーズンを前に、Airbnbの基盤チームは、夏季のアクセスで予想されるデータ通信量に対処するため、データベースのスケーリングで忙殺されていました。中でも特に全体への影響が大きかったプロジェクトが、特定のテーブルを、アプリケーションの機能に従ってそれぞれのデータベースに分割することを目的としたプロジェクトでした。これは通常、アプリケーション層のフォームの変更やデータ移行、データの整合性を保証する堅牢性テストなど、最小限のダウンタイムで多大な技術投資を必要とするものです。何週間もかかるエンジニアリング時間

    Airbnbのメインデータベースをどうやって2週間で分割したか | POSTD
  • Re: 論理削除はなぜ「筋が悪い」か - Blog by Sadayuki Furuhashi

    Kazuhoさんの論理削除はなぜ「筋が悪い」かを読んで。 UPDATEが発生しないテーブルならば、削除フラグを使った実装手法でも現在の状態と更新ログを別々に表現でき、結果として効率と過去の情報を参照できるメリットを簡潔に両立できるのではないか、という話。 大前提として全く同意なのだけども、今あるテーブルにdeleted_atを足すだけで、過去のレコードを復旧可能なようにしたい>< みたいに思っちゃった僕のような人間が実際に取るべき実装手法は何か、あるいは、それを想定して今やっておくべきテーブル設計はどういうものか!?というのが最後の疑問。 まずUPDATEがなければ、immutableなマスタ、更新ログ、「現時点のビュー」の3テーブルは、例えば次のようになる(PostgreSQLの場合): -- immutableなマスタ。 create table records ( id serial

    Re: 論理削除はなぜ「筋が悪い」か - Blog by Sadayuki Furuhashi
  • 論理削除はなぜ「筋が悪い」か

    「論理削除が云々について - mike-neckのブログ」を読んで。 データベース設計において、「テーブルの書き換えをするな、immutableなマスタと更新ログによって全てを構成しろ」というこの記事の主張はモデリング論として全く正しい。 だが、残念なことに、ディスクやメモリが貴重な資源だった時代の技術であるRDBは、そのようなモデリングに基づいて設計されたデータベースには必ずしも適していない。 第一の問題は、RDBに対してなされる様々な「更新」(トランザクション)は不定形(どのテーブルをどのように修正するかはアプリケーション依存)だという点。不定形な「更新」を時系列にそってRDBに記録していくのは、設計と並走性の点において困難あるいは煩雑なコーディングが必要になる(というか、そのような「イベント」による「変化」はREDOログに書き、その更新された「状態」をテーブルに反映していくというのが

  • 論理削除が云々について - mike-neckのブログ

    今日朝イチで見たエントリーがこれでした。 qiita.com 論理削除の弊害は色々なところで言われているけど、僕の足りない頭で理解している所によると、二つの値しか持たない削除フラグ的なものはカーディナリティが云々で検索条件につけても性能上的にもよくないし、意味がないということです。 論理削除を完全に悪だとは言いませんが、論理削除を極力排したい人たちは、基的にデータそのものを削除する、もしくは論理削除というのはまだ要件的に未確定な要素が隠されていることを示すフラグであると考えているようです。 僕がITの業界でキャリアをスタートしてから2年目くらいに配置されたプロジェクトではT字型ER手法というのをベースにしたテーブル設計をしていて、そこでかなり鍛えられたわけですが、その時にはだいたいこのような原則を叩きこまれました。 テーブルに状態を持たせない 究極には機械が認識するキーと、人間にとって意

    論理削除が云々について - mike-neckのブログ
    nyangry
    nyangry 2015/03/25
  • DELETE_FLAG を付ける前に確認したいこと。 - Qiita

    DELETE_FLAG という思考停止フラグ DELETE_FLAG という boolean の列が DB 設計でよく話題になります。 論理削除という言葉で上手に論理武装し、スキを見せるとすぐに入れたがる人がおり、 一方でそれにつよく反対する人もいます。 自分の経験としては、広義の論理削除はありえると思いますが、実現方法が DELETE_FLAG だとなった時、それはあまり考えてないでなんとなくパターンとして盛り込んでる場合が多いと感じます。 ただし、設計に唯一の答えは無いので、もしかしたらそれが妥当な設計である場合があるかもしれません。 今回は「DELETE フラグがなぜダメなのか?」などという話をするつもりも、アンチパターンだと断言するつもりもありません。 問題は、仕様をきちんと把握すると、「最適な設計は DELETE_FLAG ではない」という場合が有って、その場合は、その最適な設計

    DELETE_FLAG を付ける前に確認したいこと。 - Qiita
    nyangry
    nyangry 2015/03/24
  • 長年の議論に終止符 -- MySQLとMariaDBの違い一覧 - 技術メモ置き場

    (2014.12.3追記:このblogの内容は、以下の書籍にも反映させた。) SQLレベルの差異 MariaDB5.5とMySQL5.5ではSQLレベルでの違いはほとんどなかった。autoincrementの最大値の扱いくらい。 ただし、MariaDB10.0でREGEXPがマルチバイト対応になったので、アプリ側は注意。 項目 MySQL MariaDB Autoincrement 最大値に達すると、以降は最大値を繰り返す。Warningのみ。エラーにならない。tinyintなら…,125,126,127,127,127… 最大値-1まで。以降はエラーを返す。tinyintなら…,125,126,ERROR,ERROR,… EXPLAIN文 JSON形式 バージョン5.6から 未対応 Optimizer Trace バージョン5.6から 未対応(ただし、MariaDBのほうがオプティマイザ

    長年の議論に終止符 -- MySQLとMariaDBの違い一覧 - 技術メモ置き場
  • MySQL5.6にしていくつかのSQLでエラーが出るようになった | シーズクリエイターズブログ

    MySQL5.6にしていくつかのSQLでエラーが出るようになった Posted 2013年5月23日 by はらぐち & filed under インフラ. MySQL5.6にしていくつかのSQLでエラーが出るようになっちゃいました。 具体的にはINSERT文を実行した時、以下のようなエラーとなり処理が実行されなくなりました SQLSTATE[HY000]: General error: 1364 Field 'hoge' doesn't have a default value エラー文からデフォルトバリューが設定されてないカラムにNULLを入れようとした為のエラーのようです。 ぐぐるとずばりな回答をされてるブログが見つかりました。 iをgに変えるとorangeになることに気づいたoranieの日記 MySQL5.6で今までのVerでは問題無かったSQL文がエラーになった場合の対処法

    nyangry
    nyangry 2014/09/22
    MySQLのバージョンでSTRICTMODEがONなってるとマイグレーションが結構落ちる件
  • How to turn off MySQL strict mode in Rails

    nyangry
    nyangry 2014/09/14
    Strictモードの解除
  • MySQL Operators

    This document discusses MySQL operators including: - Precedence of operators and type conversion - Arithmetic, bitwise, logical, and comparison operators - Mathematical, string, and date functions It provides examples of using each type of operator and function, such as calculating percentages and dates, performing string manipulations, and applying logical conditions. The applications of MySQL op

    MySQL Operators
  • 分割と整合性と戦う

    え、まって。その並列分散処理、Kafkaのしくみでもできるの? Apache Kafkaの機能を利用した大規模ストリームデータの並列分散処理NTT DATA Technology & Innovation

    分割と整合性と戦う
    nyangry
    nyangry 2014/09/04
  • [MySQL] Spider Engineのインストール

    Spider Engineのインストール方法を紹介します。 OSはUbuntu 12.04です。 まず、コンパイルに必要そうなツールをインストールします。 $ sudo apt-get install make cmake automake gcc g++ オフィシャルサイトからダウンロードしてきたSpider Engineを、解凍します。 $ tar zxvf mysql-5.5.34-spider-3.1-vp-1.0-hs-1.2-q4m-0.95.tgz cmakeします。 $ cmake . -DDEFAULT_CHARSET=utf8 これでmakeすると、q4mのコンパイルでエラーになるので、q4mのディレクトリを適当な場所に移します。 (つまりq4mのコンパイルをあきらめます、、、) $ mv storage/q4m ~/tmp/ make して、インストールします。 $

    nyangry
    nyangry 2014/08/12
  • MariaDB 10.0.10 と Spider ストレージエンジンを使ってみる - akishin999の日記

    MySQL の Sharding 用ストレージエンジンである Spider を試してみました。 公式のバイナリに同梱されている MariaDB 10.0.10 を使っています。 試した環境は CentOS 6.5 x86_64 です。 MariaDB のインストール まずは MariaDB をインストールするために、yum リポジトリ定義ファイルを作成します。 # vi /etc/yum.repos.d/mariadb.repo 内容は以下。 # MariaDB 10.0 CentOS repository list - created 2014-04-02 07:21 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/c

    MariaDB 10.0.10 と Spider ストレージエンジンを使ってみる - akishin999の日記
    nyangry
    nyangry 2014/08/12
  • 今さらだけどMySQLのパーティショニング機能を試してみた - (゚∀゚)o彡 sasata299's blog

    2013年03月21日18:11 MySQL 今さらだけどMySQLのパーティショニング機能を試してみた 最近は花粉が飛んでて辛い季節ですがみなさまいかがお過ごしでしょうか。でももうちょっと我慢すればサクラの季節ですよ〜。花見良いですよね、飲みたいだけですが。 ・・さて、今回はちょっと必要になったので、MySQLのパーティショニング機能なるものを試してみました。存在は知ってたけど、実際に試してみたことは無かった…。 パーティショニングとは? これはどういうものかと言うと、MySQL5.1から使えるようになった機能で、ひとつのテーブルのデータを条件によって複数の領域(パーティション)に振り分けて管理することができる、というものです。例えば日別にデータを別々のパーティションに振り分けたり。 パーティショニングするとデータの削除が高速だったり(通常は削除ってものすっごい遅いけど、特定のパーティシ

  • 誰も教えてくれなかったMySQLの障害解析方法 - Qiita

    それほどDBに詳しくないアプリエンジニアが何かトラブった時にすぐさま行動して問題把握できるようになる情報を列挙しておきます。 開発時、障害時の対処療法やちょっとした定期監視方法などを対象にしています。 抜的な対策などはインフラエンジニアさんにお任せしたほうがいいと思います。 DBはいろんな意味でこわいんでできれば触りたくないです>< 事前確認 MySQLサーバーのシステム設定値を確認しておく 以下のようにサーバーのシステム設定値を確認できます。 mysql> SHOW GLOBAL VARIABLES; # ワイルドカード(%)を用いた絞り込み mysql> SHOW GLOBAL VARIABLES LIKE 'performance_schema%'

    誰も教えてくれなかったMySQLの障害解析方法 - Qiita
  • ずっと探してたHerokuのPostgreDBをGUI管理するツールは「PG Commander」に決まりました。 - NOT SO BAD

  • MySQLのメモリ使用量に関するトラブルシューティングTips | Yakst

    MySQLが確保する各種メモリに関するパラメータの概要から、それらがどのように割り当てられるのかを知るための様々な手法まで、Perconaのサポートエンジニアが詳しく解説する。 January 24, 2014 By Nilnandan Joshi 「MySQLサーバのメモリ使用量」に関連するトピックスを書いたブログ記事は既にたくさんあるにも関わらず、MySQLのメモリ関連の問題のトラブルシューティングで混乱しなかった人はいないだろう。Perconaサポートのエンジニアとして、高負荷のサーバに関することや、メモリ使用量高騰でOOM killerが発動してMySQLサーバが停止したこと、あるいは「MySQLがどうしてこんなにメモリをうのか分からない。どうやったら何にメモリが使われてるか分かるんだ?助けてくれ!」と言った問題を数多く見ている。 MySQLのメモリ使用量をチェックする方法はたく

    MySQLのメモリ使用量に関するトラブルシューティングTips | Yakst
    nyangry
    nyangry 2014/02/03
  • MySQLをインストールしたら、必ず確認すべき10の設定 | Yakst

    MySQL Performance Blogの翻訳。インストール後に必ず設定を確認しなければならない設定パラメータ10つを挙げ、その意味を解説する。MySQLの設定変更時の、一般的な注意点も合わせて。 January 28, 2014 By Stephane Combaudon 我々がパフォーマンス監査の仕事をする時には、MySQLの設定のレビューと改善提案を求められる。大抵の場合、たくさんのオプションがある中でほんのいくつかの設定しか変更するように提案しないことに、多くの顧客は驚く。この記事のゴールは、もっとも重要な設定をいくつか挙げてみることにある。 既にこういった提案は過去にもしているが数年前のもので、それ以来MySQLの世界ではたくさんの変化があったのだ。 話の前に 熟練した人でも、重大なトラブルを引き起こすミスをしでかすことがある。従って、ここに挙げたものを盲目的に適用する前に、

    MySQLをインストールしたら、必ず確認すべき10の設定 | Yakst
    nyangry
    nyangry 2014/02/03
  • 1