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> mm_map = new HashMap>(); /* 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 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 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 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 data = (Dictionary) 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; } }