You are on page 1of 47

<Insert Picture Here>

An Engineers Introduction to Oracle Coherence


Brian Oliver
Senior Principal Solutions Architect | Oracle

Agenda
What is Coherence? Demonstration Consensus How it works Code Examples Architectural Patterns

(c) Copyright 2007. Oracle Corporation

What is Coherence?

(c) Copyright 2007. Oracle Corporation

Oracle Coherence
Development Toolkit
Pure Java 1.4.2+ Libraries Pure .Net 1.1 and 2.0 (Client Libraries) No Third-Party Dependencies No Open Source Dependencies

Other Libraries for


Database and File System Integration Top Link and Hibernate Http Session Management, Spring,

Oracle Coherence
Provides
Container-less Clustering of Java Processes Data Structures to manage Data across a Cluster / Grid Real-Time Event Observation Listener Pattern Materialized Views of Data Parallel Queries and Aggregation Object-based Queries Parallel Data Processing Parallel Grid Processing RemoteException Free Distributed Computing Clustered JMX MAN + WAN Connectivity Client + Data Grid Deployment Models

Oracle Coherence
Some uses
Application Clustering and Reliable Data Sharing Caching state in the Application-tier Relieve load on lower-tier systems
Databases, Mainframes, Web Servers, Web Services

Scaling out application state (in the application-tier) In-Memory Http Session Management Resilient Processing Engine Temporary System of Record for Extreme Transaction Processing

Coherence Demonstration

(c) Copyright 2007. Oracle Corporation

How Coherence Works

(c) Copyright 2007. Oracle Corporation

Distributed Data Management (access)


The Partitioned Topology (one of many) In-Process Data Management

(c) Copyright 2007. Oracle Corporation

Distributed Data Management (update)

(c) Copyright 2007. Oracle Corporation

Distributed Data Management (failover)

(c) Copyright 2007. Oracle Corporation

Distributed Data Management


Members have logical access to all Entries
At most 2 network operations for Access At most 4 network operations for Update Regardless of Cluster Size Deterministic access and update behaviour (performance can be improved with local caching)

Predictable Scalability
Cache Capacity Increases with Cluster Size Coherence Load-Balances Partitions across Cluster Point-to-Point Communication (peer to peer) No multicast required (sometimes not allowed)

(c) Copyright 2007. Oracle Corporation

Data Distribution: Clients and Servers


Clients with storage disabled

Servers with storage enabled

(c) Copyright 2007. Oracle Corporation

Near Caching (L1 + L2) Topology

(c) Copyright 2007. Oracle Corporation

Observing Data Changes

(c) Copyright 2007. Oracle Corporation

Parallel Queries

(c) Copyright 2007. Oracle Corporation

Parallel Processing and Aggregation

(c) Copyright 2007. Oracle Corporation

Data Source Integration (read-through)

(c) Copyright 2007. Oracle Corporation

Data Source Integration (writethrough)

(c) Copyright 2007. Oracle Corporation

Data Source Integration (write-behind)

(c) Copyright 2007. Oracle Corporation

Coherence Code Examples

(c) Copyright 2007. Oracle Corporation

Clustering Java Processes


Joins an existing cluster or forms a new cluster
Time to join configurable Cluster cluster = CacheFactory.ensureCluster();

cluster contains information about the Cluster


Cluster Name Members Locations Processes

No master servers No server registries

(c) Copyright 2007. Oracle Corporation

Leaving a Cluster
Leaves the current cluster shutdown blocks until data is safe Failing to call shutdown results in Coherence having to detect process death/exit and recover information from another process. Death detection and recovery is automatic
CacheFactory.shutdown();

(c) Copyright 2007. Oracle Corporation

Using a Cache get, put, size & remove


CacheFactory resolves NamedCache nc = CacheFactory.getCache(mine); cache names (ie: mine) to configured Object previous = nc.put(key, hello world); NamedCaches NamedCache provides data topology agnostic access to information NamedCache interfaces implement several interfaces;
java.util.Map, Jcache, ObservableMap*, ConcurrentMap*, QueryMap*, InvocableMap*

Object current = nc.get(key); int size = nc.size(); Object value = nc.remove(key);

Coherence* Extensions

(c) Copyright 2007. Oracle Corporation

Using a Cache keySet, entrySet, containsKey


Using a NamedCache is like using a java.util.Map What is the difference between a Map and a Cache data-structure?
Both use (key,value) pairs for entries Map entries dont expire Cache entries may expire Maps are typically limited by heap space Caches are typically size limited (by number of entries or memory) Map content is typically inprocess (on heap)

