caching-approaches-comparison
Details
analysis/cache-balance.R 83(+55 -28)
diff --git a/analysis/cache-balance.R b/analysis/cache-balance.R
index 607a660..2356907 100644
--- a/analysis/cache-balance.R
+++ b/analysis/cache-balance.R
@@ -1,17 +1,51 @@
library(ggplot2)
library(scales)
+print("*** loading data ***")
hits <- read.csv("../applications/output/hits-distribution.csv")
-print("=== cache-balance ===")
-pdf("cache-balance.pdf")
-
+print("*** phase 1 -- non-aggregated analysis ***")
slice <- aggregate(formula = amount~application+version+users+name+event, data = hits, FUN = sum)
+
+print("=== number of used recommendations ===")
temp <- aggregate(formula = amount~application+version+users+name, data = slice, FUN = length)
temp <- aggregate(formula = name~application+version+users, data = temp, FUN = length)
-print("number of used recommendations")
reshape(temp, timevar = "users", idvar = c("application", "version"), direction = "wide")
+print("=== CSV conversion-comparison ===")
+conversions <- reshape(slice, timevar = "event", idvar = c("application", "version", "users", "name"), direction = "wide")
+conversions[is.na(conversions)] <- 1
+conversions[, "add_per_miss"] <- conversions[, "amount.addition"] / conversions[, "amount.miss"]
+conversions[, "hit_per_add"] <- conversions[, "amount.hit"] / conversions[, "amount.addition"]
+conversions[, "amount.hit"] <- NULL
+conversions[, "amount.addition"] <- NULL
+conversions[, "amount.miss"] <- NULL
+
+conversion_comparison <- reshape(conversions, timevar = "users", idvar = c("application", "version", "name"), direction = "wide")
+conversion_comparison <- format(conversion_comparison, digits = 5)
+write.csv(conversion_comparison, "conversion-comparison.csv")
+
+print("=== cache-balance-statistics ===")
+print("application version users event median mean standard-deviation")
+iter_applications = unique(slice$application)
+iter_versions = unique(slice$version)
+iter_users = unique(slice$users)
+iter_events = unique(slice$event)
+for (iter_application in iter_applications) {
+ for (iter_version in iter_versions) {
+ for (iter_user in iter_users) {
+ for (iter_event in iter_events) {
+ group_median <- median(slice[slice$application == iter_application & slice$version == iter_version & slice$users == iter_user & slice$event == iter_event, "amount"])
+ group_mean <- mean(slice[slice$application == iter_application & slice$version == iter_version & slice$users == iter_user & slice$event == iter_event, "amount"])
+ group_sd <- sd(slice[slice$application == iter_application & slice$version == iter_version & slice$users == iter_user & slice$event == iter_event, "amount"])
+ print(paste(iter_application, iter_version, iter_user, iter_event, group_median, group_mean, group_sd))
+ }
+ }
+ }
+}
+
+print("=== PDF cache-balance ===")
+pdf("cache-balance.pdf")
iter_applications = unique(slice$application)
for (iter_application in iter_applications) {
slice_application <- subset(slice, application == iter_application)
@@ -31,33 +65,25 @@ for (iter_application in iter_applications) {
ggtitle(iter_application)
print(plot)
}
-
dev.off()
-print("cache-balance-statistics")
-
-print("application version users event median mean standard-deviation")
-iter_applications = unique(slice$application)
-iter_versions = unique(slice$version)
-iter_users = unique(slice$users)
-iter_events = unique(slice$event)
-for (iter_application in iter_applications) {
- for (iter_version in iter_versions) {
- for (iter_user in iter_users) {
- for (iter_event in iter_events) {
- group_median <- median(slice[slice$application == iter_application & slice$version == iter_version & slice$users == iter_user & slice$event == iter_event, "amount"])
- group_mean <- mean(slice[slice$application == iter_application & slice$version == iter_version & slice$users == iter_user & slice$event == iter_event, "amount"])
- group_sd <- sd(slice[slice$application == iter_application & slice$version == iter_version & slice$users == iter_user & slice$event == iter_event, "amount"])
- print(paste(iter_application, iter_version, iter_user, iter_event, group_median, group_mean, group_sd))
- }
- }
- }
-}
+print("*** phase 2 -- aggregated analysis ***")
+slice <- aggregate(formula = amount~application+version+users+event, data = hits, FUN = sum)
-print("cache-balance-agreggated")
+print("=== CSV conversion-comparison-aggregated ===")
+conversions <- reshape(slice, timevar = "event", idvar = c("application", "version", "users"), direction = "wide")
+conversions[is.na(conversions)] <- 1
+conversions[, "add_per_miss"] <- conversions[, "amount.addition"] / conversions[, "amount.miss"]
+conversions[, "hit_per_add"] <- conversions[, "amount.hit"] / conversions[, "amount.addition"]
+conversions[, "amount.hit"] <- NULL
+conversions[, "amount.addition"] <- NULL
+conversions[, "amount.miss"] <- NULL
-slice <- aggregate(formula = amount~application+version+users+event, data = hits, FUN = sum)
+conversion_comparison <- reshape(conversions, timevar = "users", idvar = c("application", "version"), direction = "wide")
+conversion_comparison <- format(conversion_comparison, digits = 5)
+write.csv(conversion_comparison, "conversion-comparison-aggregated.csv")
+print("=== PDF cache-balance-agreggated ===")
iter_applications = unique(slice$application)
iter_users = unique(slice$users)
iter_events = unique(slice$event)
@@ -70,17 +96,18 @@ for (iter_application in iter_applications) {
}
}
+applications_labels <- c("Azkaban", "Cloudstore", "Keycloak", "Killbill", "Petclinic", "Shopizer", "Thingsboard")
+names(applications_labels) <- c("azkaban", "cloudstore", "keycloak", "killbill", "petclinic", "shopizer", "thingsboard")
plot <- ggplot(slice, aes(x = factor(users), y = percentage, fill = factor(version, levels = c("developers", "aplcache", "memoizeit"), labels = c("DEV", "APL", "MEM")))) +
geom_bar(stat = "identity", position = "dodge") +
scale_colour_grey(start = 0.2, end = 0.6) +
scale_fill_grey(start = 0.2, end = 0.6) +
geom_text(aes(label = amount), colour = "black", stat = "identity", size = 3.0, angle = 90, position = position_dodge(width = 0.9), hjust = -0.05) +
ylim(NA, 1.6) +
- facet_grid(event ~ application, scales = "free") +
+ facet_grid(event ~ application, scales = "free", labeller = labeller(application = applications_labels)) +
theme(axis.text.x = element_text(angle = 0)) +
theme(axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank()) +
theme(text = element_text(size = 8)) +
labs(x = "Number of Users", fill = "Approach") +
theme(legend.position = "bottom")
-
ggsave("cache-balance-agreggated.pdf", width = 10, height = 5.5)
analysis/throughput.R 20(+13 -7)
diff --git a/analysis/throughput.R b/analysis/throughput.R
index aa39adf..a335a9e 100644
--- a/analysis/throughput.R
+++ b/analysis/throughput.R
@@ -18,8 +18,18 @@ aggregate <- reshape(aggregate, idvar = c("application", "version", "users"), ti
actual_length <- length(aggregate)
aggregate["min_throughput"] <- apply(aggregate[, 4:actual_length], 1, FUN = min)
+aggregate["1st_quartile_throughput"] <- apply(aggregate[, 4:actual_length], 1, FUN = function(x) quantile(x, c(0.25)))
aggregate["median_throughput"] <- apply(aggregate[, 4:actual_length], 1, FUN = median)
+aggregate["3rd_quartile_throughput"] <- apply(aggregate[, 4:actual_length], 1, FUN = function(x) quantile(x, c(0.75)))
aggregate["max_throughput"] <- apply(aggregate[, 4:actual_length], 1, FUN = max)
+aggregate["stdev_throughput"] <- apply(aggregate[, 4:actual_length], 1, FUN = sd)
+
+temp <- aggregate
+temp[4:13] <- NULL
+print("throughput median values")
+throughput_comparison <- reshape(temp, timevar = "users", idvar = c("application", "version"), direction = "wide")
+throughput_comparison <- format(throughput_comparison, digits = 5)
+write.csv(throughput_comparison, "throughput_comparison.csv")
iter_applications = unique(aggregate$application)
iter_users = unique(aggregate$users)
@@ -33,12 +43,8 @@ for (iter_application in iter_applications) {
}
}
-temp <- aggregate
-temp[4:13] <- NULL
-temp[4] <- NULL
-temp[5:8] <- NULL
-print("throughput median values")
-reshape(temp, timevar = "users", idvar = c("application", "version"), direction = "wide")
+applications_labels <- c("Azkaban", "Cloudstore", "Keycloak", "Killbill", "Petclinic", "Shopizer", "Thingsboard")
+names(applications_labels) <- c("azkaban", "cloudstore", "keycloak", "killbill", "petclinic", "shopizer", "thingsboard")
plot <- ggplot(aggregate, aes(x = factor(users), y = median_percentage, fill = factor(version, levels = c("developers", "aplcache", "memoizeit", "uncached"), labels = c("DEV", "APL", "MEM", "NOCACHE")))) +
geom_bar(position = "dodge", stat = "identity") +
@@ -46,7 +52,7 @@ plot <- ggplot(aggregate, aes(x = factor(users), y = median_percentage, fill = f
geom_text(aes(label = sprintf("%.2f", median_throughput)), colour = "white", stat = "identity", size = 2.5, angle = 90, position = position_dodge(width = 0.9), hjust = 1.2) +
scale_fill_grey(start = 0.2, end = 0.6) +
scale_colour_grey(start = 0.2, end = 0.6) +
- facet_wrap(~ application, scales = "free", ncol = 4) +
+ facet_wrap(~ application, scales = "free", ncol = 4, labeller = labeller(application = applications_labels)) +
theme(axis.text.x = element_text(angle = 0)) +
theme(axis.title.y = element_blank(), axis.text.y = element_blank(), axis.ticks.y = element_blank()) +
labs(x = "Number of Users", fill = "Approach") +
push.sh 47(+47 -0)
diff --git a/push.sh b/push.sh
new file mode 100644
index 0000000..9ff09a1
--- /dev/null
+++ b/push.sh
@@ -0,0 +1,47 @@
+#!/bin/bash
+
+home=$(pwd)
+
+cd $home/approaches/MemoizeIt && git push
+cd $home/approaches/APLCache && git push
+
+cd $home/adapters/ApplicationTracer && git push
+cd $home/adapters/Cache && git push
+cd $home/adapters/JSONSerialiser && git push
+cd $home/adapters/java-callgraph && git push
+cd $home/adapters/RequestsSimulator && git push
+cd $home/adapters/Trace && git push
+
+cd $home/applications/uncached/killbill && git push
+cd $home/applications/uncached/azkaban && git push
+cd $home/applications/uncached/shopizer && git push
+cd $home/applications/uncached/cloudstore && git push
+cd $home/applications/uncached/thingsboard && git push
+cd $home/applications/uncached/keycloak && git push
+cd $home/applications/uncached/petclinic && git push
+
+cd $home/applications/developers/killbill && git push
+cd $home/applications/developers/azkaban && git push
+cd $home/applications/developers/shopizer && git push
+cd $home/applications/developers/cloudstore && git push
+cd $home/applications/developers/thingsboard && git push
+cd $home/applications/developers/keycloak && git push
+cd $home/applications/developers/petclinic && git push
+
+cd $home/applications/aplcache/killbill && git push
+cd $home/applications/aplcache/azkaban && git push
+cd $home/applications/aplcache/shopizer && git push
+cd $home/applications/aplcache/cloudstore && git push
+cd $home/applications/aplcache/thingsboard && git push
+cd $home/applications/aplcache/keycloak && git push
+cd $home/applications/aplcache/petclinic && git push
+
+cd $home/applications/memoizeit/killbill && git push
+cd $home/applications/memoizeit/azkaban && git push
+cd $home/applications/memoizeit/shopizer && git push
+cd $home/applications/memoizeit/cloudstore && git push
+cd $home/applications/memoizeit/thingsboard && git push
+cd $home/applications/memoizeit/keycloak && git push
+cd $home/applications/memoizeit/petclinic && git push
+
+cd $home && git push