Download - 高速な挿入と検索が可能なSkip Graphの改良
4
Skip Graph | 構造
3 5 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110 111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
キー メンバシップベクタ(基数 w = 2 )
高さO(logwn)
1*
0*
10*
11*
00*
01*
5
本研究の目的Skip Graph をベースとした
新たな構造化オーバレイの提案◦ノードの挿入・検索を高速化
Skip Graph◦挿入時間 : O(w * logwn)
◦検索時間 : O(w * logwn)
◦経路表のサイズ : O(logwn)
6
本研究の目的Skip Graph をベースとした
新たな構造化オーバレイの提案◦ノードの挿入・検索を高速化
Skip Graph◦挿入時間 : O(w * logwn) O(logwn)
◦検索時間 : O(w * logwn) O(logwn)
◦経路表のサイズ : O(logwn) . O(r * logwn)
7
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 20 23
101 111 001 010 011 000 100 111 010Level 0
3 5
6 8 11 13
15 20
23Level 1
3
5
6
8 11
13
15
20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入
8
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110 111 010Level 0
3 5
6 8 11 13
15 20
23Level 1
3
5
6
8 11
13
15
20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入
9
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 20 23
101 111 001 010 011 000 100
110
111 010Level 0
3 5
6 8 11 13
15 20
23Level 1
3
5
6
8 11
13
15
20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入
16
10
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110 111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入
11
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110 111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入
12
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110 111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入
13
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 16 20 23
101 111
001 010 011 000 100 110 111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入
14
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 16 20 23
101 111
001 010 011 000 100 110 111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入
15
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110
111
010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入
16
Skip Graph | 挿入アルゴリズム
3 5 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110
111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
20
23
Level 2
1*
0*
10*
11*
00*
01*
ノード 16 を挿入 Level 3
16
16
17
Skip Graph | 挿入アルゴリズム
挿入時間 : O(w * logwn)
◦挿入時間 : 挿入時に通信したノード数◦各レベルで横方向に辿るノード数は平均 w
◦レベル(高さ)は O(logwn)
3 5 6 8 11 13 15 20 23
101 111 001 010 011 000 100
110
111 010Level 0
16
18
Skip Graph | 検索アルゴリズムノード 23 がキー 5 を検索
3 5 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110
111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
1*
0*
10*
11*
00*
01*
19
Skip Graph | 検索アルゴリズムノード 23 がキー 5 を検索
3 5 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110
111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
1*
0*
10*
11*
00*
01* 1hop
20
Skip Graph | 検索アルゴリズムノード 23 がキー 5 を検索
3 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110
111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
1*
0*
10*
11*
00*
01*2hop
1hop
5
21
Skip Graph | 検索アルゴリズムノード 23 がキー 5 を検索
3 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110
111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
1*
0*
10*
11*
00*
01*2hop
1hop
3hop
5
22
Skip Graph | 検索アルゴリズムノード 23 がキー 5 を検索
3 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110
111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
1*
0*
10*
11*
00*
01*2hop
1hop
4hop
5
3hop
23
Skip Graph | 検索アルゴリズム
検索時間 : O(w * logwn)
◦検索時間 : 検索時に通信したノード数
3 6 8 11 13 15 16 20 23
101 111 001 010 011 000 100 110 111 010Level 0
3 5
6 8 11 13
15 16 20
23Level 1
3
5
6
8 11
13
15
16 20
23
Level 2
1*
0*
10*
11*
00*
01*2hop
1hop
4hop
5
3hop
25
提案手法 | 構造Skip Graph をベース各レベル左方向にポインタを複数持つ
◦これを経路表として利用◦右方向は 1 ノードのみ( Skip Graph と同様)
Skip Graph の構造 提案手法の構造
27
提案手法 | 近隣ノード集合各レベルで左方向最大 r 個のノードへの
ポインタを持つ◦近隣ノード集合と呼ぶ
3 5 6 8 11 13 15 16 20 23Level 0
3 5
6 8 11 13
15 16 20
23Level 1
近隣ノード集合r = 3
Level 近隣ノード集合
0 11, 13, 15
1 3, 5, 15
28
提案手法 | リスト ID
連結リストごとにユニークな ID を振る◦接続先の選択に利用
メンバシップベクタの代わりとなる
380 580 680 880 1180 1380 1580 1680 2080 2380
Level 0
383 583
682 882 1182 1382
1583 1683 2083
2382Level 1
リスト ID”82” の連結リスト
29
提案手法 | リスト ID
近隣ノード集合の各要素は,1 つ上のレベルで所属するリスト ID を保持
380 580 680 880 1180 1380 1580 1680 2080 2380
Level 0
357 557
682 882 1182 1382
1557 1657 2057
2382Level 1
ノード 16 が持つレベル 0 の
近隣ノード集合
1182, 1382, 1557
近隣ノード集合r = 3
30
提案手法 | 挿入アルゴリズムノード 16 を挿入
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
w = 2r = 3
31
提案手法 | 挿入アルゴリズムノード 16 を挿入
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 2r = 3
32
提案手法 | 挿入アルゴリズムノード 15 から近隣ノード集合をコピーす
る
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
ノード 15 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382
コピー
w = 2r = 3
33
提案手法 | 挿入アルゴリズムノード 16 の近隣ノード集合にノード 15 を
追加
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382, 1557
w = 2r = 3
34
提案手法 | 挿入アルゴリズムLevel1 での挿入先を探すためリスト数を数え
る
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 2r = 3
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382, 1557
35
提案手法 | 挿入アルゴリズム1) 目標リスト数 w を満たす
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382, 1557
w = 2r = 3
36
提案手法 | 挿入アルゴリズムランダムにリストを選びレベル 1 に挿入
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 2r = 3
1657
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382, 1557
37
提案手法 | 挿入アルゴリズム挿入されたことを 1 つ下のレベルに通知する
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 2r = 3
1657
38
提案手法 | 挿入アルゴリズム2) 目標リスト数 w を満たさない
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382, 1557
w = 3r = 3
39
提案手法 | 挿入アルゴリズム新たなリストを作り挿入終了
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 3r = 3
1699
40
挿入アルゴリズムの比較Skip Graph
◦1 つづつ辿るため挿入に時間がかかる◦O(w * logwn)
提案手法◦近隣ノード集合を利用することで,
一度に r 個まとめてチェックでき高速◦O(logwn)
41
不必要なリストを作る問題ノード 16 を挿入
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382 1582
2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 2r = 3
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382, 1582
42
不必要なリストを作る問題ノード 16 を挿入
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382 1582
2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 2r = 3
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382, 1582
1699
43
不必要なリストを作る問題検索性能が悪化
◦上位レベルでスキップできなくなるため
対応策◦近隣ノード集合の数 r を増やす
挿入時に通信を多く必要とする
◦複数の近隣ノード集合を利用する 本提案ではこちらを採用
44
不必要なリストを作らないためにノード 16 を挿入
44
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382 1582
2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 2r = 3
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382, 1582
45
不必要なリストを作らないために最も遠い近隣ノードの近隣ノード集合も利用
45
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382 1582
2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 2r = 3
ノード 16 が持つレベル 0 の
近隣ノード集合
882, 1182, 1382, 1582
ノード 8 が持つレベル 0 の
近隣ノード集合
357, 557, 682
46
不必要なリストを作る対応策最も遠い近隣ノードに問い合わせる
◦1 度ではなく最大 k 回行う◦w を満たすと打ち切るので高々 k 回となる
不必要なリストができてしまった場合はリストをマージする◦アルゴリズムの提案はしています
本発表では省略
47
提案手法 | 検索アルゴリズムノード 23 がキー 5 を検索左方向に優先的にルーティングする
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
w = 2r = 3
1680
1657
1672
48
提案手法 | 検索アルゴリズム各レベルの近隣ノード集合を利用して転送
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
1657
w = 2r = 3
1hop
1672
49
提案手法 | 検索アルゴリズム各レベルの近隣ノード集合を利用して転送
380 580 680 880 1180 1380 1580 2080 2380
Level 0
357 557
682 882 1182 1382
1557 2057
2382Level 1
372
577
689
893 1193
1389
1572
2077
2393
Level 2
1680
w = 2r = 3
1hop
1657
1672
2hop
50
検索アルゴリズムの比較Skip Graph
◦検索時間 : O(w * logwn)
◦平均経路表サイズ : 約 2 * logwn
提案手法◦検索時間 : O(logwn)
近隣ノード集合も検索に利用している
◦平均経路表サイズ : 約 (r + 1) * logwn 経路表サイズが大きいので高速に目的ノードに近づけ
る
51
メンバシップベクタは必要か ?
メンバシップベクタがあったほうがリスト数を厳密にコントロールできて良いのでは ?◦ネットワーク分割があると駄目◦メンバシップベクタがあってもリストのマージは必
要
53
評価 | 挿入時間提案手法と Skip Graph とで,
オーバレイネットワークを構成し挿入時間の分布を測定◦ノード数 = 10,000
◦Skip Graph メンバシップベクタの基数 w = 2
◦提案手法 目標リスト数 w = {2, 4, 8, 16} 近隣ノード集合数 r = w 最も遠い近隣ノードに問い合わせる回数 k は大きくと
る
57
評価 | 経路表サイズと検索時間の関係
提案手法では, w と r を変化させることで経路表サイズを自由に変更できる◦経路表サイズと検索時間の関係を調べた
提案手法のパラメータ◦w = {2, 4, 8, 16, 32, 64}
◦r = {w, 2w, 3w, 4w}
◦最も遠い近隣ノードに問い合わせる回数 k は大きくとる
58
実験結果 | 経路表サイズと検索時間の関係
Skip Graph
r = w
r = 2w
r = 3w
r = 4w
w = 2
w = 4
w = 8
w = 16w = 32
w = 64
59
評価 | リスト分割時の検索時間パラメータ次第では,各レベルで目標とする
wよりも多くのリストが作られることがある◦上位レベルのルーティングが機能しなくなる
リストの分割が検索時間に与える影響を調べた
提案手法のパラメータ◦w = {2, 4, 8, 16}
◦r = w
◦k = 1 〜 20
61
評価 | 挿入時のメッセージ数挿入操作で送信された総メッセージ数を取
得◦ノード数 = 1,000
◦Skip Graph メンバシップベクタの基数 w = 2
◦提案手法 目標リスト数 w = {2, 4, 8, 16, 32, 64} 近隣ノード集合数 r = w 最も遠い近隣ノードに問い合わせる回数 k は大きくと
る
64
まとめSkip Graph をベースとした
構造化オーバーレイの提案◦近隣ノード集合を導入
Skip Graph と比べて経路表サイズを増やし,検索時間を短縮
経路表サイズが増えているにも関わらず,挿入時間も高速化
経路表サイズは r と w で調整可能
◦アルゴリズムは単純(本当 ? )◦メンバシップベクタを廃止しリスト ID を導入