30 day money-back guarantee
Read more...
9 EUR lifetime license
15 EUR lifetime license
(nofollow link from sponsors page)
| 22.8% | | United States | | 15.5% | | India | | 7.3% | | Russian Federation | | 6.9% | | Colombia | | 6.1% | | Germany | | 5.1% | | United Kingdom | | 4.4% | | Poland | | 3.4% | | Netherlands | | 3% | | France | | 2.8% | | Canada |
| Today: | 1359 | | Yesterday: | 1639 | | This Week: | 4584 | | Last Week: | 10059 | | This Month: | 11283 | | Total: | 34597 | |
Users| Most active users today from total of 66: | | matto, rottenberg, billspo, crony, Adelavigne, dwlamb, dontbugmeplease, manuelflores, eghtedar, FreeMe, rockiesrider, Machin, michmich, speru, infomech, blombo, sunconcept, rtuszyns, Pedropedro, tegralens | |
JoomlaWatch is popular joomla visitor tracking and live stats component. It provides several features such as spam blocking,
goals tracking, charts, nightly email reports, latest visit map, interactive HTML5 traffic flow graph and many other useful functionalities,
which will help you to optimize your site.
Freelance
Projects
Forum
Resources
Java Data Repository performance
|
|
Scenario: It’s a common scenario that a web site rarely updates the background database but frequently access the database to fetch requested data. Consider the web site that provides the results of Secondary School Certificate exam of a country, based the population of that country the total number of students who attended the exam may be 2 million, 3 million or more. In India it may be more than 10 million. When the result is just published just think about the number of hits per second on that web site. A student just provides a Student Registration number and gets the result from the site. So should that web application search the database every time there is a request for result in that site? To me it’s a ‘NO’. In the age of WiMax and 3G it is expected the website to appear in a twinkling of an eye. So if you can provide sufficient RAM to that web server why don’t you use data repository. “Data Repository”? Yes. Data Repository: It’s an implementation of virtual storage of a portion of a database or entire database. The concept is: Database (MySQL, SQL Server etc), Load the data in to RAM and refresh periodically Æ Response of the data query. For each subsequent database query, after the initial loading, the response is generated from the data loaded into RAM. So, there is no need to knock the database for every query. This is a quite faster approach. But remember if the database rarely has insert, update and delete operation this approach is very much efficient. If the there is a change in the database the change will be reflected in the database only after the data repository is refreshed.
Implementation: So in a web server how would you implement that? Here is an example to implement Data Repository using Java and STRUTS framework. For simplicity I have omitted some minor parts such as import statement, portion to fetch data from Database in the reload() method. I have also omitted the details of the DataDTO class.
Implementing the DataRepository:
/*********************** Start of DataRepository.java************************/
public class DataRepository
{
// 60 Seconds, you can change it s u like
public static final long REFRESH_INTERVAL = 60 * 1000;
static DataRepository repository = null;
private long lastRelodingTime;
//Its a map to get Result using Registration number as KEY
HashMap regMap;
private DataRepository() {
forceReload();
}
public static DataRepository getInstance() {
if (repository == null)
createDataRepository();
return repository;
}
private synchronized static void createDataRepository() {
if (repository == null)
repository = new DataRepository();
}
private void reload() {
// DataDTO is the clas to hold Registration Number,
// Name and CGPA of any student
// For simplicity here I havent added it.
ResultSet rs = null;
rs = ResultSet after database query
while(rs.next())
{
// DataDTO provides StudentName, Student Registration Number
// and student CGPA. You can add additional member variable
// or method for more details*/
DataDTO dto = new DataDTO();
dto.setName(rs.getString("name"));
dto.setCGPA(rs.getFloat("cgpa"));
regMap.put(dto, new Long(rs.getLong("registration")));
}
}
public synchronized DataDTO getResult(long registrationNumber) {
checkForReload();
return (DataDTO)this.regMap.get(new Long(registrationNumber));
}
private void checkForReload() {
long now = System.currentTimeMillis();
if (now - lastRelodingTime > REFRESH_INTERVAL) {
lastRelodingTime = now;
reload();
}
}
public synchronized void forceReload() {
lastRelodingTime = System.currentTimeMillis();
reload();
}
}/*********************** End of DataRepository.java************************/
Look at the implementation, you can’t directly create object of the DataRepository Class. The DataRepository class is an implementation of a singleton. So, there will be only one instance of the DataRepository Class. You should get the instance of the Class this way: DataRepository instance = DataRepository.getInstance();
The logic here is, you create a single instance of the class. Load the data from database to Java data structure inside the reload() method. The data loaded from the database is refreshed when a new request is made and the refresh time interval expires. Now the object of the DataRepository Class is loaded into the memory along with the data loaded from Database. Suppose, a student with registration number = 101 is looking for his result. You can provide the result without searching it again. DataDTO studentInfo ; long regNumber = 101; studentInfo=(DataDTO) DataRepository.getInstance().getResult(regNumber); String studentName = studentInfo.getName(); float studentCGPA = studentInfo.getCGPA(); If you are using STRUTS framework you can have Form Class that extends ActionForm. Say, you Form class name is DataForm. DataForm form = new DataForm(); form.setName(studentName) form.setCGPA(studentCGPA) Finally: Forward this DataForm to your Action class. You can use this architecture in any desktop, web or other server type application based on your requirements.
|
Add comment
|