SlideShare ist ein Scribd-Unternehmen logo
1 von 110
Downloaden Sie, um offline zu lesen
Sander Vermolen
    Eelco Visser



                                        Data
                                        Model 
                                        Evolution


            This research is supported by NWO/JACQUARD project
                                           
            638.001.610, MoDSE: Model­Driven Software Evolution.
Data 
    Models



              
     
     
     
User   1
       name      bob 
       real name Bob Johnson
       email     b.johnson@mail.com

    Page   1
       title      "The first page"
       isRedirect false
       text       "Hello world"




        
Count page views




               Version history



                  
     
No page count
        No revisions


        User   1
           name      bob 
           real name Bob Johnson
           email     b.johnson@mail.com

        Page   1
           title      "The first page"
           isRedirect false
           text       "Hello world"



     
     
Coupled Data Evolution




               
...

    $dbh->bz_add_column('attachments', 'submitter_id', {TYPE => 'INT3', NOTNULL => 1}, 0);
    $dbh->bz_rename_column('bugs_activity', 'when', 'bug_when');
    _add_bug_vote_cache(); _update_product_name_definition(); _add_bug_keyword_cache();
    $dbh->bz_add_column('profiles', 'disabledtext', {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, '');
    _populate_longdescs(); _update_bugs_activity_field_to_fieldid();

    if (!$dbh->bz_column_info('bugs', 'lastdiffed')) {
           $dbh->bz_add_column('bugs', 'lastdiffed', {TYPE =>'DATETIME'});
           $dbh->do('UPDATE bugs SET lastdiffed = NOW()');
    }

    _add_unique_login_name_index_to_profiles();
    $dbh->bz_add_column('profiles', 'mybugslink', {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'});
    _update_component_user_fields_to_ids();
    $dbh->bz_add_column('bugs', 'everconfirmed', {TYPE => 'BOOLEAN', NOTNULL => 1}, 1);
    $dbh->bz_add_column('products', 'maxvotesperbug', {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '10000'});
    $dbh->bz_add_column('products', 'votestoconfirm', {TYPE => 'INT2', NOTNULL => 1}, 0);
    _populate_milestones_table();
    $dbh->bz_alter_column('bugs', 'target_milestone', {TYPE => 'varchar(20)', NOTNULL => 1, DEFAULT => "'---'"});
    $dbh->bz_alter_column('milestones', 'value', {TYPE => 'varchar(20)', NOTNULL => 1});
    _add_products_defaultmilestone();

    if (!$dbh->bz_index_info('cc', 'cc_bug_id_idx') || !$dbh->bz_index_info('cc', 'cc_bug_id_idx')->{TYPE}) {
           $dbh->bz_drop_index('cc', 'cc_bug_id_idx');
           $dbh->bz_add_index('cc', 'cc_bug_id_idx', {TYPE => 'UNIQUE', FIELDS => [qw(bug_id who)]});
    }
    if (!$dbh->bz_index_info('keywords', 'keywords_bug_id_idx') || !$dbh->bz_index_info('keywords',
    'keywords_bug_id_idx')->{TYPE}) {
           $dbh->bz_drop_index('keywords', 'keywords_bug_id_idx');
           $dbh->bz_add_index('keywords', 'keywords_bug_id_idx', {TYPE => 'UNIQUE', FIELDS => [qw(bug_id
    keywordid)]});
    }

    ...
                                                             
Costly

                High risk

    Holds back the development process

    Large infrequent development steps




                      
User
           id           :   integer
           name         :   varchar
           realName     :   varchar
           email        :   tinytext

        Page
           id           :   integer
           title        :   varchar
           author       -   User        *
           isRedirect   :   boolean
           content      :   text




                                       set of
User
       id          :   integer    Unique
       name        :   varchar
       realName    :   varchar    ?
       email       :   tinytext

    Page : Medium
       author     -    User       min(1) max(8)
       content    :    text
       refs       :    url        * Indexed

    abstract Medium
        id         :   integer    Unique
        title      :   ANY_NAME




                          
Evolving
    Data Models



      
     
     
     
     
Specifying
    Data Model Evolution



         
User                                User
       id           ::   integer           id           ::   integer
       name         ::   varchar           name         ::   varchar
       realName     ::   varchar           realName     ::   varchar
       email        ::   tinytext          email        ::   tinytext

    Page                                Page
       id           ::   integer           id           ::   integer
       title        ::   varchar           title        ::   varchar
       author           User              counter      ::   biginteger
       isRedirect   ::   boolean           isRedirect   ::   boolean
       content      ::   text              revisions        set of Revision

                                        Revision
                                           id           ::   integer
                                           page             Page
                                           comment ::        tinyblob
                                           timestamp ::      time
                                           revisionText ::   text
                                           author           User
What happened?

    Added type revisions                 Revision
                                            id           ::   integer
                                            page             Page
                                            comment      ::   tinyblob
                                            timestamp    ::   time
                                            author           User

    Added attribute revisions            Page
                                            revisions     set of Revision

    Moved content to revision text       Revision
                                            revisionText ::   text

    Added attribute counter              Page
                                            counter      ::   biginteger
                                      
8 Basic Transformations



    add or remove entity         add or remove property




    change name of entity       change name of property




    change type of set           change type of property




                             
1 Advanced Transformation




            move property




                
add
          Revision
             id             :   integer
             page           -   Page
             comment        :   tinyblob
             timestamp      :   time
             author         -   User




    add
          counter   :       biginteger




                         
     
At    / Entity Page  /  Property Title
    add   counter : biginteger




                      
At    / Entity[Id=''Page''] / Property[Id=''Title'']
    add   counter : biginteger




                       
at    // Property [Id = ../Id]
    add   counter :: biginteger




                       
Revision
              revisionText ::   text




    At     / Entity Revision  /  Property timeStamp
    move   page.content 
    to     revisionText :: text




                       
at     Entity Page  /  Property Title
    add    counter :: biginteger


       ;

    at     Entity Revision  /  Property timeStamp
    add    revisionText :: text
    from   page.content




                          
Evolving
            Data Models




    8 basic transformations

    1 advanced transformation

    Language to specify transformations

    Positioning sub language




    Specify data model evolutions

                                   
Data
    Migration



      
     
Technical Domain


     WebDSL



    Stratego/XT




                       Stratego/XT
                      Generic Aterm
                  SQL Databases (MySQL)


                             
Program transformation for data migration



       Because 


          we really like program transformations


          generally richer than regular data acessing languages (SQL)


          data migration = model transformation



                                      
User(                                User
       id(1),                               id       ::   integer
       name(“John”),                        name     ::   varchar
       email(“johnnyboy@mail.com”)          email    ::   tinytext
    )

    Page(                                Page
       id(2),                               id       :: integer
       title(“Hello World”),                title    :: varchar
       [author(1)]                          author    User
    )




                                      
User(                      <user>
       id(1),                      <id>1</id>
       name(“John”),               <name>John</name>
       email(“jb@m.com”)           <email>jb@m.com</email>
    )                          </user>

    Page(                      <page>
       id(2),                      <id>2</id>
       title(“Hello World”),       <title>Hello World</title>
       [author(1)]                 <authors>
    )                                   <author>1</author>
                                   </authors>
                               </page>



                                
Remove Attribute (1)

    User(                                          User
       id(1),                                         id       ::   integer
       name(“John”),                                  name     ::   varchar
       .....                                          email    ::   tinytext
    )

    Page(                                          Page
       id(2),                                         id       :: integer
       title(“Hello World”),                          title    :: varchar
       [author(1)]                                    author    User
    )




                               Signature:
                               User := Id * Name * Email
                                            
Remove Attribute (2)

    User(                                User
       id(1),                               id       ::   integer
       name(“John”),                        name     ::   varchar
       email(“johnnyboy@mail.com”)          email    ::   tinytext
    )

    Page(                                Page
       id(2),                               id       :: integer
       title(“Hello World”),                title    :: varchar
       [author(1)]                          author    User
    )




                                      
Generic Aterm (GTerm)

    User(   0,                            User
       [                                     id       ::   integer
            id(1),                           name     ::   varchar
            name(“John”),                    email    ::   tinytext
            email(“johnnyboy@mail.com”)
        ]
    )

    Page( 1,                              Page
       [                                     id       :: integer
          id(2),                             title    :: varchar
          title(“Hello World”),              author    User
          author(0)
       ]
    )
                                     
XMI

    User(   0,                              <user id='0'>
       [                                        <id>1</id>
            id(1),                              <name>John</name>
            name(“John”),                       <email>jb@m.com</email>
            email(“jb@m.com”)               </user>
        ]
    )

    Page( 1,                                <page id='1'>
       [                                        <id>2</id>
          id(2),                                <title>Hello World</title>
          title(“Hello World”),                 <author>0</author>
          author(0)                         </page>
       ]
    )
                                         
GTerm Characteristics



        Explicit references

        No nesting

        Implicit sets/lists

        Storage...




                      
GTerm Transformation


    Gterm library
        Object creation
        Modifying attributes 
            (add, remove, change, rename, ...)
        Object equivalence
        Object traversals
        (Object graph traversals)

    Data model library
       Type examination
       Super/Sub type handling
       Abstract type handling


                        
GTerm Storage



    Large quantities of data...



    Storage engine:
        In memory ­ list based         ~10K
        In memory ­ hash table based   ~500K
        In database                    ~25M ­ ...




                         
GTerm Storage – In database (1)

    User( 0,
       [
                                       0   User   id       1
               id(1),
                                       0   User   name     John
               name(“John”),
                                       0   User   email    jb@m.com
               email(“jb@m.com”)
                                       1   Page   id       2
        ]
                                       1   Page   title    Hello World
    )
                                       1   Page   author   0
    Page( 1,
       [
          id(2),
                                       0   User
          title(“Hello World”),
                                       1   Page
          author(0)
       ]
    )
                                    
GTerm Storage – In database
            GTerm Storage – In database (2)




    CREATE TABLE  Attributes (          CREATE TABLE  Objects (
       id    varchar(16),                  id    varchar(16),
       type  varchar(30),                  type  varchar(30)
       name varchar(30),                )
       value text,
       INDEX USING HASH (id (5)),
       INDEX USING BTREE (v(10))
    )




                                     
GTerm Performance




      Database indexes

      Stratego memory usage

      Parallel execution




                  
GTerm Storage – Regular database




    0   User   id       1                 User:
    0   User   name     John              1       John          jb@m.com
    0   User   email    jb@m.com
    1   Page   id       2                 Page:
    1   Page   title    Hello World       2       Hello World
    1   Page   author   0
                                          Page­User:
                                          2     1




                                       
Data model




               SQL Script                          GTerm 2 SQL


Old Database                Generic Database                     SQL Script




                            Migration (Stratego)             New Database




                                     
DBLP       Researchr




            
<dblp>
    <incollection mdate="2002­01­03" key="books/acm/kim95/AnnevelinkACFHK95">
         <author>Jurgen Annevelink</author>
         <author>Rafiul Ahad</author>
         <author>Amelia Carlson</author>
         <author>Daniel H. Fishman</author>
         <author>Michael L. Heytens</author>
         <author>William Kent</author>
         <title>Object SQL ­ A Language for the Design and 
                  Implementation of Object Databases.</title>
         <pages>42­68</pages>
         <year>1995</year>
         <booktitle>Modern Database Systems</booktitle>
         <url>db/books/collections/kim95.html#AnnevelinkACFHK95</url>
         <crossref>books/crc/KIM95</crossref>
    </incollection>

    ....
</dblp>


                                        
article {                                   book {
    key         :   string                      key         :   string
    title       :   string   *                  title       :   string   *
    author      :   string   *                  author      :   string   *
    editor      :   string   *                  editor      :   string   *
    booktitle   :   string   *                  booktitle   :   string   *
    pages       :   string   *                  pages       :   string   *
    address     :   string   *                  address     :   string   *
    journal     :   string   *                  journal     :   string   *
    volume      :   string   *                  volume      :   string   *
    number      :   string   *                  number      :   string   *
    publisher   :   string   *                  publisher   :   string   *
    crossref    :   string   *                  crossref    :   string   *
    series      :   string   *                  series      :   string   *
    school      :   string   *                  school      :   string   *
    chapter     :   string   *                  chapter     :   string   *
    month       :   string   *                  month       :   string   *
    year        :   string   *                  year        :   string   *
    url         :   string   *                  url         :   string   *
    note        :   string   *                  note        :   string   *
    mdate       :   string   *                  mdate       :   string   *
    cite        :   string   *                  cite        :   string   *
    ee          :   string   *                  ee          :   string   *
    cdrom       :   string   *                  cdrom       :   string   *
    isbn        :   string   *                  isbn        :   string   *
}                                           }


                                         
                                 ....
DBLP Data



    ~ 800,000           Authors

    ~ 1,200,000         Publications

    ~ 14,000,000        Lines of XML

    ~ 16,000,000        Database records




                     
Publication {                                  abstract PrintPublication - Publication
    key         :   string        Unique       {
    title       :   string                         pages           : string
    authors     -   Author        + Ind            publisher       : string    ?
    month       :   string                         firstpage       : int
    year        :   string                         lastpage        : int       ?
    dblpUrl     :   string        ?            }
    doi         :   string
    links       -   Link          *            Article - PrintPublication {
    abstract    :   string                         journalname : string
    note        :   string                         volumenumber: string
    annote      :   string                         issuenumber : string
    modified    :   date                       }
    modifiers   -   User          *
    cites       -   Publication   *            Alias {
    ee          :   string        ?                name           : string    Unique
    isbn        :   string                     }
    issn        :   string
    conflicts   :   bool                       AbstractAuthor {
}                                                  alias          - Alias
                                               }




                                            
Migration Approach




     Load objects into database


     9 Stages of migration


     Generate SQL




                   
Bridging
    Meta levels




       
     
article - PrintPublication {              Article - PrintPublication {
    reviewid   : string   ?                   reviewid   : string   ?
    rating     : string   ?                   rating     : string   ?
    journal    : string   ?                   journal    : string   ?
    volume     : string   ?                   volume     : string   ?
    number     : string   ?                   number     : string   ?
}                                         }




              ?Transformation(path, Substitution(newName), _)



                  renameType(|oldType, newName)



                        UPDATE At 
                        SET       t=newName 
                        WHERE     t = ...;

                                      
Proceedings - Collection {                Proceedings - Collection {
    booktitle : string     ?                  conference : string    ?
}                                         }




              ?Transformation(path, Substitution(newName), _)



              renameAtt(|oldName, newName, type, dmodel)



             UPDATE At 
             SET       n = newName 
             WHERE     n = oldName
             AND       t = <getSubTypeQuery(|dmodel)> type;
                                      
abstract Thesis - Publication {                 abstract Thesis - Publication {
    school      : string                            school     : string
}                                                   type       : string   ?
                                                }




    ?Transformation(path, Addition(Att(Name(attName), PrimType(_), annotations)),_);
                       <getAttAnn(|"MinCard")> annotations; ?0




                                          ...



                                         ...




                                           
abstract Thesis - Publication {               abstract Thesis - Publication {
    school      : string                          school     : string
}                                                 type       : string
                                              }



       ?Transformation(
           path, 
           Addition(Att(Name(attName), PrimType(_), annotations)),
           _
       );
       <getAttAnn(|"MinCard")> annotations; ?low


       <addDefaultAttributesToType(|
           type, <make­int> low, attName, attType, mmodel
       )> model;


       onType(
            addDefaultAttributes(|type, nr, attName, attType)
       | type, mmodel)
                                           
onType



    1. find objects of type

    2. divide into chunks

    3. per chunk                     in parallel
        Load objects in chunk
        per object
            s
            save object if changed




                         
Publication {                              Publication {
    key     : string     Unique                key     : string    Unique
    title : string       ?                     title : string      ?
    authors : string     + Indexed             authors - Author    + Indexed
    year    : string                           year    : string
    ...                                        ...
}                                          }

                                           Author {
                                               alias   : string
                                           }


       ?Transformation(path, Substitution(DeclType(Name(newTypeName))), _)
       ...
       Author alias mandatory
       Author alias not unique


       onType(
           for each author
                create author object
                set author attribute
       )                                
Author {                                          Author {
    alias   : string                                  alias   : Alias
}                                                 }

                                                  Alias {
                                                      name    : string   Unique




       ?Transformation(path, Substitution(DeclType(Name(newTypeName))), _)
       ...
       Alias name mandatory
       Alias name unique


       onType(
           if alias exists then
                 set alias attribute to existing id
           else
                 create alias object
                 set alias attribute to new id
       )
                                               
Supported transformations

       Identity
       Primitive attribute addition (3)
       Complex attribute addition
       Attribute removal
       Attribute name change
       Attribute move (2)
       Primitive type change
       Implicit reference resolution
       Attribute wrapping
       Type addition
       Type removal
       Type name change
       Abstract type handling
       Inverse annotation handling (2)
       Cardinality changes (2)

                       
In memory vs. Database transformations



       Easy to define         Hard to define

       Easy to optimize       No need to optimize

       Expressive             Limited expressiveness

       Easy to abstract       Abstraction near impossible

       Performance OK         Performance great




                           
Detecting
    Evolution



                 
     
article - PrintPublication {           Article - PrintPublication {
    reviewid   : string   ?                reviewid   : string   ?
    rating     : string   ?                rating     : string   ?
    journal    : string   ?    diff?       journal    : string   ?
    volume     : string   ?                volume     : string   ?
    number     : string   ?                number     : string   ?
}                                      }




                                   
     
article - PrintPublication {            Article - PrintPublication {
    reviewid   : string   ?                 reviewid   : string   ?
    rating     : string   ?                 rating     : string   ?
    journal    : string   ?                 journal    : string   ?
    volume     : string   ?                 volume     : string   ?
    number     : string   ?                 number     : string   ?
}                                       }




 Entity(                                Entity(
     Name(“article”),                       Name(“Article”),
     Name(“PrintPublication”),              Name(“PrintPublication”),
     [                                      [
         Att(                                   Att(
             Name(“reviewid”),                      Name(“reviewid”),
             PrimType(                              PrimType(
                 Name(“string”)),                       Name(“string”)),
             [                                      [
                 MinCard(0),                            MinCard(0),
                 MaxCard(1)                             MaxCard(1)
             ]                                      ]
         ),                                     ),
         ...                                    ...
     ]                                      ]
 )                                      )
article - PrintPublication {                Article - PrintPublication {
    reviewid   : string   ?                     reviewid   : string   ?
    rating     : string   ?                     rating     : string   ?
    journal    : string   ?                     journal    : string   ?
    volume     : string   ?                     volume     : string   ?
    number     : string   ?                     number     : string   ?
}                                           }




 Entity(                                    Entity(
     Name(“article”),                           Name(“Article”),
     Name(“PrintPublication”),                  Name(“PrintPublication”),
     [                                          [
         Att(                                       Att(
             Name(“reviewid”),                          Name(“reviewid”),
             PrimType(                                  PrimType(
                 Name(“string”)),   diff?                   Name(“string”)),
             [                                          [
                 MinCard(0),                                MinCard(0),
                 MaxCard(1)                                 MaxCard(1)
             ]                                          ]
         ),                                         ),
         ...                                        ...
     ]                                          ]
 )                                          )
article - PrintPublication {                 Article - PrintPublication {
    reviewid   : string   ?                      reviewid   : string   ?
    rating     : string   ?                      rating     : string   ?
    journal    : string   ?                      journal    : string   ?
    volume     : string   ?                      volume     : string   ?
    number     : string   ?                      number     : string   ?
}                                            }




                     What happened?

             Removed type article;         Added type Article

             Added type article;           Removed type Article

             Substituted article name with Article


                                        
Article - PrintPublication {                 Article - PrintPublication {
    reviewid   : string   ?                      reviewid   : string   ?
    rating     : string   ?                      rate       : string
    journal    : string   ?                      journal    : string   ?
    volume     : string   ?                      volume     : string   ?
    number     : string                          nr         : string   ?
}                                            }




                     What happened?

           renamed rating;                   renamed number;
           changed rating cardinality;       changed number cardinality




                                          
Article - PrintPublication {                 Article - PrintPublication {
    reviewid   : string   ?                      reviewid   : string   ?
    rating     : string   ?                      rate       : string
    journal    : string   ?                      journal    : string   ?
    volume     : string   ?                      volume     : string   ?
    number     : string                          nr         : string   ?
}                                            }




                     What happened?

           renamed rating;                   renamed number;
           changed rating cardinality;       changed number cardinality


           swapped rating and number; 
           renamed rating;                   renamed number

                                          
Article - PrintPublication {                 Article - PrintPublication {
    reviewid   : string   ?                      reviewid   : string   ?
    rating     : string   ?                      rate       : string
    journal    : string   ?                      journal    : string   ?
    volume     : string   ?                      volume     : string   ?
    number     : string                          nr         : string   ?
}                                            }




                      What happened?

           renamed rating;                   renamed number;
           changed rating cardinality;       changed number cardinality


           swapped rating and number; 
           renamed rating;                   renamed number

           deleted Article;                  added Article
Weighing transformations




      Addition:       0.8 * relativeSize4
      Removal:        0.5 * relativeSize4
      Substitution    0.4 * relativeSize6




      Custom weights:
         Type removal
         Type substitution         (0)
         Attribute substitution    (0)


                        
Try them all!




    On both versions at the same time


    Bound on weight
       Increasing bound


    Weight computation caching




                    
     
Heterogeneous
    Coupled Evolution



       
     
     
     
Horizontal Generalization




                 
User
       name       ::   varchar
       realName   ::   varchar
       email      ::   tinytext           Entities

                                        Properties
    Page
       title      :: varchar                  Types
       author      User
       isRedirect :: boolean




                       Meta model / Grammar

                                   
     
Lists

        More types

    Inverse associations

      Abstract types




             
Vertical Generalization
               
Heterogeneous 
         Coupled Evolution 
                 of
        Software Languages




     
The ingredients


         Software Language 
         Definition Formalism




         Evolving
         Software Language 




         Software 
     
Diverse
    Evolution




         What did we generalize?



         Why did we generalize?




                     
A Generic
    Architecture



      
     
     
     
Input



    Coupled evolution scenario




    Mapping from Mi to Mi+1

                                  
Output

                 Domain Specific 
             Transformation Language 
                      (DSTL)



             Transformation Interpreter




                Software Migration


        
SDF              SDF




          Stratego




              
Entity*            ­> DataM    Model
    Id "{" Prop* "}"   ­> Entity   Entity
    Id "::" Type       ­> Prop     Prop
    "int"              ­> Type     Int
    "bool"             ­> Type     Bool
    Id                 ­> Type  
    "set of" Type      ­> Type     Set
    NAME               ­> Id       Id




                         
Lists                               [...]

    Entity*          ­> DataM       Model




    "add" Entity    ­> LocalTransformation
    "remove"        ­> LocalTransformation



                       
Lexicals                             ''...''

    NAME             ­> Id          Id




    "substitute" NAME ­> LocalTransformation




                       
Multiple productions                  ­>*

    "int"            ­> Type        Int
    "bool"           ­> Type        Bool
    Id               ­> Type  
    "set of" Type    ­> Type        Set



    "substitute" Type ­> LocalTransformation




                       
Type checking                                 .../...


    "at" APath LocalTransformation ­> Transformation




                 Generation of local transformation domains
                                        APath type derivation
                                              Type checking

                               
Larger grammars




               Transform


               Constant




                    
     
Interpreter generation




                             Transformations library

                             Generic DSTL constructs

                             APath evaluation
                      
A Generic
    Architecture




                    
Software 
                                Language 
                                Evolution


                                  
    This research was supported by NWO/JACQUARD project
     638.001.610, MoDSE: Model­Driven Software Evolution.

Weitere ähnliche Inhalte

Was ist angesagt?

MongoDB and Ruby on Rails
MongoDB and Ruby on RailsMongoDB and Ruby on Rails
MongoDB and Ruby on Railsrfischer20
 
MongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - InboxesMongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - InboxesJared Rosoff
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDBNate Abele
 
Data Modeling for the Real World
Data Modeling for the Real WorldData Modeling for the Real World
Data Modeling for the Real WorldMike Friedman
 
MongoDB London 2013: Data Modeling Examples from the Real World presented by ...
MongoDB London 2013: Data Modeling Examples from the Real World presented by ...MongoDB London 2013: Data Modeling Examples from the Real World presented by ...
MongoDB London 2013: Data Modeling Examples from the Real World presented by ...MongoDB
 
Map/Confused? A practical approach to Map/Reduce with MongoDB
Map/Confused? A practical approach to Map/Reduce with MongoDBMap/Confused? A practical approach to Map/Reduce with MongoDB
Map/Confused? A practical approach to Map/Reduce with MongoDBUwe Printz
 
Building a Social Network with MongoDB
  Building a Social Network with MongoDB  Building a Social Network with MongoDB
Building a Social Network with MongoDBFred Chu
 
Webinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real WorldWebinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real WorldMongoDB
 
MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...
MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...
MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...MongoDB
 
Building your first app with mongo db
Building your first app with mongo dbBuilding your first app with mongo db
Building your first app with mongo dbMongoDB
 
Agile Schema Design: An introduction to MongoDB
Agile Schema Design: An introduction to MongoDBAgile Schema Design: An introduction to MongoDB
Agile Schema Design: An introduction to MongoDBStennie Steneker
 
Socialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social GraphSocialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social GraphMongoDB
 
Schema Design with MongoDB
Schema Design with MongoDBSchema Design with MongoDB
Schema Design with MongoDBrogerbodamer
 
Sharding with MongoDB -- MongoNYC 2012
Sharding with MongoDB -- MongoNYC 2012Sharding with MongoDB -- MongoNYC 2012
Sharding with MongoDB -- MongoNYC 2012Tyler Brock
 
Dealing with Azure Cosmos DB
Dealing with Azure Cosmos DBDealing with Azure Cosmos DB
Dealing with Azure Cosmos DBMihail Mateev
 
Mongoid in the real world
Mongoid in the real worldMongoid in the real world
Mongoid in the real worldKevin Faustino
 
MongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMike Friedman
 
Mongo DB schema design patterns
Mongo DB schema design patternsMongo DB schema design patterns
Mongo DB schema design patternsjoergreichert
 

Was ist angesagt? (19)

MongoDB and Ruby on Rails
MongoDB and Ruby on RailsMongoDB and Ruby on Rails
MongoDB and Ruby on Rails
 
MongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - InboxesMongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - Inboxes
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDB
 
Data Modeling for the Real World
Data Modeling for the Real WorldData Modeling for the Real World
Data Modeling for the Real World
 
Ajax cheat sheet
Ajax cheat sheetAjax cheat sheet
Ajax cheat sheet
 
MongoDB London 2013: Data Modeling Examples from the Real World presented by ...
MongoDB London 2013: Data Modeling Examples from the Real World presented by ...MongoDB London 2013: Data Modeling Examples from the Real World presented by ...
MongoDB London 2013: Data Modeling Examples from the Real World presented by ...
 
Map/Confused? A practical approach to Map/Reduce with MongoDB
Map/Confused? A practical approach to Map/Reduce with MongoDBMap/Confused? A practical approach to Map/Reduce with MongoDB
Map/Confused? A practical approach to Map/Reduce with MongoDB
 
Building a Social Network with MongoDB
  Building a Social Network with MongoDB  Building a Social Network with MongoDB
Building a Social Network with MongoDB
 
Webinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real WorldWebinar: Data Modeling Examples in the Real World
Webinar: Data Modeling Examples in the Real World
 
MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...
MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...
MongoDB World 2018: Time for a Change Stream - Using MongoDB Change Streams t...
 
Building your first app with mongo db
Building your first app with mongo dbBuilding your first app with mongo db
Building your first app with mongo db
 
Agile Schema Design: An introduction to MongoDB
Agile Schema Design: An introduction to MongoDBAgile Schema Design: An introduction to MongoDB
Agile Schema Design: An introduction to MongoDB
 
Socialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social GraphSocialite, the Open Source Status Feed Part 2: Managing the Social Graph
Socialite, the Open Source Status Feed Part 2: Managing the Social Graph
 
Schema Design with MongoDB
Schema Design with MongoDBSchema Design with MongoDB
Schema Design with MongoDB
 
Sharding with MongoDB -- MongoNYC 2012
Sharding with MongoDB -- MongoNYC 2012Sharding with MongoDB -- MongoNYC 2012
Sharding with MongoDB -- MongoNYC 2012
 
Dealing with Azure Cosmos DB
Dealing with Azure Cosmos DBDealing with Azure Cosmos DB
Dealing with Azure Cosmos DB
 
Mongoid in the real world
Mongoid in the real worldMongoid in the real world
Mongoid in the real world
 
MongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World ExamplesMongoDB Schema Design: Four Real-World Examples
MongoDB Schema Design: Four Real-World Examples
 
Mongo DB schema design patterns
Mongo DB schema design patternsMongo DB schema design patterns
Mongo DB schema design patterns
 

Andere mochten auch

Model-Driven Software Development 2.0
Model-Driven Software Development 2.0Model-Driven Software Development 2.0
Model-Driven Software Development 2.0Etienne Juliot
 
Israel redefining innovation at International CES 2015
Israel redefining innovation at International CES 2015Israel redefining innovation at International CES 2015
Israel redefining innovation at International CES 2015FSJU AUJF
 
Windows Azure Mobile Services
Windows Azure Mobile ServicesWindows Azure Mobile Services
Windows Azure Mobile ServicesJan Hentschel
 
Service Cloud für Fortgeschrittene – Die Roadmap für 2012
Service Cloud für Fortgeschrittene – Die Roadmap für 2012Service Cloud für Fortgeschrittene – Die Roadmap für 2012
Service Cloud für Fortgeschrittene – Die Roadmap für 2012Salesforce Deutschland
 
iPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhoneiPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhoneHeiko Behrens
 
Getting Started with Big Data for Business Managers
Getting Started with Big Data for Business ManagersGetting Started with Big Data for Business Managers
Getting Started with Big Data for Business ManagersDatameer
 
Agile MDD
Agile MDDAgile MDD
Agile MDDfntnhd
 
Schatten IT erfolgreich bekämpfen
Schatten IT erfolgreich bekämpfenSchatten IT erfolgreich bekämpfen
Schatten IT erfolgreich bekämpfenNiels de Bruijn
 
Modell-getriebene Softwareentwicklung für Lego Mindstorms NXT
Modell-getriebene Softwareentwicklung für Lego Mindstorms NXTModell-getriebene Softwareentwicklung für Lego Mindstorms NXT
Modell-getriebene Softwareentwicklung für Lego Mindstorms NXTjoergreichert
 
Analyzing Unstructured Data in Hadoop Webinar
Analyzing Unstructured Data in Hadoop WebinarAnalyzing Unstructured Data in Hadoop Webinar
Analyzing Unstructured Data in Hadoop WebinarDatameer
 
ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...
ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...
ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...Salesforce Deutschland
 
Software is eating the world and MDD should be in the driving seat
Software is eating the world and MDD should be in the driving seatSoftware is eating the world and MDD should be in the driving seat
Software is eating the world and MDD should be in the driving seatJohan den Haan
 
Paydirekt - Ein kurzer Walkthrough
Paydirekt - Ein kurzer WalkthroughPaydirekt - Ein kurzer Walkthrough
Paydirekt - Ein kurzer WalkthroughMaik Klotz
 
Why there is no future for Model Driven Development
Why there is no future for Model Driven DevelopmentWhy there is no future for Model Driven Development
Why there is no future for Model Driven DevelopmentJohan den Haan
 
Payment und Fintech in Deutschland. Versuch einer Übersicht
Payment und Fintech in Deutschland. Versuch einer ÜbersichtPayment und Fintech in Deutschland. Versuch einer Übersicht
Payment und Fintech in Deutschland. Versuch einer ÜbersichtMaik Klotz
 
Making Big Data Easy for Everyone
Making Big Data Easy for EveryoneMaking Big Data Easy for Everyone
Making Big Data Easy for EveryoneCaserta
 

Andere mochten auch (20)

Model-Driven Software Development 2.0
Model-Driven Software Development 2.0Model-Driven Software Development 2.0
Model-Driven Software Development 2.0
 
Israel redefining innovation at International CES 2015
Israel redefining innovation at International CES 2015Israel redefining innovation at International CES 2015
Israel redefining innovation at International CES 2015
 
Datameer
DatameerDatameer
Datameer
 
Windows Azure Mobile Services
Windows Azure Mobile ServicesWindows Azure Mobile Services
Windows Azure Mobile Services
 
Service Cloud für Fortgeschrittene – Die Roadmap für 2012
Service Cloud für Fortgeschrittene – Die Roadmap für 2012Service Cloud für Fortgeschrittene – Die Roadmap für 2012
Service Cloud für Fortgeschrittene – Die Roadmap für 2012
 
iPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhoneiPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhone
 
IN4308 1
IN4308 1IN4308 1
IN4308 1
 
Getting Started with Big Data for Business Managers
Getting Started with Big Data for Business ManagersGetting Started with Big Data for Business Managers
Getting Started with Big Data for Business Managers
 
APEX 5.0, und sonst?
APEX 5.0, und sonst?APEX 5.0, und sonst?
APEX 5.0, und sonst?
 
Agile MDD
Agile MDDAgile MDD
Agile MDD
 
Schatten IT erfolgreich bekämpfen
Schatten IT erfolgreich bekämpfenSchatten IT erfolgreich bekämpfen
Schatten IT erfolgreich bekämpfen
 
Modell-getriebene Softwareentwicklung für Lego Mindstorms NXT
Modell-getriebene Softwareentwicklung für Lego Mindstorms NXTModell-getriebene Softwareentwicklung für Lego Mindstorms NXT
Modell-getriebene Softwareentwicklung für Lego Mindstorms NXT
 
Analyzing Unstructured Data in Hadoop Webinar
Analyzing Unstructured Data in Hadoop WebinarAnalyzing Unstructured Data in Hadoop Webinar
Analyzing Unstructured Data in Hadoop Webinar
 
ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...
ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...
ET Marketing Cloud - Erfolgreich in B2B und B2C mit der Salesforce ExactTarge...
 
CG2010 Introducing MDSD
CG2010 Introducing MDSDCG2010 Introducing MDSD
CG2010 Introducing MDSD
 
Software is eating the world and MDD should be in the driving seat
Software is eating the world and MDD should be in the driving seatSoftware is eating the world and MDD should be in the driving seat
Software is eating the world and MDD should be in the driving seat
 
Paydirekt - Ein kurzer Walkthrough
Paydirekt - Ein kurzer WalkthroughPaydirekt - Ein kurzer Walkthrough
Paydirekt - Ein kurzer Walkthrough
 
Why there is no future for Model Driven Development
Why there is no future for Model Driven DevelopmentWhy there is no future for Model Driven Development
Why there is no future for Model Driven Development
 
Payment und Fintech in Deutschland. Versuch einer Übersicht
Payment und Fintech in Deutschland. Versuch einer ÜbersichtPayment und Fintech in Deutschland. Versuch einer Übersicht
Payment und Fintech in Deutschland. Versuch einer Übersicht
 
Making Big Data Easy for Everyone
Making Big Data Easy for EveryoneMaking Big Data Easy for Everyone
Making Big Data Easy for Everyone
 

Ähnlich wie Model Driven Software Development - Data Model Evolution

MongoMapper lightning talk
MongoMapper lightning talkMongoMapper lightning talk
MongoMapper lightning talkKerry Buckley
 
Webinar: Build an Application Series - Session 2 - Getting Started
Webinar: Build an Application Series - Session 2 - Getting StartedWebinar: Build an Application Series - Session 2 - Getting Started
Webinar: Build an Application Series - Session 2 - Getting StartedMongoDB
 
S01 e01 schema-design
S01 e01 schema-designS01 e01 schema-design
S01 e01 schema-designMongoDB
 
Script Fragmentation - Stephan Chenette - OWASP/RSA 2008
Script Fragmentation - Stephan Chenette - OWASP/RSA 2008Script Fragmentation - Stephan Chenette - OWASP/RSA 2008
Script Fragmentation - Stephan Chenette - OWASP/RSA 2008Stephan Chenette
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptWalid Ashraf
 
Managing Social Content with MongoDB
Managing Social Content with MongoDBManaging Social Content with MongoDB
Managing Social Content with MongoDBMongoDB
 
Crafting Evolvable Api Responses
Crafting Evolvable Api ResponsesCrafting Evolvable Api Responses
Crafting Evolvable Api Responsesdarrelmiller71
 
PDC Video on C# 4.0 Futures
PDC Video on C# 4.0 FuturesPDC Video on C# 4.0 Futures
PDC Video on C# 4.0 Futuresnithinmohantk
 
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...Prasoon Kumar
 
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPTHSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPTAAFREEN SHAIKH
 
Marc s01 e02-crud-database
Marc s01 e02-crud-databaseMarc s01 e02-crud-database
Marc s01 e02-crud-databaseMongoDB
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...MongoDB
 
Introduction To Dojo
Introduction To DojoIntroduction To Dojo
Introduction To Dojoyoavrubin
 
Tame Accidental Complexity with Ruby and MongoMapper
Tame Accidental Complexity with Ruby and MongoMapperTame Accidental Complexity with Ruby and MongoMapper
Tame Accidental Complexity with Ruby and MongoMapperGiordano Scalzo
 
Learn javascript easy steps
Learn javascript easy stepsLearn javascript easy steps
Learn javascript easy stepsprince Loffar
 
Mongo db eveningschemadesign
Mongo db eveningschemadesignMongo db eveningschemadesign
Mongo db eveningschemadesignMongoDB APAC
 
Mobile 1: Mobile Apps with MongoDB
Mobile 1: Mobile Apps with MongoDBMobile 1: Mobile Apps with MongoDB
Mobile 1: Mobile Apps with MongoDBMongoDB
 
JavaScript!
JavaScript!JavaScript!
JavaScript!RTigger
 

Ähnlich wie Model Driven Software Development - Data Model Evolution (20)

MongoMapper lightning talk
MongoMapper lightning talkMongoMapper lightning talk
MongoMapper lightning talk
 
Webinar: Build an Application Series - Session 2 - Getting Started
Webinar: Build an Application Series - Session 2 - Getting StartedWebinar: Build an Application Series - Session 2 - Getting Started
Webinar: Build an Application Series - Session 2 - Getting Started
 
Knative Outro
Knative OutroKnative Outro
Knative Outro
 
GitConnect
GitConnectGitConnect
GitConnect
 
S01 e01 schema-design
S01 e01 schema-designS01 e01 schema-design
S01 e01 schema-design
 
Script Fragmentation - Stephan Chenette - OWASP/RSA 2008
Script Fragmentation - Stephan Chenette - OWASP/RSA 2008Script Fragmentation - Stephan Chenette - OWASP/RSA 2008
Script Fragmentation - Stephan Chenette - OWASP/RSA 2008
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to Javascript
 
Managing Social Content with MongoDB
Managing Social Content with MongoDBManaging Social Content with MongoDB
Managing Social Content with MongoDB
 
Crafting Evolvable Api Responses
Crafting Evolvable Api ResponsesCrafting Evolvable Api Responses
Crafting Evolvable Api Responses
 
PDC Video on C# 4.0 Futures
PDC Video on C# 4.0 FuturesPDC Video on C# 4.0 Futures
PDC Video on C# 4.0 Futures
 
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
MongoDB Introduction talk at Dr Dobbs Conference, MongoDB Evenings at Bangalo...
 
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPTHSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
HSC INFORMATION TECHNOLOGY CHAPTER 3 ADVANCED JAVASCRIPT
 
Marc s01 e02-crud-database
Marc s01 e02-crud-databaseMarc s01 e02-crud-database
Marc s01 e02-crud-database
 
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
Webinarserie: Einführung in MongoDB: “Back to Basics” - Teil 3 - Interaktion ...
 
Introduction To Dojo
Introduction To DojoIntroduction To Dojo
Introduction To Dojo
 
Tame Accidental Complexity with Ruby and MongoMapper
Tame Accidental Complexity with Ruby and MongoMapperTame Accidental Complexity with Ruby and MongoMapper
Tame Accidental Complexity with Ruby and MongoMapper
 
Learn javascript easy steps
Learn javascript easy stepsLearn javascript easy steps
Learn javascript easy steps
 
Mongo db eveningschemadesign
Mongo db eveningschemadesignMongo db eveningschemadesign
Mongo db eveningschemadesign
 
Mobile 1: Mobile Apps with MongoDB
Mobile 1: Mobile Apps with MongoDBMobile 1: Mobile Apps with MongoDB
Mobile 1: Mobile Apps with MongoDB
 
JavaScript!
JavaScript!JavaScript!
JavaScript!
 

Kürzlich hochgeladen

Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintMahmoud Rabie
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostMatt Ray
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDELiveplex
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URLRuncy Oommen
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-pyJamie (Taka) Wang
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfDaniel Santiago Silva Capera
 
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfJamie (Taka) Wang
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsSafe Software
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPathCommunity
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 

Kürzlich hochgeladen (20)

Empowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership BlueprintEmpowering Africa's Next Generation: The AI Leadership Blueprint
Empowering Africa's Next Generation: The AI Leadership Blueprint
 
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCostKubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
KubeConEU24-Monitoring Kubernetes and Cloud Spend with OpenCost
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDEADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
ADOPTING WEB 3 FOR YOUR BUSINESS: A STEP-BY-STEP GUIDE
 
Designing A Time bound resource download URL
Designing A Time bound resource download URLDesigning A Time bound resource download URL
Designing A Time bound resource download URL
 
20230202 - Introduction to tis-py
20230202 - Introduction to tis-py20230202 - Introduction to tis-py
20230202 - Introduction to tis-py
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdfIaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
IaC & GitOps in a Nutshell - a FridayInANuthshell Episode.pdf
 
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
activity_diagram_combine_v4_20190827.pdfactivity_diagram_combine_v4_20190827.pdf
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration WorkflowsIgniting Next Level Productivity with AI-Infused Data Integration Workflows
Igniting Next Level Productivity with AI-Infused Data Integration Workflows
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
UiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation DevelopersUiPath Community: AI for UiPath Automation Developers
UiPath Community: AI for UiPath Automation Developers
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 

Model Driven Software Development - Data Model Evolution

  • 1. Sander Vermolen Eelco Visser Data Model  Evolution This research is supported by NWO/JACQUARD project     638.001.610, MoDSE: Model­Driven Software Evolution.
  • 2. Data  Models    
  • 3.    
  • 4.    
  • 5.    
  • 6. User   1 name bob  real name Bob Johnson email  b.johnson@mail.com Page   1 title "The first page" isRedirect false text  "Hello world"    
  • 7. Count page views Version history    
  • 8.    
  • 9. No page count No revisions User   1 name bob  real name Bob Johnson email  b.johnson@mail.com Page   1 title "The first page" isRedirect false text  "Hello world"    
  • 10.    
  • 12. ... $dbh->bz_add_column('attachments', 'submitter_id', {TYPE => 'INT3', NOTNULL => 1}, 0); $dbh->bz_rename_column('bugs_activity', 'when', 'bug_when'); _add_bug_vote_cache(); _update_product_name_definition(); _add_bug_keyword_cache(); $dbh->bz_add_column('profiles', 'disabledtext', {TYPE => 'MEDIUMTEXT', NOTNULL => 1}, ''); _populate_longdescs(); _update_bugs_activity_field_to_fieldid(); if (!$dbh->bz_column_info('bugs', 'lastdiffed')) { $dbh->bz_add_column('bugs', 'lastdiffed', {TYPE =>'DATETIME'}); $dbh->do('UPDATE bugs SET lastdiffed = NOW()'); } _add_unique_login_name_index_to_profiles(); $dbh->bz_add_column('profiles', 'mybugslink', {TYPE => 'BOOLEAN', NOTNULL => 1, DEFAULT => 'TRUE'}); _update_component_user_fields_to_ids(); $dbh->bz_add_column('bugs', 'everconfirmed', {TYPE => 'BOOLEAN', NOTNULL => 1}, 1); $dbh->bz_add_column('products', 'maxvotesperbug', {TYPE => 'INT2', NOTNULL => 1, DEFAULT => '10000'}); $dbh->bz_add_column('products', 'votestoconfirm', {TYPE => 'INT2', NOTNULL => 1}, 0); _populate_milestones_table(); $dbh->bz_alter_column('bugs', 'target_milestone', {TYPE => 'varchar(20)', NOTNULL => 1, DEFAULT => "'---'"}); $dbh->bz_alter_column('milestones', 'value', {TYPE => 'varchar(20)', NOTNULL => 1}); _add_products_defaultmilestone(); if (!$dbh->bz_index_info('cc', 'cc_bug_id_idx') || !$dbh->bz_index_info('cc', 'cc_bug_id_idx')->{TYPE}) { $dbh->bz_drop_index('cc', 'cc_bug_id_idx'); $dbh->bz_add_index('cc', 'cc_bug_id_idx', {TYPE => 'UNIQUE', FIELDS => [qw(bug_id who)]}); } if (!$dbh->bz_index_info('keywords', 'keywords_bug_id_idx') || !$dbh->bz_index_info('keywords', 'keywords_bug_id_idx')->{TYPE}) { $dbh->bz_drop_index('keywords', 'keywords_bug_id_idx'); $dbh->bz_add_index('keywords', 'keywords_bug_id_idx', {TYPE => 'UNIQUE', FIELDS => [qw(bug_id keywordid)]}); } ...    
  • 13. Costly High risk Holds back the development process Large infrequent development steps    
  • 14. User id  : integer name : varchar realName : varchar email : tinytext Page id : integer title : varchar author - User * isRedirect : boolean content : text     set of
  • 15. User id  : integer Unique name : varchar realName : varchar ? email : tinytext Page : Medium author - User min(1) max(8) content : text refs : url * Indexed abstract Medium id : integer Unique title : ANY_NAME    
  • 16. Evolving Data Models    
  • 17.    
  • 18.    
  • 19.    
  • 20.    
  • 21. Specifying Data Model Evolution    
  • 22. User User id  :: integer id  :: integer name :: varchar name :: varchar realName :: varchar realName :: varchar email :: tinytext email :: tinytext Page Page id :: integer id :: integer title :: varchar title :: varchar author  User counter :: biginteger isRedirect :: boolean isRedirect :: boolean content :: text revisions  set of Revision Revision id :: integer page  Page comment :: tinyblob timestamp :: time revisionText :: text     author  User
  • 23. What happened? Added type revisions Revision id :: integer page  Page comment :: tinyblob timestamp :: time author  User Added attribute revisions Page revisions  set of Revision Moved content to revision text Revision revisionText :: text Added attribute counter Page counter :: biginteger    
  • 24. 8 Basic Transformations add or remove entity add or remove property change name of entity change name of property change type of set change type of property    
  • 25. 1 Advanced Transformation move property    
  • 26. add Revision id : integer page - Page comment : tinyblob timestamp : time author - User add counter : biginteger    
  • 27.    
  • 28. At / Entity Page  /  Property Title add counter : biginteger    
  • 29. At / Entity[Id=''Page''] / Property[Id=''Title''] add counter : biginteger    
  • 30. at // Property [Id = ../Id] add counter :: biginteger    
  • 31. Revision revisionText :: text At / Entity Revision  /  Property timeStamp move page.content  to revisionText :: text    
  • 32. at Entity Page  /  Property Title add counter :: biginteger ; at Entity Revision  /  Property timeStamp add revisionText :: text from page.content    
  • 33. Evolving Data Models 8 basic transformations 1 advanced transformation Language to specify transformations Positioning sub language Specify data model evolutions    
  • 34. Data Migration    
  • 35.    
  • 36. Technical Domain WebDSL Stratego/XT Stratego/XT Generic Aterm SQL Databases (MySQL)    
  • 37. Program transformation for data migration Because  we really like program transformations generally richer than regular data acessing languages (SQL) data migration = model transformation    
  • 38. User( User id(1), id  :: integer name(“John”), name :: varchar email(“johnnyboy@mail.com”) email :: tinytext ) Page( Page id(2), id :: integer title(“Hello World”), title :: varchar [author(1)] author  User )    
  • 39. User( <user> id(1), <id>1</id> name(“John”), <name>John</name> email(“jb@m.com”) <email>jb@m.com</email> ) </user> Page( <page> id(2), <id>2</id> title(“Hello World”), <title>Hello World</title> [author(1)] <authors> ) <author>1</author> </authors> </page>    
  • 40. Remove Attribute (1) User( User id(1), id  :: integer name(“John”), name :: varchar ..... email :: tinytext ) Page( Page id(2), id :: integer title(“Hello World”), title :: varchar [author(1)] author  User ) Signature:   User := Id * Name * Email  
  • 41. Remove Attribute (2) User( User id(1), id  :: integer name(“John”), name :: varchar email(“johnnyboy@mail.com”) email :: tinytext ) Page( Page id(2), id :: integer title(“Hello World”), title :: varchar [author(1)] author  User )    
  • 42. Generic Aterm (GTerm) User( 0, User [ id  :: integer id(1), name :: varchar name(“John”), email :: tinytext email(“johnnyboy@mail.com”) ] ) Page( 1, Page [ id :: integer id(2), title :: varchar title(“Hello World”), author  User author(0) ] )    
  • 43. XMI User( 0, <user id='0'> [ <id>1</id> id(1), <name>John</name> name(“John”), <email>jb@m.com</email> email(“jb@m.com”) </user> ] ) Page( 1, <page id='1'> [ <id>2</id> id(2), <title>Hello World</title> title(“Hello World”), <author>0</author> author(0) </page> ] )    
  • 44. GTerm Characteristics Explicit references No nesting Implicit sets/lists Storage...    
  • 45. GTerm Transformation Gterm library Object creation Modifying attributes  (add, remove, change, rename, ...) Object equivalence Object traversals (Object graph traversals) Data model library Type examination Super/Sub type handling Abstract type handling    
  • 46. GTerm Storage Large quantities of data... Storage engine: In memory ­ list based ~10K In memory ­ hash table based ~500K In database ~25M ­ ...    
  • 47. GTerm Storage – In database (1) User( 0, [ 0 User id 1 id(1), 0 User name John name(“John”), 0 User email jb@m.com email(“jb@m.com”) 1 Page id 2 ] 1 Page title Hello World ) 1 Page author 0 Page( 1, [ id(2), 0 User title(“Hello World”), 1 Page author(0) ] )    
  • 48. GTerm Storage – In database GTerm Storage – In database (2) CREATE TABLE  Attributes ( CREATE TABLE  Objects ( id varchar(16), id varchar(16), type varchar(30), type varchar(30) name varchar(30), ) value text, INDEX USING HASH (id (5)), INDEX USING BTREE (v(10)) )    
  • 49. GTerm Performance Database indexes Stratego memory usage Parallel execution    
  • 50. GTerm Storage – Regular database 0 User id 1 User: 0 User name John 1 John jb@m.com 0 User email jb@m.com 1 Page id 2 Page: 1 Page title Hello World 2 Hello World 1 Page author 0 Page­User: 2 1    
  • 51. Data model SQL Script GTerm 2 SQL Old Database Generic Database SQL Script Migration (Stratego) New Database    
  • 52. DBLP Researchr    
  • 53. <dblp> <incollection mdate="2002­01­03" key="books/acm/kim95/AnnevelinkACFHK95"> <author>Jurgen Annevelink</author> <author>Rafiul Ahad</author> <author>Amelia Carlson</author> <author>Daniel H. Fishman</author> <author>Michael L. Heytens</author> <author>William Kent</author> <title>Object SQL ­ A Language for the Design and  Implementation of Object Databases.</title> <pages>42­68</pages> <year>1995</year> <booktitle>Modern Database Systems</booktitle> <url>db/books/collections/kim95.html#AnnevelinkACFHK95</url> <crossref>books/crc/KIM95</crossref> </incollection> .... </dblp>    
  • 54. article { book { key : string key : string title : string * title : string * author : string * author : string * editor : string * editor : string * booktitle : string * booktitle : string * pages : string * pages : string * address : string * address : string * journal : string * journal : string * volume : string * volume : string * number : string * number : string * publisher : string * publisher : string * crossref : string * crossref : string * series : string * series : string * school : string * school : string * chapter : string * chapter : string * month : string * month : string * year : string * year : string * url : string * url : string * note : string * note : string * mdate : string * mdate : string * cite : string * cite : string * ee : string * ee : string * cdrom : string * cdrom : string * isbn : string * isbn : string * } }     ....
  • 55. DBLP Data ~ 800,000  Authors ~ 1,200,000  Publications ~ 14,000,000  Lines of XML ~ 16,000,000 Database records    
  • 56. Publication { abstract PrintPublication - Publication key : string Unique { title : string pages : string authors - Author + Ind publisher : string ? month : string firstpage : int year : string lastpage : int ? dblpUrl : string ? } doi : string links - Link * Article - PrintPublication { abstract : string journalname : string note : string volumenumber: string annote : string issuenumber : string modified : date } modifiers - User * cites - Publication * Alias { ee : string ? name : string Unique isbn : string } issn : string conflicts : bool AbstractAuthor { } alias - Alias }    
  • 57. Migration Approach Load objects into database 9 Stages of migration Generate SQL    
  • 58. Bridging Meta levels    
  • 59.    
  • 60. article - PrintPublication { Article - PrintPublication { reviewid : string ? reviewid : string ? rating : string ? rating : string ? journal : string ? journal : string ? volume : string ? volume : string ? number : string ? number : string ? } } ?Transformation(path, Substitution(newName), _) renameType(|oldType, newName) UPDATE At  SET  t=newName  WHERE t = ...;    
  • 61. Proceedings - Collection { Proceedings - Collection { booktitle : string ? conference : string ? } } ?Transformation(path, Substitution(newName), _) renameAtt(|oldName, newName, type, dmodel) UPDATE At  SET  n = newName  WHERE n = oldName AND t = <getSubTypeQuery(|dmodel)> type;    
  • 62. abstract Thesis - Publication { abstract Thesis - Publication { school : string school : string } type : string ? } ?Transformation(path, Addition(Att(Name(attName), PrimType(_), annotations)),_); <getAttAnn(|"MinCard")> annotations; ?0 ... ...    
  • 63. abstract Thesis - Publication { abstract Thesis - Publication { school : string school : string } type : string } ?Transformation( path,  Addition(Att(Name(attName), PrimType(_), annotations)), _ ); <getAttAnn(|"MinCard")> annotations; ?low <addDefaultAttributesToType(| type, <make­int> low, attName, attType, mmodel )> model; onType( addDefaultAttributes(|type, nr, attName, attType) | type, mmodel)    
  • 64. onType 1. find objects of type 2. divide into chunks 3. per chunk in parallel Load objects in chunk per object s save object if changed    
  • 65. Publication { Publication { key : string Unique key : string Unique title : string ? title : string ? authors : string + Indexed authors - Author + Indexed year : string year : string ... ... } } Author { alias : string } ?Transformation(path, Substitution(DeclType(Name(newTypeName))), _) ... Author alias mandatory Author alias not unique onType( for each author create author object set author attribute   )  
  • 66. Author { Author { alias : string alias : Alias } } Alias { name : string Unique ?Transformation(path, Substitution(DeclType(Name(newTypeName))), _) ... Alias name mandatory Alias name unique onType( if alias exists then set alias attribute to existing id else create alias object set alias attribute to new id )    
  • 67. Supported transformations Identity Primitive attribute addition (3) Complex attribute addition Attribute removal Attribute name change Attribute move (2) Primitive type change Implicit reference resolution Attribute wrapping Type addition Type removal Type name change Abstract type handling Inverse annotation handling (2) Cardinality changes (2)    
  • 68. In memory vs. Database transformations Easy to define Hard to define Easy to optimize No need to optimize Expressive Limited expressiveness Easy to abstract Abstraction near impossible Performance OK Performance great    
  • 69. Detecting Evolution    
  • 70.    
  • 71. article - PrintPublication { Article - PrintPublication { reviewid : string ? reviewid : string ? rating : string ? rating : string ? journal : string ? diff? journal : string ? volume : string ? volume : string ? number : string ? number : string ? } }    
  • 72.    
  • 73. article - PrintPublication { Article - PrintPublication { reviewid : string ? reviewid : string ? rating : string ? rating : string ? journal : string ? journal : string ? volume : string ? volume : string ? number : string ? number : string ? } } Entity( Entity( Name(“article”), Name(“Article”), Name(“PrintPublication”), Name(“PrintPublication”), [ [ Att( Att( Name(“reviewid”), Name(“reviewid”), PrimType( PrimType( Name(“string”)), Name(“string”)), [ [ MinCard(0), MinCard(0), MaxCard(1) MaxCard(1) ] ] ), ), ... ... ] ]  )   )
  • 74. article - PrintPublication { Article - PrintPublication { reviewid : string ? reviewid : string ? rating : string ? rating : string ? journal : string ? journal : string ? volume : string ? volume : string ? number : string ? number : string ? } } Entity( Entity( Name(“article”), Name(“Article”), Name(“PrintPublication”), Name(“PrintPublication”), [ [ Att( Att( Name(“reviewid”), Name(“reviewid”), PrimType( PrimType( Name(“string”)), diff? Name(“string”)), [ [ MinCard(0), MinCard(0), MaxCard(1) MaxCard(1) ] ] ), ), ... ... ] ]  )   )
  • 75. article - PrintPublication { Article - PrintPublication { reviewid : string ? reviewid : string ? rating : string ? rating : string ? journal : string ? journal : string ? volume : string ? volume : string ? number : string ? number : string ? } } What happened? Removed type article; Added type Article Added type article; Removed type Article Substituted article name with Article    
  • 76. Article - PrintPublication { Article - PrintPublication { reviewid : string ? reviewid : string ? rating : string ? rate : string journal : string ? journal : string ? volume : string ? volume : string ? number : string nr : string ? } } What happened? renamed rating;  renamed number; changed rating cardinality; changed number cardinality    
  • 77. Article - PrintPublication { Article - PrintPublication { reviewid : string ? reviewid : string ? rating : string ? rate : string journal : string ? journal : string ? volume : string ? volume : string ? number : string nr : string ? } } What happened? renamed rating;  renamed number; changed rating cardinality; changed number cardinality swapped rating and number;  renamed rating;  renamed number    
  • 78. Article - PrintPublication { Article - PrintPublication { reviewid : string ? reviewid : string ? rating : string ? rate : string journal : string ? journal : string ? volume : string ? volume : string ? number : string nr : string ? } } What happened? renamed rating;  renamed number; changed rating cardinality; changed number cardinality swapped rating and number;  renamed rating;  renamed number   deleted Article;    added Article
  • 79. Weighing transformations Addition: 0.8 * relativeSize4 Removal: 0.5 * relativeSize4 Substitution 0.4 * relativeSize6 Custom weights: Type removal Type substitution  (0) Attribute substitution (0)    
  • 80. Try them all! On both versions at the same time Bound on weight Increasing bound Weight computation caching    
  • 81.    
  • 82. Heterogeneous Coupled Evolution    
  • 83.    
  • 84.    
  • 85.    
  • 87. User name :: varchar realName :: varchar email :: tinytext Entities Properties Page title :: varchar Types author  User isRedirect :: boolean Meta model / Grammar    
  • 88.    
  • 89. Lists More types Inverse associations Abstract types    
  • 91. Heterogeneous  Coupled Evolution  of Software Languages    
  • 92. The ingredients Software Language  Definition Formalism Evolving Software Language  Software     
  • 93. Diverse Evolution What did we generalize? Why did we generalize?    
  • 94. A Generic Architecture    
  • 95.    
  • 96.    
  • 97.    
  • 98. Input Coupled evolution scenario Mapping from Mi to Mi+1    
  • 99. Output Domain Specific  Transformation Language  (DSTL) Transformation Interpreter Software Migration    
  • 100. SDF SDF Stratego    
  • 101. Entity* ­> DataM  Model Id "{" Prop* "}" ­> Entity Entity Id "::" Type ­> Prop  Prop "int" ­> Type   Int "bool" ­> Type   Bool Id ­> Type   "set of" Type ­> Type   Set NAME ­> Id     Id    
  • 102. Lists [...] Entity* ­> DataM  Model "add" Entity    ­> LocalTransformation "remove"        ­> LocalTransformation    
  • 103. Lexicals ''...'' NAME ­> Id     Id "substitute" NAME ­> LocalTransformation    
  • 104. Multiple productions ­>* "int" ­> Type   Int "bool" ­> Type   Bool Id ­> Type   "set of" Type ­> Type   Set "substitute" Type ­> LocalTransformation    
  • 105. Type checking .../... "at" APath LocalTransformation ­> Transformation Generation of local transformation domains APath type derivation Type checking    
  • 106. Larger grammars Transform Constant    
  • 107.    
  • 108. Interpreter generation Transformations library Generic DSTL constructs APath evaluation    
  • 109. A Generic Architecture    
  • 110. Software  Language  Evolution     This research was supported by NWO/JACQUARD project 638.001.610, MoDSE: Model­Driven Software Evolution.