jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From zevon <satee...@expedia.com>
Subject Re: Performance as compared to simple sql db query is quite bad
Date Fri, 01 Feb 2008 11:49:52 GMT

Thanks guys. I do understand that it's not a fair comparision, but the order
of magnitude is what was concerning and given my data would eaily fit into a
sql table, I gave it a shot to see how it fares.

Alessandro, to clear a couple of things, the query in code is correct and
structure I mentioned is incorrect. It should read
/data/componentIds/type*/* instead.

Per the suggestion I tried '//*' and it did dramatically well. For 8000
items, first run took ~4000ms and second run ~80ms (probably everything is
in cache). 

I am afraid I might not be able to use '//*' everytime, the given example
was the simple one, but for each of these type nodes, I would have nodes
which carry other information and one referring the other. Doing a  scan
everytime and filtering out unwanted would be expensive too.

Can I specify the schema for the tables, with the current tables with just 2
columns it seems like it won't scale well(storing hierarchy in 2
columns/flat table)

Ard your documentation will definitely help. Thanks.

Are there any benchmarks that I can look at?

-Sateesh.



zevon wrote:
> 
> The project I am looking into needs to store friendly ids to a file, and
> there could be multiple types of file. I want to show the result which
> lists all the id's. Below is the JR structure and SQL table and their
> performance. As per configuration, I am using MSSqlPersistenceManager and
> using DataStore for files. Otherwise rest of the config is defaults.
> 
> JR structure:
> 
> /content/data/Ids/type1/*
> /content/data/Ids/type2/*
> /content/data/Ids/type3/*
> /content/data/Ids/type4/*
> /content/data/Ids/type5/*
>  
> All the ids are equally distributed under the specific type.
> 
> SQL structure:
> 
> A table with columns: Name, Type
> 
> Performance numbers in ms (items are spread equally among types), when
> using the below query. As the numbers show, it's pretty bad. Is this
> expected? any way to better this?
> 
> Items:   JR        SQL     
> 150       551       15      
> 1000     2969     78      
> 2000     6470     94      
> 4000     16816   94     
> 8000     58966   125  
> 
>                         Workspace workSpace = session.getWorkspace();
> 			QueryManager queryManager = workSpace.getQueryManager();
> 
> 			 StringBuffer queryStr = new
> 			 StringBuffer("//data/componentIds/*/*");
> 			 Query query = queryManager.createQuery(queryStr.toString(),
> 			 Query.XPATH);
> 
> 			Query query = queryManager.createQuery(queryStr.toString(),
> 					Query.XPATH);
> 
> 			long begin = System.currentTimeMillis();
> 			QueryResult queryResult = query.execute();
> 			int iSize = 0;
> 			NodeIterator queryResultNodeIterator = queryResult.getNodes();
> 			while (queryResultNodeIterator.hasNext()) {
> 
> 				Node componentIdNode = queryResultNodeIterator.nextNode();
> 				iSize++;
> 				// System.out.println(componentIdNode.getName());
> 			}
> 			long end = System.currentTimeMillis();
> 			System.out.println("**** time for: " + iSize + " : "
> 					+ (end - begin));
> 
> For SQL, it's a simple JDBC call:
>                 long begin = System.currentTimeMillis();
> 
> 		Statement stmt = con.createStatement();
> 		ResultSet rs = stmt.executeQuery("SELECT * FROM ArtifactFriendlyName");
> 		int iSize = 0;
> 		while (rs.next()) {
> 			iSize++;
> 			String s = rs.getString("FriendlyName");
> 		}
> 
> 		long end = System.currentTimeMillis();
> 
> 		System.out.println("Time taken for: " + iSize + " : " + (end - begin));
> 
> 
> Thanks,
> Sateesh.
> 
> 

-- 
View this message in context: http://www.nabble.com/Performance-as-compared-to-simple-sql-db-query-is-quite-bad-tp15218031p15224920.html
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.


Mime
View raw message