172 lines
4.8 KiB
Java
172 lines
4.8 KiB
Java
package cs448;
|
|
|
|
import org.mapdb.DB;
|
|
import org.mapdb.DBMaker;
|
|
import org.mapdb.Serializer;
|
|
|
|
import java.io.IOException;
|
|
import java.util.Dictionary;
|
|
import java.util.HashMap;
|
|
import java.util.Hashtable;
|
|
import java.util.Scanner;
|
|
import java.util.concurrent.ConcurrentMap;
|
|
import java.io.File;
|
|
import java.lang.StringBuilder;
|
|
|
|
/**
|
|
* A class to compare different storage backends.
|
|
*
|
|
* @author Sean Rettig
|
|
* @version January 22, 2024
|
|
*/
|
|
|
|
|
|
public class project1 {
|
|
|
|
/* Data structure for Main-memory back-end */
|
|
HashMap<String,Dictionary<String, String>> mm_map = new HashMap<String,Dictionary<String, String>>();
|
|
|
|
/* Data structure for MapDB persistent storage*/
|
|
String dbfile = "data.db";
|
|
DB db = DBMaker.fileDB(dbfile).make();
|
|
|
|
// use this for MapDB storage
|
|
ConcurrentMap mapdb = db.hashMap("map").make();
|
|
|
|
void load_mainmemory(String file_path) throws IOException {
|
|
Scanner sc = new Scanner((new File(file_path)));
|
|
String line = "";
|
|
|
|
while (sc.hasNextLine()) {
|
|
line = sc.nextLine();
|
|
String[] row = line.split("\t");
|
|
|
|
Dictionary<String, String> row_dict = new Hashtable<>();
|
|
|
|
row_dict.put("primaryName", row[1]);
|
|
row_dict.put("birthYear", row[2]);
|
|
row_dict.put("deathYear", row[3]);
|
|
row_dict.put("primaryProfession", row[4]);
|
|
row_dict.put("knownForTitles", row[5]);
|
|
|
|
mm_map.put(row[0], row_dict);
|
|
}
|
|
}
|
|
|
|
void load_mapdb(String file_path) throws IOException{
|
|
Scanner sc = new Scanner((new File(file_path)));
|
|
String line = "";
|
|
|
|
while (sc.hasNextLine()) {
|
|
line = sc.nextLine();
|
|
String[] row = line.split("\t");
|
|
|
|
Dictionary<String, String> row_dict = new Hashtable<>();
|
|
|
|
row_dict.put("primaryName", row[1]);
|
|
row_dict.put("birthYear", row[2]);
|
|
row_dict.put("deathYear", row[3]);
|
|
row_dict.put("primaryProfession", row[4]);
|
|
row_dict.put("knownForTitles", row[5]);
|
|
|
|
mapdb.put(row[0], row_dict);
|
|
}
|
|
}
|
|
|
|
String select_file(String file_path, String key, String[] column_names) throws IOException{
|
|
Scanner sc = new Scanner(new File(file_path));
|
|
String line = "";
|
|
|
|
while (sc.hasNextLine()) {
|
|
line = sc.nextLine();
|
|
if (line.contains(key)) {
|
|
sc.close();
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (line != "") {
|
|
String[] row = line.split("\t");
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
for (String col_name : column_names) {
|
|
switch (col_name) {
|
|
case "nconst":
|
|
sb.append(row[0]);
|
|
break;
|
|
|
|
case "primaryName":
|
|
sb.append(row[1]);
|
|
break;
|
|
|
|
case "birthYear":
|
|
sb.append(row[2]);
|
|
break;
|
|
|
|
case "deathYear":
|
|
sb.append(row[3]);
|
|
break;
|
|
|
|
case "primaryProfession":
|
|
sb.append(row[4]);
|
|
break;
|
|
|
|
case "knownForTitles":
|
|
sb.append(row[5]);
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
sb.append("\t");
|
|
}
|
|
line = sb.toString();
|
|
|
|
}
|
|
return line;
|
|
}
|
|
|
|
String select_mainmemory(String key, String[] column_names){
|
|
StringBuilder sb = new StringBuilder();
|
|
Dictionary<String, String> data = mm_map.get(key);
|
|
for (String col_name : column_names) {
|
|
if (col_name == "nconst") {
|
|
sb.append(key);
|
|
} else {
|
|
sb.append(data.get(col_name));
|
|
}
|
|
sb.append("\t");
|
|
}
|
|
return sb.toString();
|
|
}
|
|
|
|
String select_mapdb(String key, String[] column_names){
|
|
StringBuilder sb = new StringBuilder();
|
|
Dictionary<String, String> data = (Dictionary<String, String>) mapdb.get(key);
|
|
for (String col_name : column_names) {
|
|
if (col_name == "nconst") {
|
|
sb.append(key);
|
|
} else {
|
|
sb.append(data.get(col_name));
|
|
}
|
|
sb.append("\t");
|
|
}
|
|
return sb.toString();
|
|
}
|
|
|
|
int fastestLoad(){
|
|
// 1: Main-memory Load
|
|
// 2: MapDB Load
|
|
int fastest = 1;
|
|
return fastest;
|
|
}
|
|
|
|
int fastestSelect(){
|
|
// 0: File Select
|
|
// 1: Main-memory Select
|
|
// 2: MapDB Select
|
|
int fastest = 1;
|
|
return fastest;
|
|
}
|
|
}
|