VR黎明期の振り返る – 「VR原論」の後日譚

VR黎明期の振り返る – 「VR原論」の後日譚

最近、「人工現実感の世界[1]」のリニューアル版として「VR原論[2]」の刊行がありました。時期的には、1990年にホールアース研究所により開催されたサイバーソン(Cyberthon)[3][4]前後の、当時のVRの雰囲気をまとめた書籍です。 「人工現実感の世界」は、VR黎明期当時のVRを取り巻く状況を取材したものであり、その刊行時期において「思考のための道具」などでも著名なラインゴールド(Howard Rheingold)氏の「Virtual Reality(邦訳:バーチャル・リアリティ)[5][6]」に匹敵する、VR黎明期の状況をまとめた先駆的な書籍であると思います。 「VR原論」では、「人工現実感の世界」が発刊された1990年前後の状況についての対談形式での補足があり、今回の記事はその対談に触発されてものです。私自身も「人工現実感の世界」の発刊に感銘をうけた世代でもあり、なんとも懐かしく読んでしまいました。 「VR原論」の冒頭にもありますが、黎明期のVRが忘れ去られているのは、驚きでもあり残念でもあります。考えてみれば、VR黎明期は、いまのようにインターネットやデジタルカメラが普及しておらずデジタルコンテンツは残りづらく、「人工現実感の世界」がそうであったように書籍も絶版になっているため、致し方ないことかもしれません。 私自身は、1990年代のVR黎明期から2000年のVRML盛衰頃までは、仕事も趣味もどっぷりVR/3Dに浸かった生活だったのですが「HMDとグローブをしながらプログラミングしていた」なんて話をすると驚かれてしまい、こちらも驚いてしまいます。 今回は「人工現実感の世界」の発刊以降の1991年から、インターネットが普及する1995年ぐらいまでの、VR黎明期の失われた時代の状況を、手持ちの資料や関連書籍を参考にしつつ、振り返ってみたいと思います。 「Reality Engine Builders」たちのその後 「人工現実感の世界」は、1990年前後の米国と日本のVRの状況を取材した書籍で、その中に「Reality Engine Builders」として紹介されている米国のVRベンチャーが紹介されています。以下の写真は、その当時よく引用されていたVR黎明期のNASAエイムズ研究所の写真[10]でNASAのHMDとVR原論に登場するVPL社のデータグローブを装着しています。まずはVR原論で紹介されていたベンチャーのその後を補足してみたいと思います。 VR原論に登場する米国のVRベンチャーは、いずれも低価格のVRシステムやVR専用のSDK(Software Development Kit)の商用販売に挑戦していきます。 ただ、結末としては、これらの米国のVRベンチャー達は、1995年以降のPC/3Dグラフィックス性能の劇的な向上および、OpenGLやDirect3Dなどの3DAPIの標準化の影響もあり、彼らのVR専用システムおよびSDK(独自3DグラフィックスAPI + VRデバイス対応)は、徐々に姿を消すことになります。 VPL Research 実質的な活動期間は短かったとしても、VPL (Virtual Programming Languages) Researchおよび、ジャロン(Jaron Lanier)氏が、現在につながるVR(Virtual Reality)の概念および名称を一般にさせ、黎明期のVRブームの立役者であることは、皆さんの異論のないところだと思います。 世界初となるデーターグローブやアイフォンを商品化したVPL…

Read more

MongoDB プロトコル実装調査 – v3.6以降の現状について

MongoDB プロトコル実装調査 – v3.6以降の現状について

