-
Notifications
You must be signed in to change notification settings - Fork 3
Castoro::gateway cache mechanism
lamatsujun edited this page Mar 29, 2012
·
8 revisions
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 ごとに同じページ内に記憶する。
- 例.)
- 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 情報のみ残る。
- 例.)
- 常に後の書込みに上書きされる。 (※revision は、任意に指定可能)
-
空きページが無い場合
一番古くに記憶されたBasket情報が残っているページのBasket情報を全て消去して、そのページに書込む。
- content_id について