*I couldn't add the full code here as text. That's why, I've attached that 
to this post.*

*So, if I shouldn't create one graph query for each query and then shut 
down them, how can I test lots of different queries in one run?*

*Thanks.*

On Thursday, March 24, 2016 at 11:25:30 PM UTC-7, Mohammad Hossain Namaki 
wrote:
>
> Hi all,
> I'm using neo4j.2.3.0.
> I'm running some experiments (over ~1000 graph queries) on the Neo4j Java 
> API. I don't use the cypher for that. So, I have my own algorithm. After 
> running around 100/200 queries, I'm getting the "GC Overhead Limit 
> Exceeded". I think there is something wrong with "
> org.neo4j.io.pagecache.impl.muninn.MuninnPageCache". 
>
> *Is there anyway to bound this cache size in Java API? or disable it?*
>
> I've already used this:
>
> knowledgeGraph = new GraphDatabaseFactory().newEmbeddedDatabaseBuilder(
> MODELGRAPH_DB_PATH)
>
> .*setConfig(GraphDatabaseSettings.pagecache_memory, "500M")*
> .newGraphDatabase();
>
> but it didn't work.
>
>
> Every time, I open a nested transaction for both query/data graphs and I 
> success/close them after finishing each query.
>
>
> I've used -Xmx12g -Xms12g as VM arguments and my machine has 16GB memory. 
> The data graph itself has 4.00 GB volume on the disk.
>
>
> Could you please help me on that?
>
>
> Thanks
>
>
>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Neo4j" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
package wsu.eecs.mlkd.KGQuery.machineLearningQuerying;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;

import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.factory.GraphDatabaseFactory;
import org.neo4j.graphdb.factory.GraphDatabaseSettings;

import wsu.eecs.mlkd.KGQuery.TopKQuery.CacheServer;
import wsu.eecs.mlkd.KGQuery.TopKQuery.CalculationNode;
import wsu.eecs.mlkd.KGQuery.TopKQuery.CalculationTreeSiblingNodes;
import wsu.eecs.mlkd.KGQuery.TopKQuery.Dummy;
import wsu.eecs.mlkd.KGQuery.TopKQuery.Levenshtein;
import wsu.eecs.mlkd.KGQuery.TopKQuery.NeighborIndexing;
import wsu.eecs.mlkd.KGQuery.TopKQuery.PreProcessingLabels;
import wsu.eecs.mlkd.KGQuery.TopKQuery.StarFramework;
import wsu.eecs.mlkd.KGQuery.TopKQuery.TreeNode;
import wsu.eecs.mlkd.KGQuery.TopKQuery.Dummy.DummyFunctions;
import wsu.eecs.mlkd.KGQuery.TopKQuery.Dummy.DummyProperties;
import wsu.eecs.mlkd.KGQuery.test.QueryFromFile;
import wsu.eecs.mlkd.KGQuery.test.QueryGenerator;

public class QuerySeparator {
	private static String MODELGRAPH_DB_PATH = "";
	private static String PATTERNGRAPH_DB_PATH = "";

	public static String queryFileName = "";
	public static String queryFileDirectory = "";
	public static int k = 0;
	public StarFramework starFramework2;
	public static String GName = ""; // Yago, DBPedia, ...

	public static String queryDBInNeo4j = "query.db";
	public static String GDirectory = "";
	public static int numberOfSameExperiment = 5;

	public GraphDatabaseService queryGraph;
	public GraphDatabaseService knowledgeGraph;
	public float alpha = 0.5F;
	public Levenshtein levenshtein;
	public CacheServer cacheServer;
	public HashMap<Integer, TreeNode<CalculationNode>> calcTreeNodeMap;
	public HashMap<Integer, CalculationTreeSiblingNodes> joinLevelSiblingNodesMap;
	public HashMap<Long, Integer> nodeEstimationMap;
	public int startingQueryIndex = 0;
	public NeighborIndexing neighborIndexingInstance;

	public static void main(String[] args) throws Exception {
		QuerySeparator foq = new QuerySeparator();
		foq.initialize(args);
	}

