Skip to content

Castoro::gateway cache mechanism

lamatsujun edited this page Mar 29, 2012 · 8 revisions

Castoro::Gateway キャッシュ機構

Home > Components >

ページ目次

Gateway のキャッシュ機能は C++ 拡張ライブラリで提供されている。
Peer に関する情報と Basket に関する情報の記憶及び参照機能を持つ。

クラス図

C++ 製の主要なクラスを図示する。

データ構造

キャッシュは下記の情報を記憶する。

  • Peer に関する情報
    • Peer オブジェクトに Peer の状態を関連付け、Peers オブジェクトにまとめてメモリに記憶する。
  • Basket に関する情報
    • Peers オブジェクト内の該当 Peer オブジェクトに関連付け、メモリに記憶する。
  • キャッシュ内のデータ構造
    Database
     ├ PeerStatusMap
     │  ├ peer1_id : PeerStatus (status, available, expire)
     │  │・
     │  │・×Peer数
     │  │・
     │  └ peer6_id : PeerStatus (status, available, expire)
     └ CachePagePool
       ├ CachePage
       │・
       │・ Xページ数 (※ページは「 content_id / 4096 」 and 「 content_type 」にて切り替わる)
       │・
       └ CachePage
         ├ content_id = [ revision, peer1_id, peer2_id, peer3_id ] (※3 Peer まで格納可能)
         │・
         │・ (※1ページ内には、4096 content_id まで格納可能 )
         │・
         └ content_id = [ revision, peer4_id, peer5_id, peer6_id ]
    

詳細情報は下表の通り。

  • Peer に関する情報
項目名 説明
peer_id Peer サーバのホスト名。
Peer オブジェクトに記憶する。
available Peer サーバの空き容量。
Peer オブジェクトに関連付けられて、後述の status, expire と共に記憶する。
status Peer サーバの運転状態。
Peer オブジェクトに関連付けて記憶する。
expire 設定された時間内に Peer の状態が更新されないと、その Peer オブジェクト及び関連 Basket 情報へのアクセスに応じない。
Peer オブジェクトに関連付けて記憶する。
  • Basket に関する情報
項目名 説明
content_id 後述の content_type, revision と組み合わせて一意性を確立している。
Peer オブジェクトに関連付けて記憶する。
content_type Basket の一意性を確立する要素の一つ。
content_id と revision と関連付けて記憶する。
revision Basket のバージョン番号。
content_id, content_type の組合せごとに一つだけ記憶される。

データ管理

  • Peer の状態
    キャッシュに Peer の状態 (ステータスコード) を管理するオブジェクトを生成し、そのオブジェクトを該当 Peer オブジェクトと関連付けて管理する。
  • Basket 情報
    キャッシュに Basket 情報記憶領域を設け、複数の Basket 情報 (BasketKey、Peer のホスト名) を後述のページにまとめて管理している。
  • ページについて
    本キャッシュ機構が Basket 情報を記憶するグループ単位である。ページの仕様は以下の通り。
    • 1ページの容量は 32,768 Bytes
    • 1ページの最大記憶 Basket 数:4,096
    • Basket 単位で関連付け可能な最大 Peer 数:3
      ( ※ 4 Peer 以降は、常に最初に関連付けられた Peer との関連付けを上書きする。 )
    • 1ページの最大記憶レコード数:12,288
  • ページの特性
    Basket 情報の記憶は、Baketkey (content_id.content_type.revision) に基づく。
    具体的には、それぞれ以下の特性に従う。
    • content_id について
      • 4096 の商ごとに別ページに記憶する。
        • 例.)
          0~4095 の場合、1ページ目に記憶する。
          4096~8191 の場合、2ページ目に記憶する。
          以降、4096 ごとに同じページ内に記憶する。
          
    • content_type について
      • content_type 別に異なるページに記憶する。
      • content_id が同一であっても、別ページに記憶する。
        • 例.)
          「 1.1.1 」: 1ページ目
          「 1.2.1 」: 2ページ目
          ※ content_id が同じでも content_type が違うと別ページに記憶する。
          
    • revision について
      • 常に後の書込みに上書きされる。 (※revision は、任意に指定可能)
        • 例.)
          1. 「 1.1.2 」のBasket情報を記憶後
          2. 「 1.1.1 」のBasket情報を記憶する
          ※ キャッシュ内には「 1.1.1 」の Basket 情報のみ残る。
          
    • 空きページが無い場合
      一番古くに記憶されたBasket情報が残っているページのBasket情報を全て消去して、そのページに書込む。

ページTOPへ