truncus is made in JAPAN

truncus graph

RDBの世界をぬりかえていく
モデルグラフデータベース

truncus is made in JAPAN truncus graph

RDBの世界をぬりかえていく
モデルグラフデータベース

世界は「関係」でできています。世界は、バラバラな実体の寄せ集めではなく相互補完的な情報(モデル)とそれらのつながり(グラフ)で構成されているのです。 Jurabiは、この複雑な情報の網の表象を自然にシステム化するためのツールとして、モデルグラフデータベースtruncus graphを提供します。

従来、社会で必要とされるシステムの多くがRDBを用いて実装されてきました。テーブル定義のためにER図を描いたり、モデル指向で開発するためにORマッパー(ORM)を使ったりしてきたことでしょう。 でも、それはもう過去の話です。

truncus graph はグラフデータベースの進化形であり、強力なモデリング機能のサポートによって、RDBが得意としてきた汎用的な課題にも対処できるプラットフォームなのです。 もちろんER図もORMも不要。Jurabi は、truncus graph を利用したモデリングを通じて、システム開発者がいち早く価値を創出することをサポートします。

truncus graphとは

特徴

truncus graph はプロパティグラフの概念を拡張したグラフデータベースです。 ノードは、「ドメインモデル」という型を持った「 情報の束」として扱われます。 その情報の束が、やはり付加情報を持つリレーションによって有機的につながることで、「関係の網」による潜在的な情報を持つようになります。 潜在的情報としては、たとえばレコメンデーションや不正検知といった要件において求められる情報が挙げられます。 truncus graph はそのような価値ある情報をより素早く取り出すことを可能にします。

ドメインモデルとリレーション

ドメインモデルは、システムの扱う対象領域(ドメイン)において、 処理の対象となる物や事を「型」として表現した抽象的な構造のことです。 truncus graph では、グラフのノードがドメインモデルという構造を持ちます。 これにより、ノードは単なるプロパティの集合ではなく、実世界の構造を反映させたものにすることが可能となります。 また、ノード間に張られるリレーションにも同様に型(すなわち構造)を導入できます。 これらの構造を適切に定義することで、必要な情報に対してより簡単に、より速くアクセスできるようになります。

モデルとインスタンスのシームレスな接続

モデルとリレーションによって世界(対象領域)を表現し操作しようとすると、それらの実体(インスタンス)を扱う必要が生じます。 しかし、アプリケーション開発者は、インスタンスの永続化やモデルとの間のインピーダンスミスマッチといったことを意識したくはないでしょう。 truncus graph は、プロキシ機構を用いてモデルやリレーションとそのインスタンスをシームレスに接続し、実装上の細部を隠蔽しています。 モデルそのものを操作する感覚でアプリケーションを構築できる。そのような開発体験を truncus graph はサポートします。

クラスタ構成とデータ同期

truncus graph は、複数サーバのクラスタ構成で運用することにより負荷分散と可用性の向上を図ることができます。 クラスタは一つのマスタと複数のレプリカで構成され、あるサーバでデータストアに永続化されたオブジェクトは、マスタを介して他の全てのレプリカに同期されます。 頻繁に参照されるオブジェクトはメモリ上のキャッシュに乗りますが、ストアでのデータ同期が生じるとその変更内容は直ちにキャッシュにも反映されます。 また、オブジェクトを細かい単位に分割して管理する独自機構により、キャッシュ効率を向上させています。

truncus graphの主な機能

DomainModelインタフェース

ドメインモデルの中心となるのは、DomainModel.EntityDomainModel.Value です。 これらは、truncus graph が提供する Java インタフェースです。 Entity は、識別子によって個々のインスタンスが識別されるようなオブジェクトのためのインタフェースであり、 Value は、内容が同じであれば同値とみなされるようなオブジェクトのためのインタフェースです。

@DomainModelMarker.Entity
public interface Supplier extends DomainModel.Entity {

  @DomainModelMarker.Attribute(index = true)
  DomainModel.Attribute<String> supplierNumber();