	public void initialize(String[] args) throws Exception {

		cacheServer = new CacheServer();

		DummyProperties.debuggMode = false;

		int numberOfPrefixChars = 0;
		for (int i = 0; i < args.length; i++) {
			if (args[i].equals("-queryFileName")) {
				queryFileName = args[++i];
				queryFileName = queryFileName.replace(".txt", "");
			} else if (args[i].equals("-queryFileDirectory")) {
				queryFileDirectory = args[++i];
				if (!queryFileDirectory.endsWith("/") && !queryFileDirectory.equals("")) {
					queryFileDirectory += "/";
				}
			} else if (args[i].equals("-k")) {
				k = Integer.parseInt(args[++i]);
			} else if (args[i].equals("-GName")) {
				GName = args[++i];
			} else if (args[i].equals("-GDirectory")) {
				GDirectory = args[++i];

			} else if (args[i].equals("-similarityThreshold")) {
				DummyProperties.similarityThreshold = Float.parseFloat(args[++i]);
			} else if (args[i].equals("-numberOfPrefixChars")) {
				numberOfPrefixChars = Integer.parseInt(args[++i]);
			} else if (args[i].equals("-startingQueryIndex")) {
				startingQueryIndex = Integer.parseInt(args[++i]);
			}

		}

		if (numberOfPrefixChars > 0) {
			DummyProperties.numberOfPrefixChars = numberOfPrefixChars;
		}
		if (!GDirectory.endsWith("/")) {
			GDirectory += "/";
		}
		MODELGRAPH_DB_PATH = GDirectory + GName;
		PATTERNGRAPH_DB_PATH = queryFileDirectory + queryDBInNeo4j;

		QueryGenerator queryGenerator = new QueryGenerator(GDirectory + GName);

		knowledgeGraph = new GraphDatabaseFactory().newEmbeddedDatabaseBuilder(MODELGRAPH_DB_PATH)
				.setConfig(GraphDatabaseSettings.pagecache_memory, "500M").newGraphDatabase();

		DummyFunctions.printIfItIsInDebuggedMode("after initialization of GraphDatabaseServices");
		registerShutdownHook(knowledgeGraph);

		long start_time, end_time;
		double difference;

		HashMap<String, HashSet<Long>> nodeLabelsIndex = PreProcessingLabels.getPrefixLabelsIndex(knowledgeGraph,
				Dummy.DummyProperties.numberOfPrefixChars);

		neighborIndexingInstance = new NeighborIndexing();
		start_time = System.nanoTime();
		neighborIndexingInstance.knowledgeGraphNeighborIndexer(knowledgeGraph);
		end_time = System.nanoTime();
		difference = (end_time - start_time) / 1e6;
		System.out.println("knowledgeGraphNeighborIndexer finished in " + difference + "miliseconds!");

		float alpha = 0.5F;
		levenshtein = new Levenshtein(nodeLabelsIndex, Dummy.DummyProperties.numberOfPrefixChars);

		// String nodeEstimation = "";
		// String queryInfo = "";
		// String joinableNodes = "";

		int queryIndex = 0;
		for (File file : fileInTheDirfinder(queryFileDirectory)) {
			queryFileName = file.getName();

			// output the queries
			// File fout = new File(queryFileName + "_filtered.txt");
			// FileOutputStream fos = new FileOutputStream(fout);
			//
			// BufferedWriter bwFilteredQueries = new BufferedWriter(new
			// OutputStreamWriter(fos));

			List<QueryFromFile> queriesFromFile = queryGenerator.getQueryFromFile(queryFileDirectory + queryFileName);

			for (QueryFromFile queryFromFile : queriesFromFile) {

				queryIndex++;
				if (queryIndex < startingQueryIndex) {
					continue;
				}
				// DummyFunctions.printIfItIsInDebuggedMode("start
				// ConstrucQueryGraph");
				System.out.println(queryFileName + " queryIndex: " + queryIndex);
				GraphDatabaseService smallGraph = queryGenerator.ConstrucQueryGraph(PATTERNGRAPH_DB_PATH,
						queryFromFile);
				// DummyFunctions.printIfItIsInDebuggedMode("end
				// ConstrucQueryGraph");

				queryGraph = smallGraph;
				registerShutdownHook(queryGraph);

				start_time = System.nanoTime();
				neighborIndexingInstance.queryNeighborIndexer(queryGraph);
				end_time = System.nanoTime();
				difference = (end_time - start_time) / 1e6;
				// Dummy.DummyFunctions
				// .printIfItIsInDebuggedMode("queryNeighborIndexer finished in
				// " + difference + "miliseconds!");
				try (Transaction txG = knowledgeGraph.beginTx()) {
					try (Transaction txQ = queryGraph.beginTx()) {

						// int numberOfQNodes =
						// neighborIndexingInstance.queryNodeIdSet.size();

						boolean dontRunThisQuery = false;
						for (Long qNodeId : neighborIndexingInstance.queryNodeLabelMap.keySet()) {
							if (neighborIndexingInstance.queryNodeLabelMap.get(qNodeId)
									.length() < DummyProperties.numberOfPrefixChars) {
								dontRunThisQuery = true;
							}
						}
						if (dontRunThisQuery) {
							txQ.success();
							txQ.close();
							txG.success();
							txG.close();
							queryGraph.shutdown();
							queryGraph = null;

							System.out.println();
							// System.gc();
							// System.runFinalization();
							continue;
						}

						starFramework2 = getNewStarFrameworkInstance();

						HashSet<Long> allNodesForSaving = new HashSet<Long>();
						for (Long qNodeId : neighborIndexingInstance.queryNodeIdSet) {
							allNodesForSaving.add(qNodeId);
						}

						queryGenerator.SaveQueryInfo(queryIndex, allNodesForSaving, queryFileName, null, null, null,
								null, neighborIndexingInstance, starFramework2.starQueries.size());

						// writing in another file.

						// allNodesForSaving = null;
						// nodeEstimation = null;
						// queryInfo = null;
						starFramework2 = null;
						txQ.success();
						txQ.close();
					}

					catch (Exception exc) {
						System.out.println("queryGraph Transaction failed");
						exc.printStackTrace();
						// System.gc();
						// System.runFinalization();
					}

					txG.success();
					txG.close();
				} catch (Exception exc) {
					System.out.println("modelGraph Transaction failed");
					exc.printStackTrace();
					// System.gc();
					// System.runFinalization();
				}

				queryGraph.shutdown();
				queryGraph = null;
				smallGraph = null;
				// System.gc();
				// System.runFinalization();
			}
			//startingQueryIndex = 0;
			queriesFromFile = null;
			// System.gc();
			// System.runFinalization();
			// bwFilteredQueries.close();
		}

		knowledgeGraph.shutdown();
	}