MongoDBは、DB-Enginesの2019年8月のランキング[1]で第5位と、近年でも安定した人気を得ているドキュメントデータベースです。また、マイクロソフトのCosmosDBや、FoundationDBの「Document Layer」に代表されるように、既存のデータベースでもMongoDBインターフェースを互換APIで対応する動向も見受けられます[2][3]。 ただし、2019年8月現在、MongoDB公式の最新バージョンは4.0系であるにも関わらず、CosmosDBはv3.2ベース、Document Layerはv3.0ベースの実装に留まっています。 今回は、このようなMongoDB互換APIの実装背景を理解する上で必要となる、MongoDBの基本通信プロトコルであるWire Protocol[4]の概要と、MongoDB公式のv3.6以降の通信プロトコル実装状況についての調査結果をまとめてみます。 MongoDB Wire Protocolの概要 MongoDB Wire Protocolは、MongoDBの基礎となる要求応答の通信プロトコル仕様です。 MongoDBクライアントは、TCP/IPソケットでMongoDBサーバーと接続し、この基本プロトコルを用いて通信しています。 共通ヘッダ MongoDBの通信プロトコルのWire Protocloでは、通信メッセージの共通ヘッダが規定されています。共通ヘッダは、メッセージ総合計バイト数(Message Length)、メッセージ要求識別子(RequestID)、メッセージ応答識別子(ResponseTo)、メッセージ種別(OpCode)の4種類の整数(int32)から構成されます。 メッセージ総合計バイト数(Message Length)のデータ形がini32であるため、仕様的には2GB以上のデータの送受信にはメッセージの分割必要となります。MongoDB公式の標準的な実装としては46MB(48,000,000byte)[5]程度を上限としているようです。 なお、Wire Protocloの整数型は、TCP/IPヘッダのバイトオーダーとは異なり、リトルエンディアン順序での送受信となります。エンディアン選択については、BSON仕様[6]と同じ経緯で、実装効率メインで仕様が決定された感があります。 メッセージ種別 (OpCode) MongoDBのメッセージ種別(OpCode)は、廃止(Deprecated)されたものを含めると、現在まで以下の11種類の送受信メッセージが規定されています。 OpCoce 値 説明 OP_REPLY 1 クライアント要求応答…

Read more

RDBMSの問い合わせ(Query)プロトコルについて – PostgreSQL・MySQLを例に

RDBMSの問い合わせ(Query)プロトコルについて – PostgreSQL・MySQLを例に

最近、RDMBSの通信プロトコルに興味があり、代表的なPostgreSQL・MySQLの通信プロトコルの調査をしています。今回は、とくに興味があった問い合わせ(Query)とその応答の通信プロトコルについて整理してみます。 取っ掛りとなる調査ではありますが、その通信プロトコル仕様から、PostgreSQL・MySQLそれぞれの設計思想的なところも垣間見れ、興味深い調査となりました。端的に言えば、PostgreSQLは高速かつ合成的で合理的、対するMySQLの仕様は厳密で冗長的な設計の印象を持ちました。 RDBMSの質問(Query)操作とは RDBMSへ対する操作は、質問(query)と更新(update)に大別されます。RDBMSの基礎となるリレーショナル代数は、前者の質問操作を対象とするものであり、挿入(insert)や削除(delete)などは後者の更新処理に含まれます[1]。 リレーショナル代数の質問は再帰性(recursiveness)があり、その結果は再びリレーショナルとして表現されます。この結果を表すリレーションを、リレーショナル代数では結果リレーション(result relation)、SQLでは導出表(derived table)と呼ばれています[1]。 すなわち、質問(query)操作についてはリレーショナル代数の結果リレーション相当の情報が含まれる必要があります。 通信プロトコル PostgreSQL・MySQLともに通信プロトコルの基本となる通信パケットが定義されており、通信パケットに含まれるデータについても基本となるデータ型が定義されています。 通信パケット 通信パケットは、PostgreSQL・MySQLともに通信プロトコルの基本となるパケット形式で、全ての通信プロトコルは、このパケット仕様に準じています。 PostgreSQL・MySQLともに通信パケットのサイズを示すメッセージ(ペイロード)長が含まれています。以下の表に示す通り、相違点としては、PostgreSQLがメッセージ種別からパケットが開始されるのに対して、MySQLのメッセージ種別はペイロード部に含まれています。 項目 PostgreSQL MySQL メッセージ種別 byte\<1> – ペイロード長 int\<4> int\<3> シーケンス番号 – int\<1> ペイロード string\<var> or binary string…

