[[TOC]] = Performance data = We have gathered performance data of two types of ABAC scenario. The first is the daisychaining of a large answer proof from a similarly sized ruleset. The second is the searching of a proof from a noisy ruleset. == daisychain == Many cascading Likes-rules and their matching principal credentials are generated: {{{ John0.likes <- John0 John1.likes <- John0 John2.likes <- John1 John3.likes <- John2 .. JohnMAX.likes <- JohnMAX-1 }}} Following graph shows the the time needed to load both attribute credentials and principal certificates ((2*MAX)+2) into the YAP prolog db. The Y axis is the total time in milliseconds. The X axis is the number of credentials that are in the YAP backend db. [[Image(source:/examples/scaling_tests/plotting/JPEGS/likes_load.jpeg)]] A valid query, '''JohnMAX.likes<-?-John0''' , is issued multiple times. The first query's time is collected and then subsequent 100 queries are collected and an average is taken. Next graph shows these lines. The X axis is the query time in microseconds and the Y axis is number of credentials in the YAP backend db. [[Image(source:/examples/scaling_tests/plotting/JPEGS/likes_goodquery.jpeg)]] An invalid query in the form of '''John0.likes<-?-JohnMAX''' is issued multiple times. The first query's time is collected and then subsequent 100 queries are collected and an average is taken. Next graph shows these lines. The X axis is the query time in microseconds and the Y axis is number of credentials in the YAP backend db. [[Image(source:/examples/scaling_tests/plotting/JPEGS/likes_badquery.jpeg)]] == haystack == The core credential setup is borrowed from the Ralphs' fruitprice and shopper's eating preference RT2 example, {{{ Mary.what2eat <- Ralphs.fruitprice(P:[..2.00]) Bob.what2eat <- Ralphs.fruitprice(P:[1.00 .. 5.00]) Ralphs.fruitprice(1.50) <- 'apple' Ralphs.fruitprice(1.50) <- 'kiwi' Ralphs.fruitprice(2.50) <- 'black rasberry' Ralphs.fruitprice(0.50) <- 'navel orange' }}} Noises are introduced by adding the rules about bananas and Johns. {{{ Ralphs.fruitprice(1.00) <- 'banana1' Ralphs.fruitprice(2.00) <- 'banana2' .. Ralphs.fruitprice(MAX.00) <- 'bananaMAX' }}} and, {{{ John1.what2eat <- Ralphs.fruitprice(P:[1.00 .. 5.00]) John2.what2eat <- Ralphs.fruitprice(P:[1.00 .. 5.00]) .. JohnMAX.what2eat <- Ralphs.fruitprice(P:[1.00 .. 5.00]) }}} Following graph shows the the time needed to load both attribute credentials and principal certificates ((3*MAX)+9) into the YAP prolog db. The Y axis is the total time in milliseconds. The X axis is the number of credentials that are in the YAP backend db. [[Image(source:/examples/scaling_tests/plotting/JPEGS/fruit_load.jpeg)]] A valid query, '''Mary.what2eat<-?-'navel orange'''', is issued multiple times. The returning answer proof is, {{{ Mary.what2eat <- pRalphs.fruitprice(P:[..2.00]) Ralphs.fruitprice(0.50) <- 'navel orange' }}} The first query's time is collected and the subsequent 100 queries are collected and averaged. Next graph shows these lines. The X axis is the query time in microseconds and the Y axis is number of credentials in the YAP backend db. [[Image(source:/examples/scaling_tests/plotting/JPEGS/fruit_goodquery.jpeg)]] An invalid query in the form of '''Bob.what2eat<-?-'navel orange'''' is issued multiple times. The first query's time is collected and then subsequent 100 queries are collected and averaged. Next graph shows these lines. The X axis is the query time in microseconds and the Y axis is number of credentials in the YAP backend db. [[Image(source:/examples/scaling_tests/plotting/JPEGS/fruit_badquery.jpeg)]]