補足 この記事は旧徳丸浩の日記からの転載です。元URL、アーカイブ、はてなブックマーク1、はてなブックマーク2。 備忘のため転載いたしますが、この記事は2008年6月2日に公開されたもので、当時の徳丸の考えを示すものを、基本的に内容を変更せずにそのまま転載するものです。 補足終わり 昨日のエントリ(徳丸浩の日記 - そろそろSQLエスケープに関して一言いっとくか - SQLのエスケープ再考)は思いがけず多くの方に読んでいただいた。ありがとうございます。その中で高木浩光氏からブクマコメントを頂戴した。 \がescape用文字のDBで\のescapeが必須になる理由が明確に書かれてない。\'が与えられたとき'だけescapeすると…。自作escapeは危うい。「安全な…作り方」3版で追加の「3.失敗例」ではDBで用意されたescape機能しか推奨していない このうち、まず「\」のエスケープが必
図6●複合インデックスの利用は,検索条件のカラムに左右される<BR>複合インデックスとは,1つのインデックスに複数カラムが含まれるインデックスである。インデックス内のカラムの順番と,検索条件のカラムによって,複合インデックスの利用の可否が決まる。(1)検索条件に指定したカラムが1個の場合,そのカラムが複合インデックスの先頭カラムでなければインデックスは利用しない。(2)検索条件に指定したカラムが複数個の場合,それらのカラムが複合インデックス内の先頭から使われていればインデックスは使われる。WHERE句内の順番は関係ない NULL値は,特殊な値である。この値は,「データが存在しない」という意味を持つ。すべてのデータ型に対して利用できるが,特殊な値であるため,その扱いには注意が必要である。 NULL値の特性を説明する前に,NULL値の表示方法を説明しておこう。NULL値は「データが存在しない」
連休中はWiiのマリオカートをやりまくってやっとVR7000越えたmikioです。愛車はマッハ・バイクとインターセプターです。さて今回は、分散ハッシュデータベースサーバTokyo Tyrantでmixiの最終ログイン時刻を管理するようにした時の苦労話を書きます。 ログイン処理は負荷地獄 mixiでは、全てのユーザについて、各々の最終ログイン時刻を管理しています。「マイミクシィ一覧」や「お気に入り」などの画面で、友人が近い時間にログインしていてコミュニケーションがとりやすい状態にあるかどうか確認できるようにするためです。 mixiのほぼ全てのページはログインしないと見られないページなので、ほぼ全てのページにアクセスされるたびにログイン確認が行われます。したがって、最終ログイン時刻はほぼ全てのページにアクセスされる度に更新されることになります。mixiの中で最も重いデータベースのひとつとして「
Apache/PHP/MySQL/SQLite/SQLiteManage/PhpMyAdmin/Zend OptimizerをWindowsにまとめてオールインワンでインストールすることができるようになっているのがオープンソースで開発されているこの「VertrigoServ」。 これらの各ソフトについて簡単に設定を変更できるコントロールパネルっぽいものがタスクトレイから一発で呼び出せるようになっており、非常に設定が簡単です。また、インストーラは日本語化されているので安心です。 実際のインストール方法などは以下から。 VertrigoServ http://vertrigo.sourceforge.net/ ダウンロードしたら実行します 「OK」をクリック 「次へ」をクリック 「同意する」をクリック 「次へ」をクリック さらに「次へ」をクリック 「インストール」をクリック インストール中……
SQL文を実行する際のパフォーマンスに大きな影響を及ぼすものとして,もう一つ,インデックスがあります。インデックスについては,どう定義すべきかというデータベース設計上の問題と,インデックスを有効に使うためのSQL文をどう書くべきかというコーディング上の問題があります。 ここではテーブル設計上の問題を主に取り上げます。SQL文のコーディングについては囲み記事「SQL文を最速にする11のポイント」を参照してください。 インデックスは,テーブルの検索速度を向上させるためのものです。それぞれのSQL文に対して最適なインデックスを定義するのが理想的ですが,実際にはある程度限られたインデックスで,必要なパフォーマンス要件を満たすようにインデックスを定義する必要があります。加えて,どんなSQL文が実際に発行されるのかがあらかじめわかっていない場合は,適当な想定に基づいてインデックスを定義しておかなくては
ついでに、今回ひっかかっていたところ。 DBD::SQLite 1.12では、こういうスクリプトを実行すると、最後に「closing dbh with active statement handles」という警告が出る。要するに一度も実行されないステートメントハンドルは、finishしてもActiveのまま残ってしまう。 use strict; use warnings; use DBI; unlink 'test.db'; my $db = DBI->connect('dbi:SQLite:test.db'); $db->do('CREATE TABLE test (data TEXT)'); my $sql = 'INSERT INTO test (data) VALUES (?)'; my $st = $db->prepare($sql); my @items = (); $st->
分析可能なSQLデータを整えるには、SQL言語の中でも特定の節や演算子の使い方を理解する必要がある。本稿で紹介するTipsでは、望む結果を得るためにはどのようにステートメントを構築すればよいかということを紹介する。 適切な意味を持つようにデータを整えるのはだ。ときには、単純にソートを行うだけでよい場合もある。また、ときにはグループ化を行って分析、要約化する必要がある場合もある。幸い、SQLでは多数の節や演算子が提供されているため、それらを用いてソートやグループ化、要約化を行うことが可能だ。以下に述べるTipsを読めば、いつソートを行うべきか、いつグループ化するべきか、そしていつどのように要約化するべきかが、明確に理解できるようになるだろう。それぞれの節と演算子に関するより詳しい情報はBooks Onlineを参照して欲しい。 #1:ソートによって順番を定める たいていの場合、データにとって
「データベースはブラックボックス。どんなSQL文を投げたらどんな結果が返ってくるかさえ知っていればよい」---そう思っている人も多いかもしれません。 しかし,本物のソフトウエア・エンジニアを目指すのであれば,データベースが動く仕組みを学ぶことは避けて通れません。パフォーマンスなどに問題が生じたときどこから手を付けていいのか皆目見当がつかない,といった事態に陥りかねません。 市販のRDBMSの内部はかなり複雑ですが,基本的な部分を理解するのはそれほど難しくありません。この特集でデータベースの動く仕組みを理解してください。 イントロ ●ブラックボックスのままでいいの? 基礎から理解するデータベースのしくみ(1) Part1 ●SQL文はどのように実行されるのか 基礎から理解するデータベースのしくみ(2) 基礎から理解するデータベースのしくみ(3) 基礎から理解するデータベースのしくみ(4) 基
こんにちは、櫛井です。 今回は、サイト運営を行う上で知っておきたいサーバの種類やその役割、DBサーバについてお送りします。記事タイトルに“超基礎入門”とあるように、あまり難しい言葉を使わずに書いてみます。 サーバの種類と役割 ユーザーが画像やテキストなどを投稿できる CGMコンテンツの場合、情報を表示するだけの一般的なウェブサイトとは違ったサーバ構成を行う必要があります。データの置き場所を分散させ、役割を決めたサーバを適切に配置することで、負荷分散や万が一の障害対応時の問題切り分けなどにも有効といった特徴があります。 では、具体的にどのようなサーバがあるか、それぞれどのような役割をしているか、代表的な例を紹介してみます。 ※かっこ内は社内での通称 アプリケーションサーバ(app) プログラムが走る。ここで表示するコンテンツを作ってたりする。 ウェブサーバ(www) リバースプロキシとして稼
なんちゃって個人情報は「Generator of the Year」にて【便利賞】を受賞いたしました!! 投票して下さったみなさま、本当にありがとうございました。 今後もどんどん使ってやって下さい。 プログラム等に使えるかもしれない個人情報のテスト用データを作成できます。特に説明が必要なものでもないので、とりあえずやってみていただければわかると思います。 念の為書いておきますが、生成した偽個人情報により発生したいかなる損害も当方は一切関知しません。たまたま名前が実在の人物と同姓同名になってしまうかもしれませんし、特に電話番号や携帯については実際に使われている番号と重なることがありますから、扱いには十分注意して下さい。 何かご要望とかありましたらお気軽にブログまでコメント下さい。 HTML シンプルなHTMLのテーブルで出力します。 XML ルートを<records>、各レコードを<reco
MySQLのチューニングにおいて非常に重要となるメモリ(バッファ)関連のパラメータについて、 チューニングのポイント DSASのとあるDBサーバ(実メモリ4GB)の実際の設定値 をまとめてみます。 また、必要メモリの総量の計算や限界値を越えてないかチェックしてくれるスクリプトも紹介します。 是非、参考にしてみてください! まず最初に注意点を。 バッファには2つのタイプがあります。 グローバルバッファ スレッドバッファ グローバルバッファはmysqld全体でそのバッファが1つだけ確保されるもので、 これに対し、 スレッドバッファはスレッド(コネクション)ごとに確保されるものです。 チューニングの際にはグローバル/スレッドの違いを意識するようにしましょう。 なぜなら、スレッドバッファに多くのメモリを割り当てると、コネクションが増えたとたんにアッという間にメモリ不足になってしまうからです。 in
はじめに SQLというのは変わった言語です。こういう印象は人によって差があると思いますが、おそらく最初に手続き型言語を学んだ正統派のプログラマやSEほど強くそう感じると思います。 SQLに違和感を感じる理由は、いくつか考えられます。第一に、SQLが「集合指向」という発想に基づいて設計された言語で、この設計方針を持つ言語が少ないことです。そして第二に、それに劣らず大きいのが、最初に学んだ言語のスキーマ(概念の枠組み)が心理的モデルとして固定され、それを通して世界を見るようになるため、異なるスキーマを持つ言語の理解が妨げられることです。 本稿では、HAVING句のさまざまな応用方法を紹介していきますが、その際、手続き型言語とSQLの考え方を比較します。それによって、私たちが手続き型言語で身に付けた無意識の心理的モデルを自覚し、集合指向という発想に感じる違和感を軽減したいと考えています。 今回は
【関連記事】 本内容についてのアップデート記事を公開しています。あわせてご確認ください(編集部) Security&Trustウォッチ(60) 今夜こそわかる安全なSQLの呼び出し方 ~ 高木浩光氏に聞いてみた http://www.atmarkit.co.jp/fsecurity/column/ueno/60.html Webアプリケーションに対する攻撃手法の1つであるSQLインジェクションの存在は、かなり広く知られるようになった。しかし、その対策はまだ本当に理解されていないように思える。フォームから渡された値の特殊文字をエスケープしたり、PHPのmagic_quotes_gpcといった自動エスケープ機能をオンにするだけで対策したつもりになっていないだろうか。 基本はもちろん、セカンドオーダーSQLインジェクションやマルチバイト文字を利用したSQLインジェクションの攻撃パターンや、その対
■製品概要 SQLiteはパブリックドメイン(著作権放棄)として提供されており、無償で入手可能なデータベースだ。ソースコードの改変や第三者への再配布も自由に行える。 ほかのRDBMSと大きく異なるのは、SQLiteがいわゆるクライアント/サーバ構成ではないという点だ。デーモンが常駐するわけでもなく、1データベース1ファイルからなるその構成は、むしろMicrosoft Accessに近いかもしれない。実行プログラム(ライブラリ)からデータベースに対する操作も、ファイルに対する読み書きという形で行われる。また、ユーザーという概念もSQLiteではサポートしておらず、データベースに対するアクセス制御はすべてOSのユーザー属性によって行う。 もっとも、SQLiteが一般ユーザーによる利用を想定したパーソナルデータベースであると断じるのは早計だ。SQLiteの特徴として、公式ページで挙げられている主
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く