Read more

学習によるデータベース最適化について – Sagedb: A learned database system

学習によるデータベース最適化について – Sagedb: A learned database system

昨年から今年に入り、マサチューセッツ工科大学とGoogleなどの共著で、SageDBなどの機械学習によるデータベース最適化の論文が発表されています[1][2]。現時点では研究レベルの論文ではありますが、将来のデータベース在り方について色々な示唆に富んでいる論文です。 今回は、この論文の主要コンセプトである「学習によるカスタマイズ」に関連する話題にふれ、今後のデータベース像について考えてみます。 データベース最適化の背景 データベース最適化の研究については長い歴史がありますが[1][5]、SageDBの論文[1]では、(データベースを含む)既存のデータ処理一般の最適化(カスタマイズ)手法を以下の3種類に分類しています。 設定によるカスタマイズ (Customization through Configuration) まずは、最も馴染み深いであろう、データーベースのコンフィグ設定やシステム設定変更による最適化です。具体的な例としては、各データベースのページサイズ、バッファプールサイズの調整などが該当します。広義的な意味では、インデックスやマテリアライズド・ビューの作成も含まれますが、基本的には静的なカスタマイズ手法と位置付けられています。 設定によるカスタマイズについては、データベースへのワークロードやデータ特性から設定値を自動的に最適化する先行研究が数多くあり、近年では機械学習をデータベースに応用した汎用的な最適化の研究もあります[4]。 アルゴリズム選択によるカスタマイズ (Customization through Algorithm Picking) 前述の静的な「設定によるカスタマイズ」に対して、動的な実行戦略の選択によるクエリー最適化の手法で、データベースの主要な研究の分野として長い歴史があります[1][5]。具体的な例としては、クエリー最適化は、オプティマイザにより最適な実行順序(例:述語プッシュダウン、結合順序など)を決定し、利用可能な一連のアルゴリズムから最良の実装を選択(例:ネステッドループ結合、ハッシュ結合など)するものです。 この最適化手法は、実行前にそのコストを推定するため、コストに基づく最適化(cost-based optimaization)とも呼ばれ、コスト推定には統計的な手法の基づくものが広く実装されています[5]。 自己設計によるカスタマイズ (Customization through Self-Design) 自己設計システムとは、システム内の選択可能なプリミティブから、データベースのワークロードとハードウェアに最適な組み合わせを自動的に生成するという概念のものです [3]。選択可能なプリミティグには、ハードウェアだけではなく、分散システムのパーティショニング方法(例: ハッシュ分割、レンジ分割)やデータアクセス方法(例: スキャン、ソート済検索など)などのソフトウェア(アルゴリズム)も含まれます [3]。 この最適化手法には、学習コストモデルを用いた最適化が用いられており、新しい組み合わせが未知のアルゴリズムやデータ構造を生み出すことで、パフォーマンスを大幅に向上させる可能性もあるとされ[3]、今回のSageDB[1]の論文と合わせて興味深い概念です。 SageDBとは? 現代のデータベース(原文:データ処理システム)は、多種多様なスキーマ、データ型、およびデータ分散を処理できるように汎用的に設計されています。その反面、その最適化については、前述の「アルゴリズム選択によるカスタマイズ」(=コストに基づく最適化)に基づくものが多く、特定のワークロードやデータ特性に対して適応できない可能性があります[1][2]。 SageDBでは「学習によるカスタマイズ」と名付けられた、既存のデータベース(原文:データ処理システム)のアルゴリズムとデータ構造に(機械学習の)モデルを深く埋め込むことによる最適化手法を提案しています。…

Read more