	private static void registerShutdownHook(final GraphDatabaseService graphDb) {
		Runtime.getRuntime().addShutdownHook(new Thread() {
			@Override
			public void run() {
				graphDb.shutdown();
			}
		});
	}

	public static File[] fileInTheDirfinder(String dirName) {
		File dir = new File(dirName);

		return dir.listFiles(new FilenameFilter() {
			public boolean accept(File dir, String filename) {
				return filename.endsWith(".txt");
			}
		});

	}

	public StarFramework getNewStarFrameworkInstance(GraphDatabaseService queryGraph,
			GraphDatabaseService knowledgeGraph, int k2, float alpha, Levenshtein levenshtein,
			NeighborIndexing neighborIndexingInstance) {
		this.starFramework2 = null;
		this.nodeEstimationMap = null;

		cacheServer.clear();
		this.starFramework2 = new StarFramework(queryGraph, knowledgeGraph, k, alpha, levenshtein);
		nodeEstimationMap = starFramework2.decomposeQuery(queryGraph, knowledgeGraph, neighborIndexingInstance,
				cacheServer);

		return starFramework2;
	}

	public StarFramework getNewStarFrameworkInstance() {
		return getNewStarFrameworkInstance(queryGraph, knowledgeGraph, k, alpha, levenshtein, neighborIndexingInstance);
	}
}

Reply via email to