SlideShare a Scribd company logo
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.

More Related Content

What's hot

MongoDB and Ruby on Rails
MongoDB and Ruby on RailsMongoDB and Ruby on Rails
MongoDB and Ruby on Rails
rfischer20
 
MongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - InboxesMongoDB Advanced Schema Design - Inboxes
MongoDB Advanced Schema Design - Inboxes
Jared Rosoff
 
Building Apps with MongoDB
Building Apps with MongoDBBuilding Apps with MongoDB
Building Apps with MongoDB
Nate Abele
 
Data Modeling for the Real World
Data Modeling for the Real WorldData Modeling for the Real World
Data Modeling for the Real World
Mike Friedman
 
Ajax cheat sheet
Ajax cheat sheetAjax cheat sheet
Ajax cheat sheet
Randy Marmer
 
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 MongoDB
Uwe Printz
 
Building a Social Network with MongoDB
  Building a Social Network with MongoDB  Building a Social Network with MongoDB
Building a Social Network with MongoDB
Fred 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 World
MongoDB
 
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 db
MongoDB
 
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
Stennie 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 Graph
MongoDB
 
Schema Design with MongoDB
Schema Design with MongoDBSchema Design with MongoDB
Schema Design with MongoDB
rogerbodamer
 
Sharding with MongoDB -- MongoNYC 2012
Sharding with MongoDB -- MongoNYC 2012Sharding with MongoDB -- MongoNYC 2012
Sharding with MongoDB -- MongoNYC 2012
Tyler Brock
 
Dealing with Azure Cosmos DB
Dealing with Azure Cosmos DBDealing with Azure Cosmos DB
Dealing with Azure Cosmos DB
Mihail Mateev
 
Mongoid in the real world
Mongoid in the real worldMongoid in the real world
Mongoid in the real world
Kevin 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 Examples
Mike Friedman
 
Mongo DB schema design patterns
Mongo DB schema design patternsMongo DB schema design patterns
Mongo DB schema design patterns
joergreichert
 

What's hot (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
 

Viewers also liked

Model-Driven Software Development 2.0
Model-Driven Software Development 2.0Model-Driven Software Development 2.0
Model-Driven Software Development 2.0
Etienne 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 2015
FSJU AUJF
 
Datameer
DatameerDatameer
Datameer
Chris Morrison
 
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 2012
Salesforce 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 iPhone
Heiko Behrens
 
IN4308 1
IN4308 1IN4308 1
IN4308 1
Eelco Visser
 
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
Datameer
 
APEX 5.0, und sonst?
APEX 5.0, und sonst?APEX 5.0, und sonst?
APEX 5.0, und sonst?
Niels de Bruijn
 
Agile MDD
Agile MDDAgile MDD
Agile MDD
fntnhd
 
Schatten IT erfolgreich bekämpfen
Schatten IT erfolgreich bekämpfenSchatten IT erfolgreich bekämpfen
Schatten IT erfolgreich bekämpfen
Niels 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 NXT
joergreichert
 
Analyzing Unstructured Data in Hadoop Webinar
Analyzing Unstructured Data in Hadoop WebinarAnalyzing Unstructured Data in Hadoop Webinar
Analyzing Unstructured Data in Hadoop Webinar
Datameer
 
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
 
CG2010 Introducing MDSD
CG2010 Introducing MDSDCG2010 Introducing MDSD
CG2010 Introducing MDSD
Pedro J. Molina
 
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
Johan den Haan
 
Paydirekt - Ein kurzer Walkthrough
Paydirekt - Ein kurzer WalkthroughPaydirekt - Ein kurzer Walkthrough
Paydirekt - Ein kurzer Walkthrough
Maik 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 Development
Johan 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 Übersicht
Maik Klotz
 
Making Big Data Easy for Everyone
Making Big Data Easy for EveryoneMaking Big Data Easy for Everyone
Making Big Data Easy for Everyone
Caserta
 

Viewers also liked (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
 

Similar to Model Driven Software Development - Data Model Evolution

MongoMapper lightning talk
MongoMapper lightning talkMongoMapper lightning talk
MongoMapper lightning talk
Kerry 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 Started
MongoDB
 
Knative Outro
Knative OutroKnative Outro
Knative Outro
Joe Searcy
 
GitConnect
GitConnectGitConnect
GitConnect
Akshara Chaturvedi
 
S01 e01 schema-design
S01 e01 schema-designS01 e01 schema-design
S01 e01 schema-design
MongoDB
 
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
Stephan Chenette
 
Lab #2: Introduction to Javascript
Lab #2: Introduction to JavascriptLab #2: Introduction to Javascript
Lab #2: Introduction to Javascript
Walid Ashraf
 
Managing Social Content with MongoDB
Managing Social Content with MongoDBManaging Social Content with MongoDB
Managing Social Content with MongoDB
MongoDB
 
Crafting Evolvable Api Responses
Crafting Evolvable Api ResponsesCrafting Evolvable Api Responses
Crafting Evolvable Api Responses
darrelmiller71
 
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
nithinmohantk
 
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 JAVASCRIPT
AAFREEN SHAIKH
 
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
 
Marc s01 e02-crud-database
Marc s01 e02-crud-databaseMarc s01 e02-crud-database
Marc s01 e02-crud-database
MongoDB
 
Introduction To Dojo
Introduction To DojoIntroduction To Dojo
Introduction To Dojo
yoavrubin
 
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
Giordano Scalzo
 
Learn javascript easy steps
Learn javascript easy stepsLearn javascript easy steps
Learn javascript easy steps
prince Loffar
 
Mongo db eveningschemadesign
Mongo db eveningschemadesignMongo db eveningschemadesign
Mongo db eveningschemadesign
MongoDB APAC
 
Mobile 1: Mobile Apps with MongoDB
Mobile 1: Mobile Apps with MongoDBMobile 1: Mobile Apps with MongoDB
Mobile 1: Mobile Apps with MongoDB
MongoDB
 
JavaScript!
JavaScript!JavaScript!
JavaScript!
RTigger
 

Similar to 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
 
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 ...
 
Marc s01 e02-crud-database
Marc s01 e02-crud-databaseMarc s01 e02-crud-database
Marc s01 e02-crud-database
 
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!
 

Recently uploaded

Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 

Recently uploaded (20)

Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 

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.