| [1142] | 1 | <HTML>
 | 
|---|
 | 2 | <HEAD>
 | 
|---|
 | 3 | <TITLE>L2/L3 DMC Requirements</TITLE>
 | 
|---|
 | 4 | </HEAD>
 | 
|---|
 | 5 | <BODY>
 | 
|---|
 | 6 | <CENTER>
 | 
|---|
 | 7 | <H1>DMC Specifications</H1>
 | 
|---|
 | 8 | <H2>L2/L3 Requirements</H2>
 | 
|---|
 | 9 | <H3>Réza Ansari, Éric Aubourg, Floor van Leeuwen</H3>
 | 
|---|
 | 10 | <H3>July 10, 2000 (draft)</H3>
 | 
|---|
 | 11 | <H3>PL-HFI-SPP-SP-DMC002</H3>
 | 
|---|
 | 12 | </CENTER>
 | 
|---|
 | 13 | <SPACER TYPE="VERTICAL" SIZE="20">
 | 
|---|
 | 14 | 
 | 
|---|
 | 15 | <H2>Introduction</H2>
 | 
|---|
 | 16 | 
 | 
|---|
 | 17 | The Data Management Component (<ACRONYM>DMC</ACRONYM>) is a set of 
 | 
|---|
 | 18 | interfaces handling data persistence for Planck <ACRONYM>DPC</ACRONYM>'s 
 | 
|---|
 | 19 | (in the <ACRONYM>IDIS</ACRONYM> framework). It will be used by both 
 | 
|---|
 | 20 | consortia (<ACRONYM>HFI</ACRONYM> and <ACRONYM>LFI</ACRONYM>).
 | 
|---|
 | 21 | 
 | 
|---|
 | 22 | <P>
 | 
|---|
 | 23 | Since the <ACRONYM>DMC</ACRONYM> is a set of interfaces, different 
 | 
|---|
 | 24 | persistence mechanisms can be implemented in a transparent way. This 
 | 
|---|
 | 25 | insures some independance from the market (especially from the currently 
 | 
|---|
 | 26 | highly volatile market of object databases, O2 being virtually dead, Object 
 | 
|---|
 | 27 | Design appearing as the new leader as of June 2000).
 | 
|---|
 | 28 | 
 | 
|---|
 | 29 | <P>
 | 
|---|
 | 30 | Even if the two consortia choose the same implementation, which is not 
 | 
|---|
 | 31 | required, care must be taken to preserve this independence as the 
 | 
|---|
 | 32 | <ACRONYM>DMC</ACRONYM> interface is evolved.
 | 
|---|
 | 33 | 
 | 
|---|
 | 34 | 
 | 
|---|
 | 35 | <H2>Object persistence mechanisms</H2>
 | 
|---|
 | 36 | The <ACRONYM>DMC</ACRONYM> should provide object persistence, i.e. the 
 | 
|---|
 | 37 | fact that the internal state of an object is preserved after the end of 
 | 
|---|
 | 38 | the life of the application that created or modified it. The 
 | 
|---|
 | 39 | <ACRONYM>DPC</ACRONYM>'s will use this object persistence facility to store 
 | 
|---|
 | 40 | data, like maps, <ACRONYM>TOI</ACRONYM>'s, calibration information, 
 | 
|---|
 | 41 | pointing information, etc.
 | 
|---|
 | 42 | 
 | 
|---|
 | 43 | <P>
 | 
|---|
 | 44 | Data persistence can be achieved in several ways. For L2/L3 
 | 
|---|
 | 45 | <ACRONYM>DPC</ACRONYM>'s, one should keep in mind that
 | 
|---|
 | 46 | 
 | 
|---|
 | 47 | <UL>
 | 
|---|
 | 48 |     <LI><ACRONYM>DPC</ACRONYM> software should be independant of the 
 | 
|---|
 | 49 |     <ACRONYM>DMC</ACRONYM> implementation. In particular, it should be able to 
 | 
|---|
 | 50 |     run, for testing and development purposes, without any 
 | 
