caching-approaches-comparison

Changes

push.sh 47(+47 -0)

Details

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)
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