タグ

DBに関するamari3のブックマーク (58)

  • 書籍出版のお知らせ:理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL

    来る2月27日、データベースの新書籍を発売させて頂くことになった。タイトルは「理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL」となっている。単に「データベース」と書いてあるが、RDBがメインのテーマの書籍である。 多くの人が未だにRDBを使いこなせていないのではないか。RDBの使い方をマスターするには何が必要なのか。それがここ数年私が追ってきたテーマであり、この書籍を出すことになった動機である。 あまりにも酷いDB設計、あまりにもスパゲティなクエリ、あまりにも希薄なデータモデルへの理解。そういった問題はどこから生み出されるのか。そのひとつの結論としてたどり着いたのが、「そもそもRDBの使い方があまり理解されていないのではないか」ということだった。名著、SQLアンチパターンでは「やってはいけないケース」について学ぶことができるが、その反対のテーマ、つまり来どの

    書籍出版のお知らせ:理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL
    amari3
    amari3 2015/02/16
  • 株式会社プロズサービス

    ”人とのつながりを大切にする” 当社が最も大事にしているキーワードです。 システム開発では関係者とのコミュニケーションに多くの時間を割いています。 この時間を省略して、質の高いシステムを提供することは難しいでしょう。 その上で、過去の経験や技術動向を踏まえ、プロフェッショナルな IT技術者として お客様の求めていることを実現する。 これが当社全員の目指す姿です。 人との関わり方に物足りなさを感じている方、 ご自身の経験をフル活用してお客様にサービスを提供したい方、 是非当社までご連絡ください。 まずはカジュアルに話をしましょう!

    株式会社プロズサービス
    amari3
    amari3 2014/10/27
  • イミュータブルデータモデル(入門編)

    6. Step1 エンティティの抽出 発送担当者が受注リストをもとに、商品の在庫を確認し、在庫が あれば商品を発送する。 ① 要求仕様の「動詞」を抜き出しエンティティとする。 ② ①に関わる「名詞」を抜き出しエンティティとする。 ③ エンティティ間の関連に線を引く ④ 属性や候補キーも分かる範囲で書いておきます。 間違い! この段階で実装をプロパティファイルにするとか、Enum にするとか決め打ちでエンティティとして表さないのはや めましょう。 まず、はじめにエンティティを抽出します。

    イミュータブルデータモデル(入門編)
  • CakePHP2.x系でバルクインサートを使用して高速なインサート処理を実現する - ダメプログラマの技術メモ

    CakePHPで複数のレコードをDBに投入する時に、forループでsaveメソッドを何度も呼び出していませんか? 今のプロジェクトでもそういったソースをよく見かけるのですが、とてつもなく遅い(;´Д`) ということで、今回はCakePHPでバルクインサートを使用してインサート処理を高速に行う方法を説明します。 今回使用するテーブルは? musicsテーブル id singer song_title created modified 1 初音ミク Tell Your World 2012-09-29 20:18:57 2012-09-29 20:18:57 2 鏡音リン 炉心融解 2012-09-29 20:18:57 2012-09-29 20:18:57 3 鏡音レン Fire◎Flower 2012-09-29 20:18:57 2012-09-29 20:18:57 4 巡音ルカ J

    CakePHP2.x系でバルクインサートを使用して高速なインサート処理を実現する - ダメプログラマの技術メモ
    amari3
    amari3 2014/10/10
  • 楽観ロックと悲観ロックの違い -

    2014-01-16 楽観ロックと悲観ロックの違い ロックにも種類があり、楽観的ロックと悲観的ロックというものがある。 楽観的ロックとは、テーブルにもたせている更新タイムスタンプや、更新フラグを比較してロックするというものである。 例えば更新したいレコードを取得して、更新タイムスタンプを保持しておく。 そして、更新する直前に再度レコードを取得して更新タイムスタンプが最初の時と変わっていないかどうかで、排他処理を行うというものである。  その結果、帰ってきた値が0ならば、更新失敗となり、1ならば成功となる。 このように楽観的ロックは比較的簡単で自分が操作している情報は,他の人が操作する可能性が少ない時に主に多用される。 例: select update_number from optimistic_lock where user_id=1; #500が返ってくるとする update user

    amari3
    amari3 2014/09/30
  • レコードがなかったらINSERTして返すみたいなのを確実にやる | おそらくはそれさえも平凡な日々

    find_or_create的なやつは大体どんなORMでも レコードを探す 無かったらINSERT みたいに実装することになると思う。ただこれだと、1と2の間でレースコンディションでエラー起きることがある。他のプロセスがINSERTしてしまうとかそういうやつ。 それを防ぎたい場合に、1の時点でFOR UPDATEするのはすごくダメで、空行にFOR UPDATEしたりするとMySQLだと盛大に乙るのは有名な話。 エラーを起こさないで、確実にレコードを取りたい場合にはどうすればよいかというと、以下のようにするのが良いと思っている。UNIQUEキー制約なりがちゃんと付いている前提。サンプルコードはTengの場合。 sub find_or_create_surely { my ($self, $table, $where, $opt) = @_; my $row; my $txn = $self-

    レコードがなかったらINSERTして返すみたいなのを確実にやる | おそらくはそれさえも平凡な日々
    amari3
    amari3 2014/09/26
  • データベース再入門

    第2回ゲームサーバ勉強会( http://peatix.com/event/42642 )で発表した資料

    データベース再入門
  • 松信流「データベース技術の羅針盤」

    EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

    松信流「データベース技術の羅針盤」
  • IDの設計についてのさらに突っ込んだ議論

    今日も前回に引き続きデータベース設計の話をする。今回の話で一旦データベース設計については筆を置くつもり(ブログ書いてないで原稿書けよ>俺)であるが、その前に話をすっきりさせて置きたいと思う。最後を飾るテーマはIDの設計である。 数字しかないのに意味を含んだID前回のエントリを見ていただいた方から、次のような構造を持った学籍番号があるというフィードバックを頂いた。 全部数値で"入学年度下2桁"+"学科コード"+"学科内のあいうえお順の順位" このようなルールで割り当てた学籍番号を、単なる数値として扱うのであれば大きな問題はない。これは数値しか含まれていないので、SQLのデータ型としては単に数値型を使えば良いだろう。だが、学籍番号から入学年度を判断する、あるいは学科を判断するといった用途で使われるのであればやはり適切ではないといえる。リレーショナルモデルの観点だけからではなく、IDとして適切で

    IDの設計についてのさらに突っ込んだ議論
    amari3
    amari3 2013/12/10
  • ナチュラルキーとサロゲートキーについての議論

    とあるブログエントリで「ナチュラルキーを主キーにしてはいけない」という主張を見かけたのでこれに反論しておく。これはリレーショナルモデル的には明らかに間違った考えだからだ。 リレーショナルモデルにあるのはナチュラルキーだけリレーショナルモデルには「サロゲートキー(代理キー)」という概念はない。まずこの点に注意して頂きたい。サロゲートキーとは、データベースアプリケーション開発において実用上必要とされる機能であって、質的には不要のものである。リレーショナルモデルでは、いわゆるナチュラルキーというものがあれば機能的には十分だからだ。 そのためにはまず「キー」という概念が何を指し示すかということについて正しく理解しなければならない。リレーショナルモデルではキーと呼ばれるものは候補キーとスーパーキーという2つの概念だけである。「タプル(≒行)の値を一意に決定することができる属性(≒カラム)の集合」の

    ナチュラルキーとサロゲートキーについての議論
    amari3
    amari3 2013/12/04
  • その選択、ちょっと待った!NoSQLデータベースへ乗り換える前に検討すべき3つのポイント

    最近、どうも安易に「NoSQLにすれば厄介なDB設計から開放される」と考えている人が多いように思えて仕方がない。だが待って欲しい。当にNoSQLと呼ばれるデータベースを使えばアプリケーションの開発・運用の苦しみから逃れられるのだろうか。もちろん「そんなことは無い!!絶対にだ!!」と私は考える。今日はその理由について語ろうと思う。 トランザクション先日、リレーショナルデータベースにおけるDB設計についてセミナーで解説したばかりだが、リレーショナルデータベースにおけるデータの整合性は何もDB設計だけが担保しているわけではない。リレーショナルモデルと同じかそれ以上に欠かせないのがトランザクションだ。 トランザクションがあるおかげで、トランザクション終了後のステータスは「成功」か「失敗」の2つしかないということが保証される。すなわちオール・オア・ナッシングだ。もしトランザクションの途中で何らかの

    その選択、ちょっと待った!NoSQLデータベースへ乗り換える前に検討すべき3つのポイント
    amari3
    amari3 2013/12/02
  • データベース設計徹底指南

    DBエンジニアのための技術勉強会(第3回)で使用した資料です。主にリレーショナルモデルと正規化について解説しています。リレーショナルモデルの限界について正しく認識してこそ、リレーショナルモデルを理解したと言えると思います。

    データベース設計徹底指南
  • DBエンジニアのための技術勉強会で発表したスライドを公開しました。

    DBエンジニアのための技術勉強会というイベントで、リレーショナルモデルにおけるDB設計について話す機会を頂いた。リレーショナルモデルは非常に重要であるにも関わらず、現場ではないがしろにされてしまっている。その結果、アプリケーションのロジックを上手くクエリで表現できず、開発現場では非効率な開発が行われ、多くの人がデスマ的な状況に追い込まれている。そういう危機意識について、これまで何度かブログでも書いてきたし、WEB+DB Pressで連載している動機もその点にある。リレーショナルデータベースはやはりリレーショナルデータベースとして使うべきだ。そのための鍵となるのが、DB設計である。 今回はなんと約2時間の持ち時間を頂いた。リレーショナルモデルについてはこれまで何度か話す機会を頂いたが、2時間というのは最長記録である。それに合わせてスライドもボリュームたっぷりのものになった。過去のスライドと

    DBエンジニアのための技術勉強会で発表したスライドを公開しました。
    amari3
    amari3 2013/11/29
    読み応えが半端ない
  • データベースのmasterとslaveの使い分けの話。2014年版 - Hateburo: kazeburo hatenablog

    社内で少し話題になったので。 運用上の話はfujiwaraさんの MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか - 酒日記 はてな支店 MySQLで参照の負荷分散を行うslaveは3台から構成するのがよいのでは - 酒日記 はてな支店 をみてください。 最近、新しくサービスができたり、新規機能でデータベースを追加する際には必ず全ての参照をmasterに向けてもらっています。理由は上記のエントリを読んでください。このような構成が取れるのはもちろん性能的にそれで問題ないからです。 新しいハードウェアに、設定されたMySQL、問題のないように書かれたSQLであれば、数千QPSは余裕に、また少し頑張れば数万QPSを一台で賄えます。なので大体のサービスはmaster一台で十分です。 さらにこの考え方を進めて、Webアプリケーションの中で sub d

    データベースのmasterとslaveの使い分けの話。2014年版 - Hateburo: kazeburo hatenablog
  • データベース技術の羅針盤

    PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)NTT DATA Technology & Innovation

    データベース技術の羅針盤
  • コンシューマサービスの運用に耐えるDB性能設計とは - レベルエンター山本大のブログ

    JOIN 禁止の話に、いまだに絡んでくれる人がいた。 ■「艦これ」から、ソーシャル系のサーバ構成を考える - SQLer 生島勘富 の日記 僕が以前に書いたテーマに関するエントリは以下の3つ。 ■信じられないDB文化Join禁止」に「固定長DB」、、でも、合うんです。大規模コンシューマ向けサービスのRDB設 ■信じられないDB文化「固定長DB」でもあうんです。大規模コンシューマ向けサービスのRDB設計 ■ホント信じられないDB文化だけど、統計情報固定化はマジでアリ ちょうど折よく、ウチの会社のオラクル女子が書いたエントリの続きも公開されました。 ■一緒にまなぼ!「hiromi と楽しむOracleパフォーマンスチューニング!」【Vol.2 Statspackを見てみよう】 ということで僕の中でDB熱が盛り上がってきたので返答的なエントリを書きます。 「とりあえずメモリだけ気にしておけ」

    amari3
    amari3 2013/09/03
  • 「艦これ」から、ソーシャル系のサーバ構成を考える - SQLer 生島勘富 のブログ

    私は、ソーシャル系とは縁遠い仕事ばっかりしているのですが、そういう依頼も若干増えてきたので話題になっている「艦これ」をお盆にやってみた。 残念ながら、「艦これ」の魅力は分からなかった。しかし、ミッションを用意されると、「クリアーしたい」という欲求から意地になるのは、何となく理解できました。それより、同時に始めた「Clash of Clans」には嵌まりました。気になっていた「ゲームの中に如何に自然に課金システムを取り入れるか」という課題についても、個人的には「Clash of Clans」の方が上手に解決しているように思います。 「艦これ」は、同時アクセスが10万以上あって、何度かシステム障害があったとのこと(そりゃあるでしょうが……)。私の興味の方向性は、課金システムであったり、システム構成にあるので、「艦これ」のシステム障害の方が強い興味の対象になります(苦笑) というわけで、「ソーシ

    「艦これ」から、ソーシャル系のサーバ構成を考える - SQLer 生島勘富 のブログ
    amari3
    amari3 2013/09/02
  • qpstudyで発表したスライドをアップロードしました。

    日、qpstudyで「データベースとは」という内容について、そして「リレーショナルモデルとは」という内容について話す機会を頂いた。リレーショナルモデルという硬い内容であったにも関わらず、出席者の皆さんには最後まで良い反応をして頂けたように思う。実はリレーショナルモデルについて誤解している、あるいは知らない人が当に多い、そして良い解説書がないということを普段問題として感じており、そういった背景から今回qpstudyの話を引き受けさせて貰った。今回発表した内容が皆さんのお役に立てば幸いである。 発表の内容はほぼ現在WEB+DB PRESSで連載している「理論で学ぶSQL再入門」のいくつかの回のものを要約したものになっている。連載ではさらに詳しい内容について説明しているので、興味のある人はぜひWEB+DB PRESSのバックナンバー(連載はVol.68〜)を購入して頂きたい。 日発表したス

    qpstudyで発表したスライドをアップロードしました。
  • PHPMatsuri2013で発表した資料を公開しました「ソーシャルゲーム案件におけるDB分割のPHP実装~とにかく分割ですよ。10回じゃ足りない。20回くらい分割。~」|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ

    ホーム 技術ブログ PHPMatsuri2013で発表した資料を公開しました「ソーシャルゲーム案件におけるDB分割のPHP実装~とにかく分割ですよ。10回じゃ足りない。20回くらい分割。~」 PHPMatsuri2013で発表した資料を公開しました「ソーシャルゲーム案件におけるDB分割のPHP実装~とにかく分割ですよ。10回じゃ足りない。20回くらい分割。~」 記事を書くのは初めてになります。sasakiです。 2013年7月14日から15日にかけて、PHP Matsuri 2013が開催されました。 今回は北海道開催という事で弊社もスポンサーとなり、社員の何名かはスタッフとして開催に協力しました。 また、スポンサー枠でセッション時間を一コマ頂き 「ソーシャルゲーム案件におけるDB分割のPHP実装 ~とにかく分割ですよ。10回じゃ足りない。20回くらい分割。~」 と題した発表を行いましたの

    PHPMatsuri2013で発表した資料を公開しました「ソーシャルゲーム案件におけるDB分割のPHP実装~とにかく分割ですよ。10回じゃ足りない。20回くらい分割。~」|技術ブログ|北海道札幌市・宮城県仙台市のVR・ゲーム・システム開発 インフィニットループ
  • 7つのデータベース 7つの世界 | Ohmsha

    第1章 イントロダクション 第2章 PostgreSQL 第3章 Riak 第4章 HBase 第5章 MongoDB 第6章 CouchDB 第7章 Neo4J 第8章 Redis 第9章 まとめ 付録A データベースの概要表 付録B CAP定理 付録C 参考資料 書に寄せて 謝辞 はじめに 第1章 イントロダクション 1.1 最初に質問 1.2 データベースの分類 1.3 今後の行方 第2章 PostgreSQL 2.1 Post-greS-Q-L 2.2 1 日目:リレーション・CRUD・結合 2.3 2 日目:応用的なクエリ・コード・ルール 2.4 3 日目:全文検索と多次元 2.5 まとめ 第3章 Riak 3.1 Riak はウェブがお好き 3.2 1 日目:CRUD・リンク・MIME タイプ 3.3 2 日目:mapreduce とサーバークラスタ 3.4 3 日目:コンフ

    7つのデータベース 7つの世界 | Ohmsha
    amari3
    amari3 2013/02/21