• ベストアンサー

データベースの「スレッド」とは?

お世話になります。 先日、システムエンジニアの人が、「データベースのスレッド云々」と 口にしていたのですが、どういう意味か解りませんでした。 その後、インターネットで調べてみたのですが、もともとは「糸」や「繊維」 という意味らしいですが、それ以上のことが理解できませんでした。 SQLでいうと、どういった処理内容に該当するのでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>リンクを見てみましたが、さっぱりわかりませんでした。 >知らない用語が次々にオンパレードであったため、 この辺の話は、このサイトの対話形式の話にでてきます。 http://www.atmarkit.co.jp/fdb/rensai/drk08/drk08_3.html http://www.atmarkit.co.jp/fdb/rensai/sqlsvr08rev/sqlsvr08rev01_03.html No1さんが指摘したサイトと同じところですね。SQLServerのカテゴリーで投稿しているので、 >SQLでいうと が「SQLserver」「SQL」どちらを指しているのかわかりませんが、まあ、No1さんの指摘で間に合ってしまうのでしょう。 分かりやすいたとえだと、一人のユーザーが1つのクライアントツール(Webアプリでもいいし、Windowsクライアントでもいい)から2つの検索条件で、2つのクエリーを順番に検索ボタンを押して、検索したとします。 片方は、単独で1分もかからずに結果を表示する物と、もう片方が10分以上かからもの。これを10分物を検索して、から1分物を検索したとします。この場合、検索結果を表示してからではなく、待たずにボタンが押せる状態だとして。 さて、一般の方なら、順番に押したから、順番にかえってくるだろう、と思うのか、いや、1分しかかからない方が先に結果が表示されてしまうと思うのか? どちらが正解でしょうか。 答えは、どちらも正解です(テレビ番組的なひっかけですね)。 それは、DBMSの構築や、設定の問題で、設計側の要望でどうにでもなり、それぞれに意味があります。 この辺の話と、プログラミングのマルチスレッドテクニックとちょっと違う事になりますが、 http://docs.oracle.com/cd/E22054_01/html/821-2495/bkaig.html CPUが一個であった場合、当然、シリアルに処理だけを考えるだけ良かったわけです。しかし、上記のように、一人のユーザーが幾つものジョブを投げてくる場合や、マルチーユーザーで一人が幾つ物ジョブを投げてくる場合、 順番に処理するだけでいいのか? と言う疑問が浮いてきますよね。その場合、先に実行していいものが在るわけです。それを実行してから、他の処理をする。なんて事があってもいいのでは? て、考えるわけです。 当然、これは、DB構築設計者が許可すれば、と言う前提条件が付きます。 では、順番でなければ、どのように順番を決めるかということですが、それは、ジョブに関連性があるのか? と言うだけのキューで後は、実行順番になるわけです。では、今までと違うのでは? そう、CPUが一個であると、CPUが同時実行される計算の数は、CPUによって決まっているので、いくらアプリ側で、同時に又は、順番を決めても、どうにもならないことなのです。 (初期のInetlのペンティアムだと4つぐらいでした。 http://ja.wikipedia.org/wiki/Core%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3 などを参考に(あくまで参考文献です) それまでのIntelのCPUはシスクプロッセサーでしたね(実行した順番に処理されるだけ) ) とすれば、CPU側のやり方で、マルチスレッドと言う、同時に実行してくれる仕組みでプログラミングしてやらないと、いくらアプリ側で順番を決めても、並列処理も、できなくなります。 で、整理すると、DB側でジョブがスケジューリングされます。CPU側でジョブ(実効命令)がスケジューリングされます。 この2つのスケジューリングによって、もし仮に、エンドユーザーが投げかけたSQL文に依存関係があっても、並列に処理され、設計どおりに順番に検索結果が返ってきます。 それを踏まえて、これを読むと http://support.microsoft.com/kb/899556/ja http://msdn.microsoft.com/ja-jp/library/ms345185.aspx あ、そいうことね。と言う事がわかります。Oracle側(RDBMS)の解説書を読むとその辺が良く分かるかと思います。 http://docs.oracle.com/cd/E16338_01/server.112/b56301/manproc001.htm http://search.yahoo.co.jp/search?p=Oracle+%E5%85%B1%E6%9C%89%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC&aq=-1&oq=&ei=UTF-8&fr=ie8sc&n=10&x=wrt そこにも専門用語「ディスパッチャ」なんて意味不明な物がでてきますが、 http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF-8&fr=ie8sc&p=Oracle+%E3%83%87%E3%82%A3%E3%82%B9%E3%83%91%E3%83%83%E3%83%81%E3%83%A3%E3%81%A8%E3%81%AF なんて調べればいいわけですね。 これらは、クライアントからキューがあるたびに1つのプロセス(タスクマネージャーで見るプロセス)を起動します。それを共有サーバーと呼んでいます。 何がいいたいかと言えば、1万人のユーザーが同時にキューを投げれば、1万個のプロセスが起動するということです(実際には、他の設定により、そうはならないがMAX)。 それぞれのプロセスで3、4つのCPU( コアおよびスレッド)を、あますことなく、使ってやるようにマルチスレッドと言うプログラミング技術でコーディングしてやることで、それぞれのプロセスの実行時間が短くなります。 その結果をDB側のエンジン(プログラム)で整理して、クライアントに返すわけです。 で、最初のリンクに戻るわけですが、DBのパフォーマンスアップとか、正確性、整合性を考えると、CPUとかのアーキティクチャーを理解なしでは、とうてい考えられない。それはプログラミングの観点から見ましょう。と言うことです。

