タグ

DBとsqlに関するd_animal141のブックマーク (53)

  • PostgreSQLは、SELECTもロックを獲得する - 地平線に行く

    PostgreSQLは、SELECT文を実行すると暗黙的にロックを獲得するということを、システムを止めて初めて知りました。 なので、こういうSQLはまずいです。 SELECT * FROM FooTable; LOCK TABLE FooTable; これを二つ同時に実行するとデッドロックが発生します。 これは、2つのコマンドプロンプトで 画面A BEGIN; // トランザクションの開始 画面B BEGIN; // トランザクションの開始 画面A SELECT * FROM FooTable; 画面B SELECT * FROM FooTable; 画面A LOCK TABLE FooTable; 画面B LOCK TABLE FooTable; と実行すると再現できます。 なんで? 2行目のテーブルロックは、そのトランザクション以外にテーブルにアクセスするトランザクションがないことを保

    PostgreSQLは、SELECTもロックを獲得する - 地平線に行く
    d_animal141
    d_animal141 2014/04/13
    PostgreSQLは、SELECTもロックを獲得する
  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more about using Guest mode

    d_animal141
    d_animal141 2014/04/13
    楽観的ロックと悲観的ロック
  • 悲観もあれば楽観もある「トランザクション」の常識

    悲観もあれば楽観もある「トランザクション」の常識:企業システムの常識をJBossで身につける(8)(1/4 ページ) 企業向けアプリケーションのさまざまな“常識”をJavaのオープンソース・フレームワーク群である「JBoss」から学んでいきましょう。企業システムを構築するうえでの基礎となる知識をリファレンス感覚で説明していきます。初心者から中堅、ベテランまで大歓迎! ありえない! 企業システムでの不完全なデータ 企業活動の日々の業務で発生するさまざまなデータ。それらを保存・利用するために、企業はITへの投資を行い、システムを構築しています。そうしたシステムにおいて、データを保存する際に防がなければならないのが不完全な状態での登録や更新です。 また、昨今のシステムでは保存先が複数存在するケースが多々あり、各保存先間での整合性を保証する必要があります。そこでシステム開発の際に重要となるのが、今

    悲観もあれば楽観もある「トランザクション」の常識
    d_animal141
    d_animal141 2014/04/13
    悲観もあれば楽観もある「トランザクション」
  • SQL -TECHSCORE-

    ここでは、リレーショナル型データベースを操作するために必須となる世界標準言語 SQL について、基礎から応用まで詳しく説明しています。 また、SQL のみにとどまらず、リレーショナルデータベースマネージメントシステム (RDBMS) の持つ様々な機能について詳しく説明しています。 最後には、データベースの設計に関する非常に重要な考え方についても触れていますので、これらを全て学習すると、データベースの操作から設計まで幅広い知識を身につけることができるでしょう。 SQL INDEX 1. データベースの概要 1.1. データベースとは 1.2. データベースシステムの特徴 1.3. データベースとファイルの違い 1.4. 代表的なデータモデル 1.5. リレーショナル型データベース 1.6. まとめ 2. SQL 2.1. SQL歴史 2.2. SQL とは 2.3. SQL の機能 2.

    d_animal141
    d_animal141 2014/03/29
    データベース | TECHSCORE(テックスコア)
  • Active Record で N+1 問題 - 日々精進いたします

    最近会社でHibernateのN+1問題事例を調べてたんですが、ActiveRecordでも当然のように起こりますね。 BOOKSテーブルが、1対NでREVIEWSテーブルと関連を持っています。(BOOKSが1、REVEWSがN) 以下のコードでは、BOOKSテーブルを全件検索して、それに関連するREVIEWSテーブルのレコードを取得して、REVIEWSテーブルのBODYカラムを出力する。 Book.all.each { |book| book.reviews.each { |review| puts review.body } } このコードではBOOKSテーブルに対して1回のSQLが発行され、REVIEWSテーブルに対してはBOOKSテーブルのレコード数分のSQLが発行されます。N+1問題です。BOOKSテーブルとREVIEWSテーブルの多重度に関係なく、親テーブルを複数検索して、子テ

    Active Record で N+1 問題 - 日々精進いたします
    d_animal141
    d_animal141 2014/03/12
    Active Record で N+1 問題
  • 共有行ロックと排他行ロックの違い - shima111の日記

    select ... for update; select ... lock in share mode; の違いがよくわからなかった。 データを更新する時に必要なロックは、for update データを参照する時に必要なロックは、share mode と体感的に理解できるのだが、どちらのロックを取ったときも、他の誰もデータを更新、削除できない。 また、どちらのロックも、(for update していたら、他から参照できないのかと思いきや)他の誰からも参照は可能。 ん?となると、この2つのロック、何がどう違うの?? その答えは ここ に書いてあった。(リンク先はPostgresだが、MySQLでも同じこと) 共有ロックとは、排他ロック(更新、削除、FOR UPDATE)をブロックする/される一方、共有ロック同士では互いにブロックしないというものです。 なるほど、share mode はセマ

    共有行ロックと排他行ロックの違い - shima111の日記
    d_animal141
    d_animal141 2014/03/11
    共有行ロックと排他行ロックの違い
  • SQL脳に優しいMongoDBクエリー入門 - taka512's blog

    mongoコマンドから接続した際にオールドタイプ(SQL脳)たる我々人類にも 調べやすい形でinsert、select、updateを行う方法を調べました。 定義参照 // use [データベース名] use [データベース名] // show databases show dbs // show tables show collections参照系 // select * from [コレクション名] db.[コレクション名].find() // select * from [コレクション名] where x=4 db.[コレクション名].find({x:4}) // select j from [コレクション名] where x=4 db.[コレクション名].find({x:4}, {j:1}) // select * from [コレクション名] limit 1 db.[コレクション

    SQL脳に優しいMongoDBクエリー入門 - taka512's blog
    d_animal141
    d_animal141 2014/02/03
    SQL脳に優しいMongoDBクエリー入門
  • makopi23のブログ 「SQLアンチパターン・レトロスペクティブ - データベース危篤患者の救出 -」に参加しました

    2013/2/26(火) 「「SQLアンチパターン・レトロスペクティブ - データベース危篤患者の救出 -」に参加してきました。 DoorKeeper(告知サイト) http://devlove.doorkeeper.jp/events/2775 Togetter http://togetter.com/li/462950 以下書籍をターゲットとした勉強会なのです。 会場はIIJです。参加者は130名くらいでしょうか。あと大阪会場ともTV電話システムで繋がれました。 この講演、前々からとても楽しみにしてました。 データベースやSQLは、ソフトウェアエンジニアにとっては避けて通れない道だと思います。 なんせ、DBがないシステムなんてほとんど考えられないですからねー SQLの知識はアプリ開発だけでなく、運用や保守でも要求されます。 かくいう私も、システム稼動直後からサーバルームに張り詰めて、ひ

    d_animal141
    d_animal141 2014/01/01
    makopi23のブログ 「SQLアンチパターン・レトロスペクティブ - データベース危篤患者の救出 -」に参加しました
  • 楽々ERDレッスン 第1回:「お持ち帰りご注文用紙」編

    はじめに システム構築においてデータベース設計は不可欠です。そこで多くの方がデータベースの設計技法について書籍で学んだりするのですが、なかなか身についたと感じられないことも多いのではないかと感じます。 その理由は、実務で任せられる機会というのが少ないからというのが大きなものとして挙げられます。データベース設計というのは、やはり重要な箇所ですから自然と経験のある人に任せられることが多いのが実態です。しかもデータベース設計を担当するのはプロジェクト全体の中でもごく少数だけになりますから、なかなかチャンスが巡ってきません。 しかし、それを嘆いているばかりではスキルが身につかないのも道理です。そこで身近にあるものを何でも手当たり次第にデータベース設計のネタにしてしまうことで、コツコツと地力をつけていこうというのがこのシリーズの主旨です。 合言葉は、「表組みを見たらERDを描け!」 。では、張り切っ

    楽々ERDレッスン 第1回:「お持ち帰りご注文用紙」編
    d_animal141
    d_animal141 2013/11/21
    楽々ERDレッスン 第1回:「お持ち帰りご注文用紙」編
  • MySQLで、正しいデータ型を使うことはどのくらい重要なのか? | Yakst

    テーブル設計においてカラムのデータ型を正しく決めることには、どのような利点があるのかについて。単純に扱う値と同じ型を選ぶべきであるというだけではなく、なぜそうあるべきかについて、内部的な効率の面から解説する。 パフォーマンスに関する話の中で、カラムに値を保存するのに正しいデータ型を使うことの重要性を説いているのを聞くことがよくある。例えば、数値はINTやBIGINTで表現し、IPアドレスにはINT UNSIGNEDを使い、VARCHAR(255)の代わりにVARCHAR(60)を使うといったことだ。 このアドバイスは正しい。しかし、今日はもう少し詳細の説明を試みてみようと思う。 理由 この最適化が正しいと思う3つの理由は以下の通りだ。 文字列として数値データを扱うことは、文字コードや照合処理のCPUオーバーヘッドが余計に必要になってしまう。例えば、'Montréal' = 'Montrea

    d_animal141
    d_animal141 2013/11/19
    MySQLで、正しいデータ型を使うことはどのくらい重要なのか?
  • データベースアプリケーション開発を炎上させる負のスパイラル

    毎度おなじみ、はてブのホットエントリに「SIをダメにする負のスパイラル」というタイトルのまとめが掲載された。きしだ氏とはかなり視点は違うものの、開発現場の問題点については少し思うところがあるので意見を書いてみようと思う。と言っても、以下の話の内容はデータベースアプリケーションに限定した話であり、またSIerだけに限った話ではないのでその点はご容赦頂きたい。もちろんSIer各位の案件はデータベースは必須なので、エントリで触れる問題点には該当するだろう。 Q.なぜ炎上するのか? A.正しいデータベース設計ができていないから結論から言おう。データベースアプリケーションの開発が炎上するのは正しいデータベース設計ができていないからだ。ここでいう「正しい」とは、論理的に証明できる正しさという意味ではない。「来こうするべき」といった意味で捉えて欲しい。 「炎上」というのは、例えばテストが通らない、バ

    データベースアプリケーション開発を炎上させる負のスパイラル
    d_animal141
    d_animal141 2013/11/18
    漢(オトコ)のコンピュータ道: データベースアプリケーション開発を炎上させる負のスパイラル
  • 第1回 データベース設計とは:初めてのデータベース設計|gihyo.jp … 技術評論社

    かつては非常に高価なもので、手軽に導入できないという印象のあったデータベースですが、現在では、PostgreSQLMySQL、Firebirdなどといったオープンソースのデータベースが商用のものに引けを取らない機能、性能を備えるようになり、それほど規模の大きくないWebアプリケーションであっても、あたりまえのようにデータベースが使用されるようになりました。 特集では、Webアプリケーションを初めて開発するという方に向けて、データベース設計の基について説明していきます。なお、一言にデータベースといってもいろいろなものがありますが、いわゆるテーブルによってデータを管理するリレーショナルデータベースを対象とします。 今回は、データベース設計の全体的な流れについて説明します。 データベース設計とは、データベースによってデータを管理できるように、現実の世界を抽象化してデータモデルを作成していく

    第1回 データベース設計とは:初めてのデータベース設計|gihyo.jp … 技術評論社
    d_animal141
    d_animal141 2013/11/18
    初めてのデータベース設計:第1回 データベース設計と
  • SQL LIKE - 1Keydata SQL入門

    SQL > SQL コマンド > Like LIKE は WHERE 句に使われるもう一つのコマンド。基的に、 LIKE を使って、あるパタン (pattern) により必要なデータを見つけることができます。逆に言えば、 IN を使う場合、必要な条件がよく分ります; BETWEEN) を使う場合、ある範囲を示すことになります。 LIKE のプログラミングは次のようになります。 {パタン}はよくライルドカード (wildcard)を含みます。以下は幾つかの例を挙げます。 'A_Z': すべて 'A'を始めとし、続いて何れの一文字を入れ、そして 'Z' で終わる文字列。 'ABZ' 和 'A2Z' はこのパタンに一致しますが、 'AKKZ' はそれに一致しません ( A とZとの間に二文字があり、一文字ではないから)。 'ABC%': すべて 'ABC' を始めとする文字列。例えば、 'AB

    d_animal141
    d_animal141 2013/08/05
    SQL LIKE - 1Keydata SQL入門