  @DomainModelMarker.Attribute(index = true)
  DomainModel.Attribute<String> name();

  @DomainModelMarker.Relation
  RelationHolder<Product> supplies();
}

利用者によるドメインモデル定義

実際のアプリケーションを構築するのに必要なドメインモデルは、 EntityValue から派生したインタフェースとして利用者が定義します。 モデルが保有する属性は、その interface 内に @DomainModelMarker.Attribute という アノテーションを付与した抽象アクセサとして記述します。

@DomainModelMarker.Entity
public interface Person extends Entity {
  // @DomainModelMarker.Attributeによって、
  // 属性として登録されるようになる
  @DomainModelMarker.Attribute(required = true)
  Attribute<String> name();
  // ……
} 

YAMLによるモデル定義

Java インタフェースによって定義されたモデルは、truncus graph の内部では 「スキーマ」という構造に変換されます。 このスキーマ(すなわちモデル)は YAML によって定義することもできます。 これと REST API によるモデル操作を組み合わせれば、TypeScript で記述したクライアント側だけでアプリケーションを作成することも可能です。

 # Person のモデル定義
 Person:
   category: ENTITY
   label: 
   attributes:
     name: string
   relations:
     friend: Person
      label: 友人
      multiple: true
  …… 

ライフタイム管理とプロキシによる透過アクセス

利用者が意識するのはドメインモデルインタフェースだけです。 モデルのインスタンスオブジェクトは、その生成や永続化、キャッシュといった ライフタイムが truncus graph によって管理されます。 また、インタフェースとインスタンスオブジェクトとの間には、それらを仲介するプロキシ機構が備わっており、 インタフェースに記述した抽象アクセサを呼び出すことで その属性値の取り出しが行えます。 この仕組みにより、truncus graph では、ドメインモデルと永続化された オブジェクトの間のインピーダンスミスマッチが生じません。

@DomainModelMarker.Entity
public interface Supplier extends DomainModel.Entity {

  @DomainModelMarker.Attribute(index = true)
  DomainModel.Attribute<String> supplierNumber();

  @DomainModelMarker.Attribute(index = true)
  DomainModel.Attribute<String> name();

  @DomainModelMarker.Relation
  RelationHolder<Product> supplies();

}

リレーション定義とプロパティグラフ

ドメインモデル間のリレーションは、Relation<EntityType> というジェネリクス型で定義します。 EntityType にはリレーションの終点側のエンティティの型を指定し、 リレーション自体は始点側のエンティティに記述します。 なお、リレーション自体にも属性を持たせることができます。 つまり、truncus graph は実質的にプロパティグラフをサポートしているわけです。

