Download presentation
Presentation is loading. Please wait.
Published byLionel Roberts Modified over 9 years ago
2
Bernhard Düchting Principal Sales Consultant BU Database - Migration Oracle Germany
3
Migrating C++ Applications using OCCI
4
Agenda Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
5
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
6
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
7
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
8
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
9
Agenda Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
10
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)
11
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
12
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
13
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 ref=resultSet->getRef(1); } conn->commit(); stmt->closeResultSet(resultSet); conn->terminateConnection(conn); Environment::terminateEnvironment(env); create/modify/delete objects Example Session
14
Agenda Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
15
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
16
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
17
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
18
Representing Objects CREATE TYPE ADDRESS AS OBJECT ( state CHAR(2), zip CHAR(2)); OTT generates: class ADDRESS : public PObject { // OCCI pre-defined class protected : 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 }
19
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
20
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
21
Oracle Object Cache REF Client side cache Server buffer cache Pin Network flush load
22
Agenda Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
23
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
24
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
25
Agenda Object Orientation and C++ Oracle C++ Call Interface - Overview Objects Access Summary Case Study - Using OCCI at CERN Q & A
26
C A S E S T U D Y Using OCCI at CERN
27
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
28
CERN – European Organization for Nuclear Research
29
The LHC Machine
30
RAWRAW ESDESD AODAOD TAG random seq. 1PB/yr (1PB/s prior to reduction!) 100TB/yr 10TB/yr 1TB/yr Data Users Tier0 Tier1
31
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
32
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)
33
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
34
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
35
Migration of Existing Apps (I) Detector Conditions Database – Previously implemented on ODBMS – Same user interface re-implemented using OCCI Client based on associative access No changes to user code! (Except connect string) – Complete re-design of underlying data model Implemented using pure relational model Uses 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, …
36
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
37
CMS Offline Software – its big!
38
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
39
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
40
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
41
A Q & Q U E S T I O N S A N S W E R S
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.