object storage into rdbms through the pool framework ioannis papadopoulos, cern it/adc january 27...

15
Object Storage into RDBMS Object Storage into RDBMS through the POOL framework through the POOL framework Ioannis Papadopoulos, CERN IT/ADC Ioannis Papadopoulos, CERN IT/ADC http:// http:// pool.cern.ch pool.cern.ch January 27 January 27 th th , 2005 , 2005

Upload: augustus-parrish

Post on 23-Dec-2015

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

Object Storage into RDBMS through the Object Storage into RDBMS through the POOL frameworkPOOL framework

Ioannis Papadopoulos, CERN IT/ADCIoannis Papadopoulos, CERN IT/ADC

http://http://pool.cern.chpool.cern.ch

January 27January 27thth, 2005, 2005

Page 2: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

Motivation for RDBMS-based object I/OMotivation for RDBMS-based object I/O

• On-line configuration/conditions dataOn-line configuration/conditions data– Present data already written into an RDBMS as C++

objects in the off-line reconstruction/analysis framework

• Off-line conditions/calibration/geometry dataOff-line conditions/calibration/geometry data– Same technology for IoV index and data payload

Page 3: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

Reminder: RAL in POOLReminder: RAL in POOL

uses

Abstract interface

Implementation

implements

Technology dependent plugin

FileCatalog Collection StorageSvc

Experiment framework

RelationalAccess LCG Reflection

ObjectRelationalAccessRelationalCollection

RelationalCatalog

RelationalStorageSvc

MySQL Oracle SQLite

Page 4: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

Object Storage using RAL and POOLObject Storage using RAL and POOL

• ObjectRelationalAccessObjectRelationalAccess– Bridging the differences between object and relational

worlds– Connection with the SEAL dictionary

• RelationalStorageServiceRelationalStorageService– Implementation of the POOL StorageSvc developer-

level interfaces based on the ObjectRelationalAccess package

• Command line toolsCommand line tools– To accommodate existing schemas and relational data– To customize the object view of the relational data (and

inversely)

Page 5: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

Object storage into RDBMSObject storage into RDBMS

• How to map classes ↔ tables ?How to map classes ↔ tables ?– Both C++ and SQL allow the description of data

layout– …but with very different constraints/aims

• no single unique mapping• need to store object/relational mapping together

with object data

• No notion of object identity in RDBMS No notion of object identity in RDBMS (persistent address)(persistent address)– requires unique index for addressable objects– part of mapping definition

Page 6: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

A Mapping Example (I)A Mapping Example (I)

class A {class A { int x;int x; float y;float y; std::vector<double> v;std::vector<double> v; class B {class B { int i;int i; std::string s;std::string s; } b;} b;};};

Page 7: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

A Mapping Example (II)A Mapping Example (II)

.....

“Hi”32.2222

“Hello”31.4101

B_SB_IYXID

T_A

0.132

0.122

32.112

5.45241

4.131

12.221

0.1211

VPOSID

T_A_Vp.k. f.k. constraint

This is only one of the possible mappings!

Page 8: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

defining/storing/materializing mappingsdefining/storing/materializing mappings

• The ObjectRelationalAccess package providesThe ObjectRelationalAccess package provides– Definition of hierarchy of transient mapping elements

• Element types: Object, Primitive, Array, Pointer, PoolReference• Element : variable type, name, scope, columns, and sub-elements

– Default object/relational mapping generation• Takes care of duplication and lengths of table/column names

– Persistency of mapping definition• Versioning• Transient structure stored in three tables

– Materialization of mapping (schema preparation)• Ensures the generation of proper indices and constraints

• Command line toolsCommand line tools– Customized mapping using an XML driver file– Dumping the mapping information into XML files

Page 9: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

The RelationalStorageServiceThe RelationalStorageService

• Designed to make use of the full functionality of Designed to make use of the full functionality of the POOL StorageSvc frameworkthe POOL StorageSvc framework– Reminder : POOL data hierarchy:

