Upload
lionel-roberts
View
213
Download
0
Embed Size (px)
Citation preview
Bernhard DüchtingPrincipal Sales ConsultantBU Database - MigrationOracle Germany
Migrating C++ Applications using
OCCI
Agenda
Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
Object Orientation with 9i
Native data types for collections Definition of object types, object tables
and object views Explicit table inheritance using SQL-99 Implicit inheritance using references
(REF) Overloading of object methods Online schema evolution
Object Orientation and C++ Header files with object definition
generated from object schema No need for separate object-relational
mapping Object cache with pre-fetch capability
for transient and persistent object management
Server-side object locking
Steps for Migration
Determine object model and class hierarchy Use JDeveloper 9i to map to Oracle object
schema Generate C++ header files using Oracle
Type Translater (OTT) Modify old C++ access classes as required
to work with new object type definitions Add functionality for transient and
persistent object management as required
OCCI Partners and Customers A major GIS cartridge partner
– High performance object-relational and spatial data access for national surveying system
A global power transmission manufacturer– Handle complex object-retrieval for graphical
maintenance console
A global medical systems manufacturer– Replace ODBMS to manage patient image data
A national postal authority– Replacing third-party persistency framework
Agenda
Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
Oracle C++ Call Interface OCCI Built on OCI
– Similar control and performance of OCI Based on Standards
– ANSI/ISO C++ Standard, including STL– Associative access API design similar to JDBC
Performance– Prefetching, client-side cache, array operations,
data buffering, thread safe API easy to use
– API design consistent with C++ programming paradigm (e.g. new operator overloaded for creating persistent objects)
OCCI Basics Setup of Environment and Connection Executing SQL Statement
– SQL statement– Prepared SQL statement with bind variables– Stored procedure
Executing SQL Query– Return multiple rows into result set– Use prefetching for performance
Seamless support of Oracle datatypes– varchar2 mapped to string, – collection mapped to vector STL
OCCI Advanced Features Connection Pooling
– Improves scalability by multiplexing many logical connections over few physical connections
– Optimal usage of physical connection resource– Connection pool shrinks and grows on demand
Thread Safety– OCCI handles mutexed access to shared
resources
Array Operations– Insert/update multiple rows – Fetch multiple rows in one round-trip
Environment *env=Environment::createEnvironment(Environment::OBJECT);
RegisterMappings(env);
Connection *conn=env->createConnection(“scott”,”tiger”,””);
Statement *stmt=conn->createStatement();
ResultSet *resultSet=stmt->executeQuery(“select ref(t) from atable t where n=0”);
if (ResultSet::DATA_AVAILABLE == resultSet->next()) {
Ref<mytype> ref=resultSet->getRef(1);
}
conn->commit();
stmt->closeResultSet(resultSet);
conn->terminateConnection(conn);
Environment::terminateEnvironment(env);
create/modify/delete objects
Example Session
Agenda
Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
OCCI Object Features
Transparent access of database objects as C++ instances
Navigation of objects as simple as de-referencing smart-pointers
Client-side caching of C++ objects Supports all 9i object features including
inheritance Oracle Type Translator (OTT)
– Maps object types to C++ interface classes
Client-side Object Cache
Memory Buffer for Objects– Transparent lookup and memory management
support – Stores and tracks objects fetched from server to
client side– Maintains references– Created when OCCI environment is initialized in
object mode Benefits
– Reduces client/server round-trips– Object-level locking
Accessing Objects
Unique Object Identifier OID Navigational Interface
– No SQL – Navigate using object references (REF)– Create/access/lock/delete/flush/commit
Associative Interface – Use SQL or PL/SQL– Data buffers, no cost of transporting data
to client
Representing ObjectsCREATE TYPE ADDRESS AS OBJECT ( state CHAR(2), zip CHAR(2));
OTT generates:class ADDRESS : public PObject { // OCCI pre-defined classprotected : string state; string zip;public : void *operator new(size_t size); // create a transient
instance void *operator new(size_t size, Connection *conn,
string& table); // create a persistent instance}
Working with Objects I
Create new object– Use new operator– Transient or persistent objects
Fetch object from server– Pin object in cache using REF– Fetch object by value
Navigate to object– Use pinned object to traverse hierarchy– Only with referenceable objects
Working with Objects II
Modify object– Make changes in C++ application– Mark persistent object as dirty
Flush changes to server Commit transaction
– Includes flushing dirty objects
Oracle Object Cache
REF
Client side cache Server buffer cache
Pin
Network
flush
load
Agenda
Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
Summary I
Oracle C++ Call Interface OCCI– Simple and easy– High-performance and Scalable API– Comprehensive support of Oracle
Database features– Ideal choice for implementing high
performance mid-tier applications– 9i Release 2 focus on performance
Summary II
Easy migration of C++ applications– Determine UML class model– Import into Jdeveloper 9i– Re-model as required– Generate Oracle 9i object schema– Generate C++ header files with OTT– Modify C++ persistency classes as
required
Agenda
Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
C A S E S T U D Y
Using OCCI at CERN
Overview
Brief introduction to CERN & LHC– Huge data volumes, long lifetime, Use of OO
Extensive experience with databases– Oracle since 1982; ODBMS since 1995
Migration of existing applications– Complex C++ programs; – Up to 1000 classes;– Many KLOC - MLOC
CERN – European Organization for Nuclear Research
The LHC Machine
RAW
ESD
AOD
TAG
randomseq.
1PB/yr (1PB/s prior to reduction!)
100TB/yr
10TB/yr
1TB/yr
Data
Users
Tier0
Tier1
Overview
Brief introduction to CERN & LHC– Huge data volumes, long lifetime, OO
Extensive experience with databases– Oracle since 1982; ODBMS since 1995
Migration of existing applications– Complex C++ programs; – Up to 1000 classes;– Many KLOC - MLOC
CERN & Databases
Oracle brought in for construction of previous accelerator
– 1982; LEP – 27km ring 100m underground– Now pervasive through-out work of lab
Early 1990s: move to object orientated approach for “physics applications”
– Extensive experience with Object Databases– Until end 2001, baseline choice for multi-PB
requirements of LHC– Production experience with ODBMS up to ~100TB
cf SLAC/BaBar 500TB system Requirement for LHC: 100PB system (all
data)
Overview
Brief introduction to CERN & LHC– Huge data volumes, long lifetime, OO
Extensive experience with databases– Oracle since 1982; ODBMS since 1995
Migration of existing applications– Complex C++ programs; – Up to 1000 classes;– Many KLOC – MLOC– Exploit associative and navigational
access
OCCI / OTT Functionality
CERN has worked closely with Oracle since prior to Oracle 9i announcement on OCCI/OTT functionality, interfaces, implementation etc
Active partner in 9iR1 & 9iR2 Beta program
Happy to confirm that required functionality & product stability are available in 9iR2
Migration of Existing Apps (I) Detector Conditions Database
– Previously implemented on ODBMS– Same user interface re-implemented using OCCI
Client based on associative accessNo changes to user code! (Except connect string)
– Complete re-design of underlying data model Implemented using pure relational modelUses partitioned tables; materialized views;
stored procedures; indexes; …– One of several applications for production 9iRAC service
being setup at CERN Other similar applications foreseen
– Grid replica catalogue, production control DB, …
Migration of Existing Apps (II)
Take existing large C++ application Strip out ODBMS-based persistency layer Replace with OCCI using navigational
access Strong requirements from both user &
developer point of view: C++ Developer:– No change to object
model & classes
User:– No change to
application
CMS Offline Software – its big!
R .W ilk in s o nD e p u ty
O b je c t P e r s is ta n c y
L .S ilv e s tr isD e p u ty
T e s tb e a m s
V .I n n o c e n teA r c h ite c t
V .I n n o c e n teF r a m e w o r k
V .I n n o c e n teU tilit ie s
T .C o xM u o n e n d c a p
A .V ite lliM u o n b a r r e l
F .B e h n e rC a lo r im e tr y
L .T a y lo rV is u a liz a t io n
E .M e s c h iT r ig g e r
L .S ilv e s tr isT e s tb e a m
C .S e e zE le c tr o n P G
U .G a s p a r in iM u o n P G
T .T o d o r o vT r a c k e r
S .W y n h o ffG e n e r a to r s
A .C a n e rb /ta u P G
S .E n oJ e t P G
S .W y n h o ffE x a m p le s
T .T o d o r o vC o m m o n D e t
S u b -S y s te m C o o r d in a to r s
C .W illia m sL ib r a r ia n
J -P .W e llis c hS W P r o c e s s M a n a g e r
D .S t ic k la n dP r o je c t M a n a g e r
Functionality tests
(I) Tests of basic components Simple objects Compound objects
– Contain other user types as attributes
Inheritance Composition by reference Collections by value & reference(II) Full object models Exploits all above features Stresses client-side object cache & navigation
CMS Migration
Independent module developed to handle DB interface – Oracle or ODBMS
Modification of the application and the implementation of the independent module totaled several hundreds of lines of code
No other code was modified! From user application level … users are
not aware of the change
Conclusions
OCCI offers powerful persistency mechanisms for C++ applications
– Both associative & navigational access supported
Full power of database still available– Significant benefit over conventional ODBMS
Migration of complex applications proven– Achieved with no change to user code
AQ&Q U E S T I O N SQ U E S T I O N SA N S W E R SA N S W E R S