本製品では、カメラに写ったARマーカーやカメラを操作している利用者の権限に応じて、適切なARのシナリオ/シーン/重畳表示定義、関連する業務情報などを、まとめて取り出せる必要があります。しかしこれらの情報は、それぞれデータ構造が異なっており、単一の構造体に収めて管理することは困難です。
Interstage AR Processing Serverでは、すべての情報を以下の値のセットで表現します。これにより、異なるデータ構造の情報を1つの構造体に収めて管理し、かつ、全管理情報を対象にした串刺し検索を可能にしています。
QType(情報の定義。RDBで言うところのTableの概念)
QAttribute(情報に対する属性の定義。RDBで言うところのColumnの概念)
QEntity(情報に対する実体の定義。レコード番号のような概念)
QValue(情報/属性/実体に対する値の定義。カラムに入っている値の概念)
Interstage AR Processing Serverでは、上記のようなデータ管理/検索/編集フレームワークとして、「データ管理機能」を提供します。
Interstage AR Processing Serverにおけるデータ管理のイメージについて説明します。
図2.1 データ管理のイメージ図
QTpye
値として、RDBでいうテーブル定義を格納します。
QAttribute
値として、RDBのテーブルでいう属性の定義を格納します。「Table」定義であるQTypeを親に持ちます。
QEntity
値として、RDBのテーブルでいうレコードの定義を格納します。「Table」定義であるQTypeを親に持ちます。
QValue
値として、RDBのテーブルでいう値の定義を格納します。「Column」定義であるQAttribute, 「Record」定義であるQEntityを親に持ちます。
Quad
Quadは、QEntityを拡張し、QEntityと、QEntityを親に持つQValue配列を同時に扱うことができる論理テーブルです。
QValue配列を含むQEntityを、一度のリクエストで登録できます。
「Table」定義であるQType, 「Column」定義であるQAttribute, 「Column値」定義であるQValueを、idベースでなく、文字列ベースの条件式で、串刺し検索することができます。
例
「ARマーカーテーブル」「シナリオテーブル」の「設置場所」「名前」の値が「A9F」「夜作業」であるレコードを、「状態」の値が「USED」である順に返却する
同一データに対する複数の同時アクセス要求に備え、Interstage AR Processing Serverではデータに対してオプティミスティック同時実行制御を行います。そのため、各テーブルにversion(INTEGER型)を作成しています。
制御の基本的な流れは以下の通りです。
データを変更する際、データ獲得後に別のユーザがそのデータを変更していないかversion情報を取得します。
現在のversion情報と比較します。
変更されていない場合、データを更新します。
変更されていた場合、違反と見做しエラーを返します。
Interstage AR Processing Serverではオプティミスティック同時実行制御をETagヘッダとIf-Matchヘッダによって実現しています。そのため、データの更新/削除の前には必ず、サーバから最新のデータを取得し、versionを最新にしておく必要があります。さらに、If-Matchヘッダにversionを設定する必要があります。
注意
変更のたびにversionが追加されるため、データをINTEGERの最大値(2147483647)まで更新するとエラーとなります。