|---|
 | 51 |     <ACRONYM>DMC</ACRONYM> implementation (or a basic flat file 
 | 
|---|
 | 52 |     implementation).
 | 
|---|
 | 53 |     <LI>Most objects handled during <ACRONYM>DPC</ACRONYM> processing will 
 | 
|---|
 | 54 |     be transient. Only input data and final products of a task will be 
 | 
|---|
 | 55 |     tagged persistent. Too tight a coupling between classes handled by 
 | 
|---|
 | 56 |     <ACRONYM>DPC</ACRONYM> software and <ACRONYM>DMC</ACRONYM> should be 
 | 
|---|
 | 57 |     avoided. 
 | 
|---|
 | 58 | </UL>
 | 
|---|
 | 59 | One way to achieve this is by using the Bridge design pattern [Gamma 1995], to 
 | 
|---|
 | 60 | decouple interface and implementation inside the <ACRONYM>DMC</ACRONYM>.
 | 
|---|
 | 61 | The <ACRONYM>DMC</ACRONYM> should probably be kept as a separate package providing 
 | 
|---|
 | 62 | persistence services, the science objects and classes having no explicit 
 | 
|---|
 | 63 | dependency to the <ACRONYM>DMC</ACRONYM>.
 | 
|---|
 | 64 | 
 | 
|---|
 | 65 | <P>
 | 
|---|
 | 66 | The <ACRONYM>DMC</ACRONYM> interface should moreover make minimal 
 | 
|---|
 | 67 | assumptions on the implementation layer functionalities.
 | 
|---|
 | 68 | 
 | 
|---|
 | 69 | <H2>Data structure details, and opaque persistence</H2>
 | 
|---|
 | 70 | 
 | 
|---|
 | 71 | <ACRONYM>DPC</ACRONYM> software will need to store complex objects, which 
 | 
|---|
 | 72 | structure can evolve. The precise internal data structure does not need to 
 | 
|---|
 | 73 | be handled by the DMC (semantically, although the DMC needs of course to know 
 | 
|---|
 | 74 | how the structure is built in terms of basic data types).
 | 
|---|
 | 75 | 
 | 
|---|
 | 76 | <P>
 | 
|---|
 | 77 | This facilitates schema evolution, since this provides skill separation 
 | 
|---|
 | 78 | between precise data structure definition (a physicist task) and data 
 | 
|---|
 | 79 | persistence (a database specialist task).
 | 
|---|
 | 80 | 
 | 
|---|
 | 81 | <P>
 | 
|---|
 | 82 | This also keeps the <ACRONYM>DMCI</ACRONYM> simple: it is a low-level 
 | 
|---|
 | 83 | software layer, that should not depend on higher-level (and thus more 
 | 
|---|
 | 84 | volatile) concepts.
 | 
|---|
 | 85 | 
 | 
|---|
 | 86 | <P>
 | 
|---|
 | 87 | Persistent data should be associated with tags and flags on which 
 | 
|---|
 | 88 | <ACRONYM>DMC</ACRONYM> requests can be based. A history of each object 
 | 
|---|
 | 89 | should also be kept, with support for versioning. Finer-grained searches 
 | 
|---|
 | 90 | should be handled by higher-level software layers. 
 | 
|---|
 | 91 | 
 | 
|---|
 | 92 | <H2>Use cases</H2> The data model specifications document should be
 | 
|---|
 | 93 | complemented by use cases.  A list of the kind of requests on each
 | 
|---|
 | 94 | type of data will help determine the
 | 
|---|
 | 95 | information that need to be
 | 
|---|
 | 96 | accessible by the <ACRONYM>DMC</ACRONYM>, i.e. 
 | 
|---|
 | 97 | which classes of the
 | 
|---|
 | 98 | data model have to be known by the 
 | 
|---|
 | 99 | <ACRONYM>DMC</ACRONYM>, and which
 | 
|---|
 | 100 | tags should be associated with them.
 | 
