(58)【調査した分野】(Int.Cl.,DB名)
【発明の概要】
【発明が解決しようとする課題】
【0006】
上述したような一般的な分散データベースによれば、複数のノードで1つのグループを構成して、そのグループの中で1つのノードが他のノードと通信することにより、通信先のノードが別のノードと通信したときの情報も取得することで、少ない回数の通信によって多数のノードの情報を取得することができる。これを繰り返すことによってグループ全体の情報をそれぞれのノードが取得することができる。通信先の選択はランダムに選択することで一様に広がる。
【0007】
しかしながら、接続するノードをランダムに選択することによってノード数が増加した場合に、一部のノードに集中して負荷がかかる可能性が考えられる。そのため、負荷のかかったノードのレスポンスが悪くなったり、停止したりする可能性がでてくる場合がある。逆に一部のノードが選択されずなかなか情報共有されない可能性も考えられ、効率がよくないという課題があった。
【0008】
図5、
図6を用いて一般的な情報問い合わせ動作の例について説明しておく。
図5と
図6は対応している。
図6(a)において、ノードが4つと仮定し、ノード(N1)から他のノード(N2〜N4)への情報への問合せR1、R2、R3は、順序はランダムで定期的に実行する。他のノード(N2〜N4)からも同様に実行される。
図5において、
図5(f)に凡例として示すように、マーク■は未取得、不明状態、マーク○は取得済み、マーク□は取得予定(リクエスト)、マーク◇は取得予定(被リクエスト)を示す。
図5において、各ノード間の問い合わせ状態、情報取得状態を示したリスト10をノード状態リストという。
【0009】
図5(a)は4つのノード(N1〜N4)が、まだどのノードとも情報を共有していない最初の状態を示す。
図5(b)、
図6(b)は、次の状態を示し、ノード(N1)はノード(N2)に問い合わせ(所得予定(リクエスト))、ノード(N2)はノード(N4)に問い合わせ、ノード(N3)はノード(N1)に問い合わせ、ノード(N4)はノード(N3)に問い合わせる状態を示す。
図5(c)、
図6(c)は、更に次の状態を示し、ノード(N1)はノード(N3)に問い合わせ、ノード(N2)はノード(N1)に問い合わせ、ノード(N3)はノード(N4)に問い合わせ、ノード(N4)はノード(N2)に問い合わせる状態を示す。
図5(d)、
図6(d)は、更に次の状態を示し、ノード(N1)はノード(N4)に問い合わせ、ノード(N2)はノード(N3)に問い合わせ、ノード(N3)はノード(N2)に問い合わせ、ノード(N4)はノード(N1)に問い合わせる状態を示す。
図5(e)は、ノード(N1〜N4)がすべてのノードの情報を取得し、安定状態になったことを示す。
【0010】
問い合わせ先はランダムに選択されるので、選択によっては
図6(e)に示すように、ノード(N1)にノード2からノード(N2〜N4)の問合せが集中する可能性があり、ノード(N1)に負荷がかかることが考えられる。ランダムなので連続して同じノードに問合せる可能性もあり、短期的にみると効率が良くない。
【0011】
本発明は、上記課題を解決するためになされたもので、複数のノードで構成されるピアツーピア型の分散データベースにおいて、個々のノードが他ノードの状態を効率よく取得して共有することを目的とする。
【課題を解決するための手段】
【0012】
請求項1記載の発明は、
複数のノードでグループが構成されるピアツーピア型の分散データベースにおいて、前記各ノードはノード状態リストを有し、 個々のノードが他ノードの前記ノード状態リストの所定の情報を問い合わせて取得して共有する共有手段と、
決まったルートで前記情報を伝播させていく伝搬手段と、
ノードのグループ登録時に登録された順序で前記ノード状態リストを更新し、前記順序
で最後にあたるノードは前記順序の先頭から前記所定の情報を取得して
ノードをリング状に接続する手段と、
ノード数が上限値Mになったとき、ノード[1]からノード[M/2]を第1グループ、ノード[M/2+1]からノード[M]を第2グループとして分割し、ノード[M/2]はノード[1]と接続し、ノード[M]はノード[M/2+1]と接続することによって前記グループを分割する分割手段と、
各グループのノードがグループ内で情報共有したら、別グループのノードに接続先を変更する手段と、
を有することを特徴とする分散データベース。
を、提供するものである。
【発明の効果】
【0016】
本発明によれば、複数のノードで構成されるピアツーピア型の分散データベースにおいて、個々のノードが他ノードの状態を効率よく取得して共有することができる。
【発明を実施するための形態】
【0018】
以下、複数のノードで構成されるピアツーピア型の分散データベースにおいて、個々のノードが他ノードの死活状態等の情報を取得する手段並びに方法について説明する。
<構成>
図4は本発明の一実施の形態であるネットワーク接続構成の概要についてのブロック図である。
図4のA1〜A4、Bは、ネットワーク100上に接続されたPC(パーソナルコンピュータ)あるいはサーバであり、以降はノード(Node)と称呼する。ノードA1からA4は、同じグループ(グループA)を構成するノードを意味する。ノードBは、グループAに所属しないノードを意味する。
【0019】
ノードA1、A2、A3、A4は、ノード状態リスト11、12、13、14、リクエスト送信用ノード情報処理プログラム21、22、23、24、リクエスト受信用ノード情報処理プログラム31、32、33.34、CPU41、42、43、44、データメモリ51、52、53、54を有する。
【0020】
ノード状態リスト11、12、13、14は、
図5、7、9で説明に使用するように、各ノードが、どのノードに問い合わせ予定(リクエスト)か、どのノードから問い合わせられるのか(被リクエスト)、死活状態等の情報を未取得なのか、取得済みなのか、という状態リストを記憶している。
【0021】
CPU41〜44は通信プロトコルを有し、各ノードを制御するもので、リクエスト送信用ノード情報処理プログラム21〜24並びにリクエスト受信用ノード情報処理プログラム31〜34を実行し、後述するノード情報共有処理を定期的に実行する。このリクエスト送信用ノード情報処理プログラム21〜24並びにリクエスト受信用ノード情報処理プログラム31〜34は便宜上分けて記載しているが、実際は一体化された1つのプログラムとして構成することができる。このリクエスト送信用ノード情報処理プログラム21〜24並びにリクエスト受信用ノード情報処理プログラム31〜34は、各ノードにインストールされている。
【0022】
また、NTP(Network Time Protocol)によって各ノードの時刻同期をはかっている。別々のノード で同時期に別の状態のリストを持った場合のコンフリクトを整合化するために、情報を取得したときの時刻も合わせて情報と共に記録しておき、複数のノード情報が入ってきて状態が異なる場合は、取得時刻の新しい方を採用する。
【0023】
データメモリ51〜54は、通常に各種データを記憶すると共に、各ノードから取得したメモリ残量情報、パフォーマンス情報等の一覧も記憶する。その際、情報を取得した時刻も併せて記憶する。前記ノード状態リスト11、12、13、14をデータメモリ51〜54内に構成してもよい。また逆に、各ノードから取得したメモリ残量情報、パフォーマンス情報、時刻情報等をノード状態リスト11、12、13、14に記憶させてもよい。
【0024】
<動作>
本実施の形態の動作についてはフローチャートを用いて後述するが、はじめに概略説明をする。
【0025】
1.ノードの登録
(0)ノードの登録は既にグループに登録されているノードから行う。
(1)ノードをグループに登録する。全ノード数をNとして登録する際に、グループ内で識別するための識別番号を指定する。
(例:Node[1]、Node[2]、Node[3]、…、Node[N]、…、Node[M])
(2)各ノードは全ノードの情報(ノードの死活状態)を保存するリストを持つ。ノードのグループ登録時にリストを作成する。
ノードと接続し情報を取得するのは、Node[N]→Node[N+1]のように順序を決める。
順序で最後にあたるノードは順序の先頭から取得する(Node[N]→Node[1])、としてリング状にする。
(3)新たなノード状態リストをすべてのノードに配信する。
【0026】
2.ノードの処理
(4)Node[N]は、Node[N+1]の情報を取得するリクエストを送信する。その際、Node[N]の持つリストも合わせて送信する。
(5)Node[N+1]は、Node[N]から取得したリストに、Node[N+1]の持つリストの情報を追記してレスポンスとして返信する。
(6)Node[N]は、Node[N+1]から取得した情報を自分のリストに追記する。
(7)Node[N]は、Node[N−1]から同様にリクエストされるので、上記(5)に該当する部分を行い、レスポンスを返信する。
(8)(4)に戻って繰り返す。
【0027】
3.ノード数が増加した場合
(9) ノード数Nは、ノードを追加していき、ノード数の上限値Mになったとき、Node[1]からNode[M/2]をAグループ、Node[M/2+1]からNode[M]をBグループとして2つのグループに分割する。
(10)Node[M/2]はNode[1]と接続し、Node[M]はNode[M/2+1]と接続することでリングを2つに分割する。情報共有は分割する前と同様に行う。
(11)一定期間(各グループのノードが情報共有できたぐらい、上記の例ならばM/2回以上)したら、別グループのノードに接続先を変更する。例えば、AグループのNode[N]は、BグループのNode[N+M/2]に接続する。
【0028】
4.ノードからレスポンスが返らない場合
(12)K回以上レスポンスが返ってこないNode[x]は、停止したとみなして次の順序のノードに変更(Node[x−1]→Node[x+1])して、リクエストを行う。
(13)同様にK回以上、正常ではないレスポンスが返ってきた場合のNode[x]は、データ保存できない状態とみなして次の順序のノードに変更(Node[x−1]→Node[x+1])して、リクエストを行う。
(14)停止ノードNode[x]には、別途接続を試行して、復活した場合は変更する。
【0029】
図7はこの実施の形態におけるノード数4の場合のノード状態リストを示す図である。また、
図8は同実施の形態におけるノード数4の場合の情報問い合わせ動作について説明するための図である。更に、
図9は同実施の形態におけるノード数8の場合のノード状態リストを示す図である。また、
図10は同実施の形態におけるノード数8の場合の情報問い合わせ動作について説明するための図である。
図5、6の一般的なプロトコルの情報問い合わせ動作と対比しやすいように、
図7〜10により本実施の形態における情報問い合わせ動作について説明する。
【0030】
図7と
図8は対応している。
図8(a)において、ノードが4つと仮定し、ノード(N1)からノード(N2)への情報への問合せR1、ノード(N2)からノード(N3)への情報への問合せR2、ノード(N3)からノード(N4)への情報への問合せR3、ノード(N4)からノード(N1)への情報への問合せR4は、対等である。
【0031】
ノード状態リスト10と、
図7(e)に示す凡例は
図6と同じである。
図7(a)は4つのノード(N1〜N4)が、まだどのノードとも情報を共有していない最初の状態を示す。
図7(b)、
図8(b)は、次の状態を示し、ノード(N1)はノード(N2)に問い合わせ(所得予定(リクエスト))、ノード(N2)はノード(N3)に問い合わせ、ノード(N3)はノード(N4)に問い合わせ、ノード(N1)はノード(N3)に問い合わせる状態を示す。同時にノード(N1)はノード(N4)から被リクエストを受け、ノード(N2)はノード(N1)から被リクエストを受け、ノード(N3)はノード(N2)から被リクエストを受け、ノード(N4)はノード(N3)から被リクエストを受けている。
【0032】
図7(c)、
図8(c)は、更に次の状態を示す。
図7(d)は、ノード(N1〜N4)がすべてのノードの情報を取得し、安定状態になったことを示す。問い合わせ(リクエスト)、被リクエストの関係は、
図8(b)(c)(d)に示されるように、すべて同じになる。
【0033】
図8(a)から分かるように、この実施の形態によれば、ノード(N1)から見た場合、ノード(N2)へ問い合わせて、ノード(N4)から問合せられる。他のノードも同様に行われる。どのノードからみても問合せる数と問合せられる数は一定になる。
ノード(N1)にノード(N4)のード情報が入ってくるときは、ノード(N2)とノード(N3)経由で入ってくる。各ノードはNTPで同期が取られており、基本的に同時期に取得したものが入ってくる。一般的には、ノード状態リスト10に取得したときの時刻も合わせて記録しておき、複数のノード情報が入ってきて状態が異なる場合は、取得時刻の新しい方を採用する。
【0034】
図9、
図10は、ノード数が増加した場合の情報問い合わせ動作について説明するもので、上限値Mを8とし、ノード数が8になった場合について説明する。
図9(a)は、ノード数が分割前の状態を表す。8つのノード(N1〜N8)が、まだどのノードとも情報を共有していない最初の状態を示す。ノード状態リスト10が、ノード数がN1〜N8に対応して8個に増えている。
【0035】
図9(b1)は2つのグループに分割した状態を表す。ノード状態リスト10は、グループ分けする前の状態を保持する。最初の段階のノード情報の取得はノード(N1〜N4)のグループで領域200の情報を更新し、ノード(N5〜N8)のグループで領域300の情報を更新する。
図9(b2)は、グループ内で一通りノード状態を共有した状態を表す。
図9(b1)の状態から
図9(b2)の状態へ移行する途中の過程は、ノード(N1〜N4)については
図7(a)から
図7(d)と同じである。ノード(N5〜N8)についても
図7(a)から
図7(d)をN1→N5、N2→N6、N3→N7、N4→N8と読み替えれば同様とみなせる。ノード状態リスト10は、領域200を更新した結果が領域210となり、領域300を更新した結果が領域310となる。
【0036】
図9(c)は、
図9(b2)の状態に達した後で、各ノードが別グループのノードに問合せることを表す。
図9(c1)は、問合せる前の状態を表しており、ノード(N1)はノード(N5)に、ノード(N6)はノード(N2)に問合せていることを表す。ノード(N2)とノード(N6)、ノード(N3)とノード(N7)、ノード(N4)とノード(N8)も同様である。
【0037】
図9(c2)は問合せた後の状態を表しており、ノード(N1)はノード(N5)の持つノード状態リスト10のノード(N5〜N8)の領域240の情報を領域230から取得したことを表す。同様にノード(N5)は、ノード(N1)の持つノード状態リスト10の(N1〜N4)の領域340の情報を領域330から取得したことを表す。ノード(N2)とノード(N6)、ノード(N3)とノード(N7)、ノード(N4)とノード(N8)も同様である。
これにより、すべてのノードはすべてのノード状態を取得したことになる。以降は、
図9(b1)に戻って繰り返していく。
【0038】
図10は、
図9(a)(b1)(b2)(c)(c1)(c2)の問い合わせ関係を図示したものである。
図10(a)が
図9(a)に、
図10(b)が
図9(b1)(b2)に、
図10(c)が
図9(c1)(c2)にそれぞれ対応する。ノードが一定数を越えた場合に、点線400で分割して2つのグループに分ける。グループを分けた場合、点線401、402のように、ノード(N4→N6)はノード(N4→N1)へ、ノード(N8→N1)はノード(N8→N5)へつなぎ直しとなる。すなわち、ノード数に応じて複数のグループに分割し、グループ内で一回りしたら別グループのノードに問い合わせる。そして再度同じグループ内で問い合わせる。
【0039】
なお、いずれかのグループのノード数が8を超えたら更に分割し、3つのグループとなる。自グループ内の問い合わせが完了したら他グループへ問い合わせていくことは、グループ数が増えても同じ原理である。上限値8は限定されるものではない。情報を伝搬する決まったルートは、上述した「1.ノードの登録」で説明したように順序を決めるが、これに限定されるものではない。
【0040】
次に、フローチャートを参照して本実施の形態の動作の詳細について説明する。フローチャートは各ノードのCPUが実行するものである。
図1はノードの登録についてのフローチャートである。
【0041】
ステップS101は、グループへノードを登録する処理で、例えば
図4のグループAにノードを登録する処理であり、登録された順にノードに識別番号を付与していく。識別情報はデータメモリ51〜54に記憶される。この処理は、NoSQL(Not only SQL)によって複数のサーバ(ノード)を使って1つのデータベースを作る手法である。
【0042】
続くステップS102は、ノード状態リストとして、
図6のノード状態リスト10に相当するもので、ステップS101で登録されたノードの状態を表す配列として保存し、識別番号に該当する配列を追加する。
続くステップS103は、変更されたノード状態リストをグループに所属するノードに配信して、すべてのノードで共有する。すべてのノードでノード状態リストを共有したら終了(ステップS104)となる。
以上がノードの登録となる。
【0043】
図2は、ノードの情報共有処理(リクエスト送信)についてのフローチャートである。リクエストは定期的に繰り返すものとする。
【0044】
ステップS201は、リクエスト用データを作成するために、自分の持つノード状態リスト情報を取得する。
続くステップS202は、自ノード(Node[N])からリクエスト先ノード(Node[N+1])にリクエストを送信する。
続くステップS203は、リクエスト先からのレスポンスを待ち、レスポンスが返ってきたらステップS204へ、レスポンスが返ってこなければステップS212へそれぞれ進む。
ステップS204は、レスポンスが返ってきた際の結果が、OKならばステップS205へ、NGならばステップS207へ、それぞれ進む。
【0045】
ステップS205は、レスポンスが正常としてステップS206へ進む。
ステップS206は、受信したレスポンスのノード状態リストのデータで更新された部分のデータを自分のノード状態リストに上書き保存して終了する(ステップS215)。
【0046】
ステップS207は、レスポンスが異常としてステップS208へ進む。
ステップS208は、受信したレスポンスのノード状態リストのデータでリクエスト先ノードの部分をNGとし、他のデータのノード状態リストには更新しない。そしてステップS209へ進む。
ステップS209は、連続して失敗した回数のカウンターEを更新して、ステップS210へ進む。
ステップS210は、連続して失敗した回数のカウンター値Eが、連続して失敗した回数の上限値K以上の場合はステップS211へ、より小さい場合は次の処理(ステップS215)へ、それぞれ進む。
【0047】
ステップS211は、連続して失敗した回数が連続して失敗した回数の上限値以上の場合はノード状態リストからそのリクエスト先のノードを除外して、次のノードを設定する処理である。設定後は終了する(ステップS215)。
【0048】
ステップS203でレスポンス無しのときは、レスポンスが(一定時間)返ってこないのでノード停止として(ステップS212)、ステップS213へ進む。
ステップS213は、レスポンスが受信できないのでリクエスト先ノードの部分を停止とし、他のデータのノード状態リストには更新しない。
続くステップS214は、連続して失敗した回数のカウンターを更新する。そしてステップS210へ進む。
以上がノードの情報共有処理(リクエスト送信)となる。
【0049】
図3は、ノードの情報共有処理(リクエスト受信)についてのフローチャートである。リクエストは待ち受けるものとする。
【0050】
ステップS301は、リクエストを監視して待ち受ける処理で、リクエストを受信した場合はステップS302へ、受信しない場合はステップS301へ戻る。
ステップS302は、リクエストに付加されたノード状態リスト情報を取得する。
続くステップS303は、自ノードのチェックをして状態取得する。
続くステップS304は、ステップS302、ステップS303で取得したノード状態リスト情報並びに自ノードの状態についてのエラーチェックを行い、問題なければOKとしてステップS305へ進み、問題があればNGとしてステップS306へ進む。
ステップS305は、チェック結果がOKであることをノード状態リストへ書き込み、ステップS306はチェック結果がNGであることをノード状態リストへ書き込む。
【0051】
続くステップS307は、保存していたノード状態リストからステップS304の結果を反映してレスポンス作成する。
続くステップS308は、ステップS307で作成したレスポンスを送信する。
続くステップS309は、ステップS302で取得したノード状態リスト情報のデータで更新された部分のデータを自分のノード状態リストに上書き保存して終了する(ステップS310)。
以上がノードの情報共有処理(リクエスト受信)となる。
【0052】
このようにして、複数のノードで構成されるピアツーピア型のデータベースにおいて情報の共有化を実現する。
【0053】
<実施の形態の効果>
本実施の形態によれば、決まったルートで情報を伝播させていくことにより、ノード数が増加してもネットワークの負荷を増やさないことと、ノード数が増えた場合はグループを分割することで一定の時間内に情報共有をすることができる。
また、特定のルートで情報交換を行うことで一部のノードに負荷がかからない。あるいは、すべてのノードに対して一定間隔で情報を共有できる。
更に、リクエストの際リクエスト側からもノード情報を送ることで双方向の情報収集ができて、かつそれぞれの蓄積した情報を共有できる。
【0054】
以上、この発明の実施形態について説明したが、この発明はこれらに限定されるものではなく、特許請求の範囲に記載された発明とその均等の範囲を含むものである。
以下に、本願出願時の特許請求の範囲を付記する。
<付記>
【0055】
[請求項1]
複数のノードでグループが構成されるピアツーピア型の分散データベースにおいて、
個々のノードが他ノードの所定の情報を問い合わせて取得して共有する共有手段と、
決まったルートで前記情報を伝播させていく伝搬手段と、
ノード数が所定以上増えた場合は前記グループを分割する分割手段と
を有することを特徴とする分散データベース。
[請求項2]
前記分割手段は、前記グループ内で前記情報が伝搬したら、別のグループのノードに前記情報を問い合わせることを特徴とする請求項1記載の分散データベース。
[請求項3]
前記共有手段が問い合わせる前記情報は、ノードの死活情報であることを特徴とする請求項1又は2記載の分散データベース。
[請求項4]
前記共有手段がノードの死活情報問い合わせた結果、不活ノードと判定されたノードは前記グループから排除することを特徴とする請求項3記載の分散データベース。
[請求項5]
前記共有手段が問い合わせる前記情報は、ノードのメモリ残量情報又はノードのパフォーマンス情報であることを特徴とする請求項1又は2記載の分散データベース。
[請求項6]
複数のノードで構成されるピアツーピア型の分散データベースのデータ共有方法であって、
複数のノードをグループに登録する第1工程と、
個々のノードが他ノードの情報を取得して前記グループで共有するために前記グループ内で決まったルートで情報を伝播させていく第2工程と、
ノード数が所定以上増えた場合は前記グループを分割する第3工程と
を実行することを特徴とする方法。
[請求項7]
前記第1工程は、以下の工程を含むことを特徴とする請求項6記載の方法。
(1)ノードを前記グループに登録する工程であって、全ノード数をNとして登録する際に、グループ内で識別するための識別番号を指定する工程、
(2)各ノードは全ノードの所定の情報を保存するリストを持ち、ノードのグループ登録時に登録された順序でリストを更新し、前記順序で最後にあたるノードは前記順序の先頭から前記所定の情報を取得してリング状にする工程。
(3)前記更新されたリストをすべてのノードに配信する工程。
[請求項8]
前記第2工程は、以下の工程を含むことを特徴とする請求項6記載の方法。
(4)ノード[N]は、ノード[N+1]の情報を取得するリクエストを送信し、該ノード[N]の持つリストも合わせて送信する工程、
(5)ノード[N+1]は、ノード[N]から取得したリストに、ノード[N+1]の持つリストの情報を追記してレスポンスとして返信する工程、
(6)ノード[N]は、ノード[N+1]から取得した情報を自分のリストに追記する工程、
(7)ノード[N]は、ノード[N−1]からのリクエストに応じ、前記工程(5)を実行しレスポンスを返信する工程、
(8)前記工程(4)に戻って繰り返す工程。
[請求項9]
前記第3工程は、以下の工程を含むことを特徴とする請求項6記載の方法。
(9) ノード数Nは、ノードを追加していき、ノード数の上限値Mになったとき、ノード[1]からノード[M/2]を第1グループ、ノード[M/2+1]からノード[M]を第2グループとして分割する工程、
(10)ノード[M/2]はノード[1]と接続し、ノード[M]はノード[M/2+1]と接続する工程、
(11)各グループのノードが情報共有できたら、別グループのノードに接続先を変更する工程。
[請求項10]
前記第2工程は、以下の工程を含むことを特徴とする請求項6記載の方法。
(12)K回以上レスポンスが返ってこないか、正常ではないレスポンスが返ってきた場合のノード[x]は、次の順序のノードに変更して、リクエストを行う工程。
[請求項11]
複数のノードで構成されるピアツーピア型の分散データベースの情報を共有するためのプログラムであって、
ノード[N]のコンピュータに、
複数のノードをグループに登録する登録工程と、
ノード[N+1]の情報を取得するリクエストを送信し、該ノード[N]の持つノードの状態を示すリストも合わせて送信する送信工程と、
ノード[N+1]から、ノード[N]から取得したリストに、ノード[N+1]の持つリストの情報を追記したレスポンスを受信する受信工程と、
ノード[N+1]から取得した情報を自分のリストに追記する追記工程と、
ノード[N−1]からのリクエストに応じ、ノード[N−1]から取得したリストに、当該ノード[N]の持つリストの情報を追記してレスポンスとしてノード[N−1]に返信する返信工程と、
ノード数が所定以上増えた場合は前記グループを分割する分割工程と
を実行させることを特徴とするプログラム。
[請求項12]
複数のノードでグループが構成されるピアツーピア型の分散データベースにおいて、
請求項11記載のプログラムを実行するコンピュータを備えることを特徴とする装置。