@DomainModelMarker.Entity
public interface Person extends Entity {
  // ……      
  // @DomainModelMarker.Relationによって、     
  // 関連として登録されるようになる     
  @DomainModelMarker.Relation     
  Relation<Person> parent(); 

グラフ検索

エンティティオブジェクトが保持しているリレーションを直接たどって、 関連するオブジェクトを検索するAPIが用意されています。 検索条件には、エンティティやリレーションの属性を指定することもできます。

// GraphFinder の生成     
var finder = StandardGraphFinder.of();     

// 起点エンティティの取得     
var start = _getEntity();     

// 検索条件の構築     
var condition = GraphQuery.Condition.of();     

// 検索の実行     
var target = finder.findEntityVertex(start, condition);  

グラフインデックス

truncus graphは、 グラフ検索に特化した「グラフインデックス」も保持しています。 これはエンティティオブジェクトとそのリレーションから自動的に構築されます。 グラフインデックスを利用して、より柔軟な検索、たとえば関連先の オブジェクトから関連元オブジェクトを検索する「逆関連」の 検索を実行するAPIもあります。

// グラフインデックスを用いるグラフ操作オブジェクト
GraphDatabase graph = ……;  

// 関連の更新:(src: SimpleSource) - [to] -> (target: SimpleTarget) 
_update(graph, "to", "object:src", "object:target");  

// 逆関連の検索 (target に対して "to" という関連の関連元を検索する) 
var result = graph.findReverseRelations(
  GraphId.of("to"),NodeId.of("object:taraget"));

Cypher対応

Cypher による基本的なクエリをサポートしています。これはREST APIとして公開することもできるので、 外部クライアントからのCypherクエリが簡単に行えるようになります。

MATCH(s:Supplier{supplierNumber:'S001'})-[:supplies]->[p:Product]
RETURN s.supplierName, p.productName

truncus graph の適用

グラフ概念で使うリレーショナルデータベースとグラフデータベース

グラフ概念で意味付けされている複雑な世界の情報の網は、その視点で リレーショナルデータベース や グラフデータベース に情報格納する必要があります。 ハードの成熟度に合わせ リレーショナルデータベース から グラフデータベース にシフトしていき、ハイブリッドなデータベース構成を実現していきます。

マスターデータマネジメント

企業の情報システムの多様化によりマスタデータの管理が複雑になっています。 一貫したマスタデータを管理するには名寄せ、統合、展開、追跡が必要です。 グラフデータを利用すると様々な繋がりから本来同一であるべきマスタデータを特定し、 一貫したマスタデータを維持できます。

様々な構成要素と追跡

グラフデータはツリー型やネットワーク型などの様々な構成を表現することができます。 複数の構成を組み合わせることで高度な追跡を行うことも可能です。 グラフデータはこのような用途で高いレスポンス性能を発揮します。

サプライチェーン強化

自社のビジネス活動とサプライヤーの情報をグラフデータとして接続することで、 複雑なサプライヤーネットワークをディープリンク分析によって適切に管理し、 サプライヤー需要、クレーム管理、BCP(Business Continuity Plan)などを リアルタイムに把握し、連携強化することができます。

不正利用検知

グラフデータを利用したディープリンク分析、リアルタイム分析による不正検知、 さらに機械学習により不正検知を強化することができます。 デジタルの広がりによって高まる不正行為のリスクに有効です。

エンタープライズレコメンデーション

グラフデータを利用したグラフ分析、ディープリンク分析と組み合わせることで パーソナライズされた精度の高いレコメンドが得られます。 これによって物流の経路提案、エンジニアリングの設計提案、調達の最適購買など活用の幅は広がっていきます。

検索強化

高速検索、データの可視化・分析によるシステム監視・セキュリティ対策を強化できるように Lucene基盤のElastic searchと容易に連携できるように設計されています。

CDC(Change Data Capture)

複数のデータベースやアプリケーションを最新データと常に同期させることにより、 企業が複数の目的にデータを活用できるようします。 そうすることで、組織がデータの整合性を維持しながらデータの価値を最大化することができます。

如何なるシステム規模にも対応

truncus graph の関係モデルからのCRUD機能を軸としたあらゆる特徴は、 システム規模の大小を問わず効力を発揮します。大小のシステムが、リーズナブルにつながり合い、 クラウドエコシステムを容易に実現させていくことが、truncusの責務です。

truncus graph の導入事例

プラントエンジニアリングの統合BOM
プラントエンジニアリングのFEED(基本設計)およひEPC(設計・調達・工事)、 さらにはO&M(運用保守)いたる工程で不可欠な統合BOMを truncus graph で実現しました。 従来のDBOM(設計BOM)、EBOM(エンジニアリングBOM)から1つの統合BOMにすることで、 トレーサビリティを向上させ、あらゆるフィードバックループを構築できます。 このお客様はデジタルトランスフォーメーションの基盤として truncus graph を利用した バックエンドプラットフォームを実現しています。
技術コンテンツの意味検索
大手出版社の検索サービスで利用する技術コンテンツ情報をセンテンス単位でグラフ構造としてデータ格納しています。 また、現実を表象するために業界のスペシャリストによって、そのグラフデータベースに対して意味補完しており、 お客様が求めている情報を正確に引き当てる意味検索機能を実現しています。

製品情報・トライアルはこちらから