tobochite
質問者

お礼

ご回答ありがとうございました。 正直、理解するのに想像以上の時間がかかってしまいました。 大変ご丁寧にありがとうございました。

その他の回答 (2)

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.3

ANo.1です。 >リンクを見てみましたが、さっぱりわかりませんでした。 >知らない用語が次々にオンパレードであったため、 >どんどん深みにはまりつつ、今何を自分が調べているか >迷子になってしまいました。 ## う~ん。タブン真剣に調べれば調べるほど泥沼にはまり込んでしまわれるような予感が。 SQL文⇒データベースソフト(この場合はSQL Server)⇒OS上でいくつかのスレッドを使っている⇒OS という関連(正確かといわれるとちょっと違いますが)のイメージをつかんでもらって、 ANo.2の方の回答を見てもらって・・・ と理解していってもらって、どの程度で満足されるかは、お任せします。 というしかないように思えてきました。 ・・・最後は、OS上でアプリケーションがどういう風に動くのか、データベースソフトがどういう つくりになっているのかとかまでいってしまいますので、知らない言葉のオンパレードに ならないはずがないとは思います。 >「データベースのスレッド云々」 の「云々」を細かく書いていただくとその部分のみの説明ということもできますが、 今の質問内容では、全般の話をせざる得ませんので。

tobochite
質問者

お礼

お礼が遅れまして申し訳ありません。 おかげさまで、ある程度の理解ができました。 改めて御礼いたします。

  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.1

>SQLでいうと、どういった処理内容に該当するのでしょうか? SQLじゃないです。 直下のサイトの内容を理解してもらう必要はないですが、例えば直下のサイトを見てもらうと。 http://www.atmarkit.co.jp/fdb/rensai/drk09/drk09_1.html --引用-- SQL Serverでは1つのトランザクションが処理される背後で、さまざまな役割のスレッド、例えてみれば舞台の“裏方”のようなスレッドが動いています。 --引用おわり-- というのが書かれています。 この表現でSQL ServerというプログラムがSQLを実行するにあたっていくつものスレッドが OS上で実行されていますということが分かってもらえると思います。 ということで、スレッドというのはDBの用語ではなく、OSの用語ということでした。 で、OS スレッドで検索してみてもらうと Wiki http://ja.wikipedia.org/wiki/%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF) kotobank http://kotobank.jp/word/%E3%82%B9%E3%83%AC%E3%83%83%E3%83%89+(OS) 等の説明が見つかると思います。 とりあえず、みてみてください。

