| 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> | 
|---|