|---|
 | 101 | 
 | 
|---|
 | 102 | <H2>Requirements summary</H2>
 | 
|---|
 | 103 | 
 | 
|---|
 | 104 | The <ACRONYM>DMCI</ACRONYM> should implement the
 | 
|---|
 | 105 | following requirements:
 | 
|---|
 | 106 | 
 | 
|---|
 | 107 | <UL>
 | 
|---|
 | 108 |  <LI>The <ACRONYM>DMCI</ACRONYM> should
 | 
|---|
 | 109 | provide a set of interfaces to  handle persistence on any kind of
 | 
|---|
 | 110 | data.
 | 
|---|
 | 111 |  <LI>Software that uses <ACRONYM>DMCI</ACRONYM> facilities
 | 
|---|
 | 112 | should be able to  run without those facilities.
 | 
|---|
 | 113 |  <LI>Making data
 | 
|---|
 | 114 | persistent should not imply a hard-coded dependency between  the data
 | 
|---|
 | 115 | definition (in C++ or Java) and the <ACRONYM>DMCI</ACRONYM>. 
 | 
|---|
 | 116 | 
 | 
|---|
 | 117 | Persistence should in particular not be obtained by heritage, but by 
 | 
|---|
 | 118 | mechanisms like bridges and delegation.
 | 
|---|
 | 119 | <LI>The <ACRONYM>DMCI</ACRONYM> should make persistent all basic data types 
 | 
|---|
 | 120 | (integers, floating point numbers, strings, and n-dimensional arrays
 | 
|---|
 | 121 | of such data), as well as aggregates of those basic types. It should
 | 
|---|
 | 122 | provide an <ACRONYM>API</ACRONYM> to define new data types as
 | 
|---|
 | 123 | aggregates of already defined types. It should provide an
 | 
|---|
 | 124 | <ACRONYM>API</ACRONYM> to define  searchable fields and tags
 | 
|---|
 | 125 | associated to data. <LI>The <ACRONYM>DMCI</ACRONYM> should associate
 | 
|---|
 | 126 | to any persistent data the  following characteristics: name, creation
 | 
|---|
 | 127 | date, modification date, creator.  It should handle version history:
 | 
|---|
 | 128 | several versions of an object can be  stored and retrieved.
 | 
|---|
 | 129 | <LI>The <ACRONYM>DMCI</ACRONYM> should provide an <ACRONYM>API</ACRONYM> to 
 | 
|---|
 | 130 | 
 | 
|---|
 | 131 | locate an object based on searcheable fields and tags, and on version;
 | 
|---|
 | 132 | to retrieve and store an object; and to lock an object while it is
 | 
|---|
 | 133 | being  processed.
 | 
|---|
 | 134 | </UL>
 | 
|---|
 | 135 | 
 | 
|---|
 | 136 | The <ACRONYM>DMCI</ACRONYM> could provide
 | 
|---|
 | 137 | more functionalities for 
 | 
|---|
 | 138 | fundamental data structures like
 | 
|---|
 | 139 | <ACRONYM>TOI</ACRONYM>'s and maps. This 
 | 
|---|
 | 140 | remains to be defined,
 | 
|---|
 | 141 | keeping in particular in mind that, for instance, 
 | 
|---|
 | 142 | unforeseen pixelisation schemes could be used and that this should neither 
 | 
|---|
 | 143 | break the <ACRONYM>DMC</ACRONYM> nor imply major developments in a low
 | 
|---|
 | 144 | software layer.
 | 
|---|
 | 145 | 
 | 
|---|
 | 146 | <H3>Revisions</H3>
 | 
|---|
 | 147 | <UL>
 | 
|---|
 | 148 | <LI>0.1 Éric Aubourg, 07/07/2000
 | 
|---|
 | 149 | <LI>0.2 Éric Aubourg, 10/07/2000
 | 
|---|
 | 150 | </UL>
 | 
|---|
 | 151 | </BODY>
 | 
|---|
 | 152 | </HTML>
 | 
|---|