NamedCache nc = CacheFactory.getCache(mine); Set keys = nc.keySet(); Set entries = nc.entrySet(); boolean exists = nc.containsKey(key);

(c) Copyright 2007. Oracle Corporation

Observing Cache Changes ObservableMap


Observe changes in realtime as they occur in a NamedCache Options exist to optimize events by using Filters, (including pre and post condition checking) and reducing on-the-wire payload (Lite Events) Several MapListeners are provided out-of-thebox.
Abstract, Multiplexing...

NamedCache nc = CacheFactory.getCache(stocks); nc.addMapListener(new MapListener() { public void onInsert(MapEvent mapEvent) { } public void onUpdate(MapEvent mapEvent) { } public void onDelete(MapEvent mapEvent) { } });

(c) Copyright 2007. Oracle Corporation

Querying Caches QueryMap


Query NamedCache keys and entries across a cluster (Data Grid) in parallel* using Filters Results may be ordered using natural ordering or custom comparators Filters provide support almost all SQL constructs Query using non-relational data representations and models Create your own Filters
* Requires Enterprise Edition or above

NamedCache nc = CacheFactory.getCache(people); Set keys = nc.keySet( new LikeFilter(getLastName, %Stone%)); Set entries = nc.entrySet( new EqualsFilter(getAge, 35));

(c) Copyright 2007. Oracle Corporation

Continuous Observation Continuous Query Caches


ContinuousQueryCache provides real-time and in-process copy of filtered cached data Use standard or your own custom Filters to limit view Access to viewof cached information is instant May use with MapListeners to support rendering real-time local views (aka: Think Client) of Data Grid information.

NamedCache nc = CacheFactory.getCache(stocks); NamedCache expensiveItems = new ContinuousQueryCache(nc, new GreaterThan(getPrice, 1000));

(c) Copyright 2007. Oracle Corporation

Aggregating Information InvocableMap


Aggregate values in a NamedCache across a cluster (Data Grid) in parallel* using Filters

NamedCache nc = CacheFactory.getCache(stocks); Double total = (Double)nc.aggregate( AlwaysFilter.INSTANCE, new DoubleSum(getQuantity)); Set symbols = (Set)nc.aggregate( new EqualsFilter(getOwner, Larry), new DistinctValue(getSymbol));

Aggregation constructs include; Distinct, Sum, Min, Max, Average, Having, Group By Aggregate using nonrelational data models Create your own aggregators
* Requires Enterprise Edition or above

(c) Copyright 2007. Oracle Corporation

Mutating Information InvocableMap


Invoke EntryProcessors on zero or more entries in a NamedCache across a cluster (Data Grid) in parallel* (using Filters) to perform operations Execution occurs where the entries are managed in the cluster, not in the thread calling invoke This permits Data + Processing Affinity
* Requires Enterprise Edition or above

NamedCache nc = CacheFactory.getCache(stocks); nc.invokeAll( new EqualsFilter(getSymbol, ORCL), new StockSplitProcessor()); ...

class StockSplitProcessor extends AbstractProcessor { Object process(Entry entry) { Stock stock = (Stock)entry.getValue(); stock.quantity *= 2; entry.setValue(stock); return null; } }

(c) Copyright 2007. Oracle Corporation

Oracle Coherence Architectural Patterns


(c) Copyright 2007. Oracle Corporation

Single Application Process

(c) Copyright 2007. Oracle Corporation

Clustered Processes

(c) Copyright 2007. Oracle Corporation

Multi Platform Cluster

(c) Copyright 2007. Oracle Corporation

Clustered Application Servers

(c) Copyright 2007. Oracle Corporation

With Data Source Integration (Cache Stores)

(c) Copyright 2007. Oracle Corporation

Clustered Second Level Cache (for Hibernate)

(c) Copyright 2007. Oracle Corporation

Remote Clients connected to Coherence Cluster

(c) Copyright 2007. Oracle Corporation

Interconnected WAN Clusters

(c) Copyright 2007. Oracle Corporation

Getting Oracle Coherence


(c) Copyright 2007. Oracle Corporation

Oracle Coherence
Search:
http://search.oracle.com

Search For:

Coherence

Download
http://www.oracle.com/technology/products/coherence

Support
http://forums.tangosol.com http://wiki.tangosol.com

Read More
http://www.tangosol.com/

Questions

(c) Copyright 2007. Oracle Corporation

Appendix

The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracles products remains at the sole discretion of Oracle.

You might also like