• Technology domain

• Database (ROOT or SQLite file, MySQL database, Oracle schema)

• Container (collection of physically or logically clustered objects)

• Object ID

• Appears in latest internal releases of POOLAppears in latest internal releases of POOL

• Supports two minor technologiesSupports two minor technologies– POOL_RDBMS_HOMOGENEOUS (equivalent to ROOTTREE)– POOL_RDBMS_POLYMORPHIC (equivalent to ROOTKEY)

Page 10: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

Current capabilitiesCurrent capabilities

• Can store objects containing:Can store objects containing:– embedded objects– STL containers (nested containment as well)– pool::Reference types

• Not yet supported:Not yet supported:– C-arrays– pointers– bitsets– long long (RAL limitation)

• PluginsPlugins– Oracle : fully functional– MySQL, SQLite : functional for objects with up to single level of

STL containment

Page 11: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

Implementation (I)Implementation (I)

• Automatic generation of object/relational mappingsAutomatic generation of object/relational mappings• Protection from concurrent writing through row lockingProtection from concurrent writing through row locking

– Locking of the container header table rows– Locking of the database table row

POOL_RSS_CONTAINERS

CONTAINER_ID

CONTAINER_NAME

CONTAINER_TYPE

TABLE_NAME

CLASS_NAME

MAPPING_VERSION

NUMBER_OF_WRITTEN_OBJECTS

NUMBER_OF_DELETED_OBJECTS

POOL_RSS_DB

GUID

NUMBER_OF_CONTAINERS

Page 12: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

Implementation (II)Implementation (II)

• Consistent reading guaranteed using read-only transactionsConsistent reading guaranteed using read-only transactions• Use of bind variables everywhereUse of bind variables everywhere• Early preparation and reuse of data buffersEarly preparation and reuse of data buffers• Homogeneous containersHomogeneous containers

– Container table = Top-level table from class mapping

• Polymorphic containersPolymorphic containers– Container table = Table of object headers– Target OIDs controlled by “hand-made” sequences

MY_CONTAINER

OID

CLASS_NAME

MAPPING_VERSION

TARGET_OID

POOL_RSS_SEQ

NAME

VALUE

Page 13: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

Implementation (III)Implementation (III)

• STL container I/OSTL container I/O– Makes use of the SEAL dictionary information

• Writing based on the existence of the “begin” and “size” methods of the container, and the “*” and “++” operators of the corresponding iterator

• Reading based on the existence of the “insert( elem,pos)” method in every container

• Special containers (queue, stack) handled through the corresponding underlying containers

• Dictionary generation requires– “—pool” flag switched off– declaration of the iterator (and pair in case of maps) classes in

the xml file– forward declaration of the iterator types

– Bulk inserts for “leaf” containers when writing– Row pre-fetching when reading

Page 14: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

The TODO listThe TODO list

• Command line tools for populating POOL containers Command line tools for populating POOL containers from existing relational datafrom existing relational data

• Implement general selections (like in ROOTTREE)Implement general selections (like in ROOTTREE)• Enable streaming of large arrays into BLOBSEnable streaming of large arrays into BLOBS• Handle object identities made of more than a single Handle object identities made of more than a single

column :column :– Registered plugins performing transformations from

multiple values into a unique unsigned long type

Page 15: Object Storage into RDBMS through the POOL framework Ioannis Papadopoulos, CERN IT/ADC  January 27 th, 2005 January 27 th, 2005

SummarySummary

• Object storage into RDBMS using the POOL storage Object storage into RDBMS using the POOL storage mechanism has been achieved using the RALmechanism has been achieved using the RAL

• Technologically neutral object description in RDBMS Technologically neutral object description in RDBMS is feasibleis feasible

• The RelationalStorageService is by itself a stress test The RelationalStorageService is by itself a stress test case for the RAL pluginscase for the RAL plugins