tobochite
質問者

お礼

ご回答ありがとうございます。 リンクを見てみましたが、さっぱりわかりませんでした。 知らない用語が次々にオンパレードであったため、 どんどん深みにはまりつつ、今何を自分が調べているか 迷子になってしまいました。 コンピュータって、改めて難しいものですね。

関連するQ&A

  • データベース、ネットワークって具体的にどういった意味ですか?

    過去に,データベース、ネットワークを活用したことはありますか?あれば,具体的に書きなさい。 これが,履歴書作成の欄にあるのですが, データベース、ネットワーク とは一体なんのことでしょうか?インターネットや辞書もこれに該当するのでしょうか?質問の意味が理解できません。分かる方教えてください。よろしくお願い致します。

  • Threadのinterruptメソッドについて

    javaの勉強をしているんですが、Threadのinterruptメソッドの説明が「そのスレッドがwaitで待機している場合は、それを再開してwaitにInterrupException をスローさせる」と説明が書いてあるのですが、意味が理解できません。 スローさせるスレッドは待機状態であったスレッドを指し例外がスローされて、catch文に処理が移るのでしょうか? 初心者なので分かりやすく説明をお願い致します。

  • 楽天トラベルのようなデータベース検索を作るには‥

    よく旅行会社の検索システムに使われている、*月*日、*泊、*人、予算*円を入力すると、該当一覧が出てきてクリックすると詳細なページへジャンプする、あのシステムを外注自作も含めて導入したいと考えています。 xoopsやCMSを含め、そのようなデータベースを構築するのに、最も適したシステムは何でしょうか。 もしSQLなどのデータベースを使って構築するのが最適な場合、業者さんに頼むとどのぐらいかかるものでしょうか? データベース検索数自体は当初は少なく100件ほどです。 更新のしやすさもポイントとさせてください。 具体性に欠けるかも知れませんが、宜しくお願い致します。

  • データベースサーバー構築

    質問場所がここで良いか少し不安ですが 主にWebで公開するデータベースのシステムを作ろうとしています 自分のスキルの範囲でやろうとしていますが少し分からないことがあるので 教えてください まず 自分のできること(やっていること)は ・Windows系サーバー(IIS)を使ってVBスクリプト(ASP)で ローカルにあるMDBファイルにアクセスし商品を紹介する動的ページの作成 です。 今後複数ユーザーでデータベースを使うことになるので システムを変えていく必要がでてきて MDBはダメだという事になり色々調べた結果、今後のことも考えWebサーバーとは別に データーベースサーバーを作ってやると言う結論になりました 分からないこと(あやふやな理解になっていること) 1.データベースサーバーとは何か?  これは OSは別として、SQL Server、オラクル、MYSQLといった  RDBMSをインストールしただけのデータベース置き場専用という感じのPCを指すと言うことで良いでしょうか?  例えば Win2000のIISでwebサーバーを作りその中のASPページから  別PCにあるデータベースにアクセスする構成がデータベースサーバーを別に設けると言うことで正しいのかどうかと言うことなのです。 2.データベースは何がよいか?(SQL Serverでよいか?)  本来であれば、webで商品在庫を公開することがメインで更新頻度が少ないデータベース  (300人ぐらいで共有し1万~3万レコードです)です、なおかつ複雑なSQLは発行しません。  ほぼASPからの接続で抽出(ID=** という単純な抽出条件)しか使わない、あとは並び替え位なので  MYSQLが向いているようでしたが、私はLinux系は全く分かりません。  なので メンテナンスの面や勉強する時間の節約からすれば  Windowsで動くSQL Serverが良いと思うのですが(MYSQLもWindowsで  動くけど得意とする高速性はLinux系でないと発揮しないみたいなのでやめようと思っています)  上記のような条件と使い方の場合、そんなに処理時間やマシンの負荷に両者間では大差があるのでしょうか?  MDBの時でもあまり不具合を感じなかったので、それよりは格段にSQL Serverは早いし負荷が少ないと聞いていますので  大丈夫かなと思っています。 3.SQL ServerをインストールするPCは何が最適か?  先も述べたようにデータベース専用として使う予定ですが  Win2000でよいのでしょうか?(XPより2000の方が安定がよいと思うので) それともWin2003Serverに  インストールできるならその方がよいでしょうか?  とにかく安定度が一番なのですが、そもそもWin2003Serverに  インストールできるのでしょうか?(もうすぐ2008?がでるからそれにしようかとも検討中です) 4.最終的に自分の思っていることと実体の構成(理解)は理解は以下のような感じで正しいのでしょうか?    複数でデータベースを共有するため、MDBでなくネットワークに強い (共有データベースで壊れにくい?壊れない?)データベースに変えるため、windowsで動くSQL Serverを使う  そのSQL ServerはwebサーバーがあるPCとは別のPCにインストールして使う  (データベースサーバーを別に用意する)ことでwebサーバーの負荷も減らし、データベースも快適に動くようにする 最終的にはWin2003Server×2台で1方はwebサーバー1方はSQL Server をインストールして使うことで上記を実現させる 5.SQL ServerのデータベースはMDBのような最適化というような作業が必要なのでしょうか?  そもそも 似ているようで違う MDBとSQL Serverでその特徴がきちんと理解できていないので  愚問なのかもしれませんが 気になるので教えてください 6.オラクルと違いSQL Serverはレコードの更新や追加の時  その行(レコード)だけロックすると言うことができない?  ようなので、Aさんが自分の商品を更新中にBさんも更新する  と言うようなことが起こった場合(MDBはこれになると壊れると書いているので MDBをやめました)  Aさんの更新が終わるまでBさんは更新できない(更新終了まで待つ)と言うことになるのでしょうか?  また、このとき商品一覧を要求された場合、更新中の情報はどの様になるのでしょうか?(更新終了まで見れない?) なんか 分かりにくい質問になってしまいましたが、お金をかけて 買ったはいいが、理解不足でやりたいことができなかったと言うことは 避けたいので ご教授下さい。 よろしくお願いします。

  • データベースをJavaScriptで処理する

    ある相談をされました。 不動産のサイトで、希望の条件の物件を検索できるようにするらしく、 ”データベースをJavaScriptで処理する”らしいのですが この言葉の意味から推測されるデータベースとはどんな形式のものが 考えられるでしょうか? 仮にaspファイルだとするとJavaScriptで処理できるのでしょうか? また、この検索システムのおおざっぱなやり方を 教えてもらう事ができますか? お願いします。

  • 他のデータベースとのテーブル結合

    いつもお世話になっております。 VB.netでwindowsアプリケーションの作成しているところです。 SQLサーバーのテーブルを参照していますが、テーブルの結合は同じデータベース内にないと結合できないのでしょうか? 'SQL接続処理 Dim strConn As String = "Password='';User ID=sa;Initial Catalog=test;Data Source=server1" と、testというデータベースがありその中に幾つかテーブルがあります。 このtestデータベースにないテーブルが必要になり、aaaデータベース内の テーブルを結合しようとしたのですが、出来ません。 Catalog=test,aaaとやってみたり、SELECT * FROM tbl1,aaa.tbl2などとしてみましたが、遠いようです。 SQLのクエリを使って、テーブルの追加をすると同じデータベース内のテーブルしか出てこないので、出来ないのかなと思っていますがどうでしょうか? わかる方がいましたら教えてください。

  • データベース

    基本情報処理のデータベース技術についてなのですが、 次の問題の解答を教えて下さい。できれば簡単な解説もお願いします。 問1.データベースシステムを導入することによって期待できる効果を2つ選べ。   ア コード設計作業の軽減   イ 重複データの削減   ウ データ転送の高速化   エ プログラムとデータの独立性向上 問2.データベースのデータ構造に関係しない用語はどれか。   ア 表構造   イ ネットワーク   ウ 木構造   エ SQL 問3.次のデータベースに関する記述のうち、正しいのはどれか。   ア プログラムとファイルが密接な関係にあるので,プログラムがつくり易い   イ データに重複が無いので,業務によってデータ内容に矛盾が発生しない   ウ 適用業務ごとに専用のファイルがないので、ファイル管理がしにくい   エ データの扱いが標準化されるために、個別の業務処理がしづらい   

  • データベースのデファクトスタンダード?

    今、医療事務システムの某メーカー製品の情報を収集しています。その中で「サーバやデータベースのデファクトスタンダードを使用しており…」という記述がありました。 医療事務システムはメーカー変更の際、データ移行の問題がよく取り挙げられます。標準=よく使われている…そういった意味に捕らえています。ということは、そのデータベースで作成された同士ならデータの形式が違うから云々でデータ移行不可能です、なんて有り得ないんじゃないかと思っています(違うのでしょうか?) その考えで単純に、標準といわれるものを選んでおけば、後々選択肢の幅を狭めなくともよいと思いました。そこで質問なのですが、データベースのデファクトスタンダードって何ですか?

  • 文字数の多いデータに最適なデータベース

    お世話になります。 文字数の多いデータに最適なデータベースについての質問です。 Web+DBのシステムで、テキストファイルを変換したデータ(負荷の軽減のため予め変換したHTMLの自動リンクを埋め込みます)をデータベースに登録したいのですが、SQL Server 2000では文字数が制限を超えてしまいます。 ブログのようにXMLファイルに変換すれば、文字数の問題は無くなるとは思いますが、Webサーバ側の負荷が気になります。 ブログはXMLファイルのようですが、こちらの教えてgoo!等の質問欄のデータの管理等には、一般的にはどのようなデータベースを使い、負荷の軽減等でどのような処理を行っているものなのでしょうか? 初歩的な質問で申し訳ございませんが、よろしくお願いいたします。

  • スレッドの待機と再開

    お世話になります。 マルチスレッドのプログラムで悩んでいます。 public class ThreadLocker {  private static boolean isLocked = false;    public static void lock() {   isLocked = true;   while(isLocked) { ; }  }    public static void unlock() {   isLocked = false;  } } まず、このようなクラスを定義しました。そして複数のスレッドが ThreadLocker.lock(); を呼び出して、処理の進行をストップしている状態があるとします。この状態に対して、とある別のスレッドが ThreadLocker.unlock(); を呼び出すと、それまで無限ループしていたスレッドが解放されて処理を始める、という感じです。 この方法を試してみましたが、無限ループで何も処理をしていないとは言え、リソースを食いまくっているようで、マシンが重くなってしまいました。 そこで、スレッドの待機・再開を行う事ができる wait / notify(All?) メソッドを使用すれば良いのではないかと考えたのですが、具体的な方法が分からず、質問させていただきました。 具体的に、どのインスタンスの wait 及び notify(All?) を呼び出せば良いのかが分かりません。 APIリファレンスの「現在のスレッドはこのオブジェクトのモニターのオーナでなければなりません。」の意味もよく分かりません。 ちなみに、待機しているスレッドは複数あり、class Lock の method execute 中で ThreadLocker.lock() しているとします。 また、再開を促すスレッドは1つで、class Unlock の method execute 中で ThreadLocker.unlock() を呼び出すものとします。 そして、それぞれのスレッドは、お互いのインスタンスを知りません。(説明しづらいので、補足要求があれば、ソースで示します。) よろしくお願いいたします。

    • ベストアンサー
    • Java