Upload
didac-montero
View
231
Download
2
Tags:
Embed Size (px)
Citation preview
Tabl
e of
Con
tent
s
1
Introduction and Goals
General Diagrams
Tasks
1.1. Concept1.2. App Goals1.3. General Goals
2.1. Communication Android-Server2.2. Entity-Relationship
3.1. Tasks done: Scaling3.2. Tasks done: Optimization3.3. Tasks done: Cache3.4. Tasks done: Non-Interactive Zoom3.4. Remaining tasks: Interactive Zoom
4.1. Technologies used: REST Imp.4.2. Technologies used: ORM Imp.
5. Questions
Technologies used
2
Introduction and Goals1
» Android App for graphical display of statistical data.
» Diagrams should have zoom and scroll capabilities.
» Different months, different series and different qualities can be selected.
» Each user can enrich the application adding comments to the diagrams.
Concept 3
» In any Mobile App, some factors to take into account,
» Computational process is limited Heavier tasks must take place on the server.
» Memory is limited Avoid heavy objects, or keep them in cache and instantiate them only when is strictly necessary.
» Don’t waste bandwidth Avoid unnecessary, heavy or repetitive requests to the server.
» Save battery Don’t make an intense use of the computational processor and of the internet connection.
App Goals 4
» Scale the charts to the Mobile screen resolution.
» Optimize the transmission and the display of the charts.
» Create an optimal mechanism to interact with the server in the zoom-in process.
» Create a cache mechanism for retrieve previous graphs
» Have different users with different access levels (chars, categories).
General Goals 5
6
General Diagrams2
Communication Android-Server 7
Web Server: Handle the request; transform it in a SQL query; process it and creates the JSON representation for the response.
Database: Basic DB behavior, response to the SQL queries.
Client: Performs an HTTP Request; converts the JSON response to Java Object and display the results and/or performs some data processing.
DatabaseW
eb S
erve
r
Mob
ile A
pp
HTTP/JSON
TCP/IP
REST
Entity-Relationship Diagram 8
9
3Tasks
10Tasks done: Scaling
» Scaling (average algorithm) Fix Output = Screen resolution
11Tasks done: Optimization
» Optimization (deleting, or nulling the duplications) Variable output
12Tasks done: Cache
» Why cache?
» Two level cache implemented: Disk & Memory Cache.
» MemoryCache Offers fast access at the cost of taking up valuable application memory.
» DiskCache Persist valuable data retrieved from the Server. Fetching and writing process is slower than in MemoryCache.
» Both Caches are HashMap, and the key will be the HASH of the URL Request.
» Both caches implements the algorithm LRU.
Persistence == Requests == Battery consumption
13Tasks done: Cache
1. Create HASH of the URL Request.
2. Try to obtain the key from the Memory Cache. If works, go to 5.
3. Try to obtain the key from the DiskCache. If works, go to 5.
4. Retrieve the Chart from the Server.
5. Save the chart in MemoryCache (Object) and DiskCache (JSON)
14Tasks done: Zoom
» Choosing between the following procedures,
» Requests on demand Request to the server every time we zoom (slow and intense use of Internet).
» Request when higher resolution needed Request more than you need (higher resolution), but not in each zoom.
» Requests in advance Request in background other resolutions, that can be loaded directly when the user requires them (requires cache implementation).
» For the zoom, last procedure has been chosen
15Tasks done: Non-interactive zoom
» Request in advance for non-interactive Zoom
» Non-interactive Zoom Zoom using the contextual menu on Android. Used for moving among Years/Months/Weeks/Days.
16Remaining Task: Interactive zoom
» Request in advance for non-interactive Zoom
» Interactive Zoom Two fingers and scroll zoom.
» Whenever the zoom match the menu selection (Year/Month/Week/Day) the view is automatically changed to the match, and the corresponding action is performed (previous slide)
17
Technologies used4
18
» Server Side
» Use of Apache Tomcat as a Java Servlet Container
» Use of Jersey Framework for implementing REST.
» Use of Hibernate Framework for implementing ORM.
» Use of MySQL as a Relational Database Management System.
Communication Android-Server
19
REST: The predominant Web Service Model Software system designed to support machine-to-machine interaction over a network.
Clients requests to servers; servers process requests and return responses in a well known format.
» Transport layer is HTTP/MIME.
» The URI defines the resource.
» The operations are defined by the HTTP methods (GET, POST, PUT, DELETE)
» The response is presented in JSON format (indicated thought Media-Type).
REST Implementation
REST Implementation 20
Advantages
» Simplifying the communication among independent and foreign systems.
» Organize an application into simple resources .
» No problem with firewalls and proxies (port 80, usually open)
» JSON is a lightweight text-based open standard and the Android parser offers good performance.
» Possibility of HTTP cache and proxy server to handle high load.
Examples
» GET http://example.com/charts Obtain List of Charts.
» GET http://example.com/charts/1?month=1 Obtain Chart info for January
» PUT http://example.com/charts/1 Modify Chart with id=1
21ORM Implementation
ORM: Mapping technique for converting DB structure Object structure
Advantages
» Simplify the development of a service.
» Overcomes vendor specific SQL differences - the ORM knows how to write vendor specific SQL so you don't have to.
Disadvantages
» Developers loose understanding of what the code is actually doing the developer is more in control using SQL.
» ORM has a tendency to be slow, if is not used carefully.
22ORM Implementation
Hibernate
@Entity @Table(name = "categories")public class Category{private int id;private String name;private String description;private Set<Chart> charts;
@Id @GeneratedValue @Column(name = "category_id")public int getId() { return id; }public void setId(int id) { this.id = id; }public String getName() { return name; }public void setName(String name) { this.name = name; }public String getDescription() { return description; }public void setDescription(String description) { this.description = description; }@OneToMany(mappedBy="category", fetch=FetchType.EAGER)@LazyCollection(LazyCollectionOption.FALSE)public Set<Chart> getCharts() { return charts;}public void setCharts(Set<Chart> charts) { this.charts = charts; }}
? Questions?
23