21.08.2013 Views

SqueakSave

SqueakSave

SqueakSave

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

lundi 31 août 2009<br />

<strong>SqueakSave</strong><br />

An Automatic Object-Relational Mapping Framework<br />

Thomas Kowark<br />

Robert Hirschfeld<br />

Michael Haupt<br />

Software Architecture Group<br />

Hasso-Plattner-Institut Potsdam<br />

www.hpi.uni-potsdam.de/swa


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

• motivation<br />

• basic usage<br />

• framework architecture<br />

• performance<br />

• summary & outlook<br />

Outline<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

2


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Available Persistence Approaches<br />

• image storing<br />

• object databases<br />

• (object-)relational persistence<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

3


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

<strong>SqueakSave</strong> – Project Goals<br />

• automatic mapping deduction<br />

• simplistic API<br />

• seamless integration into existing applications<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

4


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

al Paradigm for UML Community Edition [not for commercial use]<br />

User<br />

-email : string<br />

-username : string<br />

-password : string<br />

Author<br />

Admin<br />

Guiding Example<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

0..* +followers<br />

1<br />

1<br />

1..*<br />

+blog<br />

+administeredBlogs<br />

1<br />

0..*<br />

Blog<br />

-title : string<br />

-lastUpdate : dateTime<br />

1<br />

0..*<br />

BlogPost<br />

-title : string<br />

-text : string<br />

1<br />

0..*<br />

Comment<br />

-author : string<br />

-title : string<br />

-text : string<br />

+blogPosts<br />

+comments<br />

5


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

API – Configuration<br />

• configuration based on naming conventions<br />

SqsConfig subclass: #BlogExampleSqsConfig<br />

instanceVariableNames: ''<br />

classVariableNames: ''<br />

poolDictionaries: ''<br />

category: 'BlogExample'<br />

BlogExampleSqsConfig<br />

class>>#connectionSpecification<br />

^ SqsMySQLConnectionSpecification<br />

user: 'admin'<br />

password: 'password'<br />

database: 'blog_example_db'<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 6<br />

lundi 31 août 2009


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

author := Author new<br />

password: 'password';<br />

username: 'testuser';<br />

email: 'user@example.org'.<br />

author blog: (Blog new title: 'My Blog').<br />

author save.<br />

...<br />

author destroy.<br />

API – Basic Operations<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 7<br />

lundi 31 août 2009


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

API – Queries<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

(SqsSearch for: User) detect: [:aUser |<br />

aUser username = 'testuser']<br />

(SqsSearch for: Author) select: [:anAuthor |<br />

anAuthor blog blogPosts size > 10 ]<br />

(SqsSearch for: Blog) anySatisfy: [:aBlog |<br />

aBlog blogPosts noneSatisfy: [:aBlogPost |<br />

aBlogPost comments isEmpty ] ]<br />

(SqsSearch for: Blog) findByTitle: 'testblog'<br />

(SqsSearch for: Comment)<br />

findByAuthor: 'author' andTitle: 'comment'.<br />

8


commercial use]<br />

<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

er<br />

1<br />

Class<br />

SqsBase 0..*<br />

SqsConnection<br />

ctureHandler<br />

SqsDescriptionHandler<br />

1<br />

class<br />

1<br />

+classInfo<br />

1<br />

+session<br />

1<br />

SqsProxy<br />

SqsClassInfo<br />

SqsSession<br />

SqsTableStructureHandler<br />

currentClass<br />

1<br />

<strong>SqueakSave</strong> – Architecture<br />

instVarValue<br />

1<br />

1<br />

<br />

SqsConnectionManager<br />

dbAdapter<br />

re 4.1: Overview of <strong>SqueakSave</strong> System Classes.<br />

SqsDatabaseAdapter<br />

SqsDatabaseConnection<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 9<br />

0..1<br />

1<br />

0..*<br />

<br />

connection<br />

e into the separate sub words and connects them with an underscore. A<br />

e’, for example, is thereby converted to the column name ‘user name’.<br />

ide simple compatibility with most other O/R mappers for dynamic<br />

lundi 31 août 2009


commercial use]<br />

<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

er<br />

1<br />

Class<br />

SqsBase 0..*<br />

SqsConnection<br />

ctureHandler<br />

SqsDescriptionHandler<br />

1<br />

class<br />

1<br />

+classInfo<br />

1<br />

+session<br />

1<br />

SqsProxy<br />

SqsClassInfo<br />

SqsSession<br />

SqsTableStructureHandler<br />

currentClass<br />

1<br />

<strong>SqueakSave</strong> – Architecture<br />

instVarValue<br />

anObject save<br />

1<br />

1<br />

<br />

SqsConnectionManager<br />

dbAdapter<br />

re 4.1: Overview of <strong>SqueakSave</strong> System Classes.<br />

SqsDatabaseAdapter<br />

SqsDatabaseConnection<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 9<br />

0..1<br />

1<br />

0..*<br />

<br />

connection<br />

e into the separate sub words and connects them with an underscore. A<br />

e’, for example, is thereby converted to the column name ‘user name’.<br />

ide simple compatibility with most other O/R mappers for dynamic<br />

lundi 31 août 2009


commercial use]<br />

<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

er<br />

1<br />

Class<br />

SqsBase 0..*<br />

SqsConnection<br />

ctureHandler<br />

SqsDescriptionHandler<br />

1<br />

class<br />

1<br />

+classInfo<br />

1<br />

+session<br />

1<br />

SqsProxy<br />

SqsClassInfo<br />

SqsSession 1<br />

Creation or fetching of<br />

SqsTableStructureHandler<br />

currentClass<br />

1<br />

<strong>SqueakSave</strong> – Architecture<br />

instVarValue<br />

1<br />

unique SqsStorage<br />

wrapper instance<br />

<br />

SqsConnectionManager<br />

dbAdapter<br />

re 4.1: Overview of <strong>SqueakSave</strong> System Classes.<br />

SqsDatabaseAdapter<br />

SqsDatabaseConnection<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 9<br />

0..1<br />

1<br />

0..*<br />

<br />

connection<br />

e into the separate sub words and connects them with an underscore. A<br />

e’, for example, is thereby converted to the column name ‘user name’.<br />

ide simple compatibility with most other O/R mappers for dynamic<br />

lundi 31 août 2009


commercial use]<br />

<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

er<br />

1<br />

Class<br />

SqsBase 0..*<br />

SqsConnection<br />

ctureHandler<br />

SqsDescriptionHandler<br />

1<br />

class<br />

1<br />

+classInfo<br />

1<br />

+session<br />

1<br />

SqsProxy<br />

SqsClassInfo<br />

SqsSession<br />

SqsTableStructureHandler<br />

currentClass<br />

1<br />

<strong>SqueakSave</strong> – Architecture<br />

instVarValue<br />

1<br />

1<br />

<br />

SqsConnectionManager<br />

dbAdapter<br />

re 4.1: Overview of <strong>SqueakSave</strong> System Classes.<br />

SqsDatabaseAdapter<br />

SqsDatabaseConnection<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 9<br />

0..1<br />

1<br />

0..*<br />

<br />

connection<br />

Creation or update of<br />

mapping descriptions<br />

e into the separate sub words and connects them with an underscore. A<br />

e’, for example, is thereby converted to the column name ‘user name’.<br />

ide simple compatibility with most other O/R mappers for dynamic<br />

lundi 31 août 2009


commercial use]<br />

<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

er<br />

1<br />

Class<br />

SqsBase 0..*<br />

SqsConnection<br />

ctureHandler<br />

SqsDescriptionHandler<br />

1<br />

class<br />

1<br />

+classInfo<br />

1<br />

+session<br />

1<br />

SqsProxy<br />

SqsClassInfo<br />

SqsSession<br />

SqsTableStructureHandler<br />

1<br />

instVarValue<br />

1<br />

1<br />

<br />

currentClass<br />

SqsConnectionManager<br />

dbAdapter<br />

re 4.1: Overview of <strong>SqueakSave</strong> System Classes.<br />

Calculation of changes to<br />

SqsDatabaseAdapter<br />

SqsDatabaseConnection<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 9<br />

0..1<br />

1<br />

0..*<br />

<br />

connection<br />

e intothe the relational separatedatabase sub words and connects them with an underscore. A<br />

schema<br />

<strong>SqueakSave</strong> – Architecture<br />

e’, for example, is thereby converted to the column name ‘user name’.<br />

ide simple compatibility with most other O/R mappers for dynamic<br />

lundi 31 août 2009


commercial use]<br />

<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

er<br />

1<br />

Class<br />

SqsBase 0..*<br />

SqsConnection<br />

ctureHandler<br />

SqsDescriptionHandler<br />

1<br />

class<br />

1<br />

+classInfo<br />

1<br />

+session<br />

1<br />

SqsProxy<br />

SqsClassInfo<br />

SqsSession<br />

SqsTableStructureHandler<br />

1<br />

instVarValue<br />

1<br />

1<br />

<br />

currentClass<br />

SqsConnectionManager<br />

dbAdapter<br />

re 4.1: Overview of <strong>SqueakSave</strong> System Classes.<br />

SqsDatabaseAdapter<br />

SqsDatabaseConnection<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 9<br />

0..1<br />

1<br />

0..*<br />

<br />

connection<br />

e into the separate sub words and connects them with an underscore. A<br />

e’, for example, is thereby converted to the column name ‘user name’.<br />

ide simple compatibility with most other O/R mappers for dynamic<br />

lundi 31 août 2009<br />

<strong>SqueakSave</strong> – Architecture<br />

Connection pooling


commercial use]<br />

<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

er<br />

1<br />

Class<br />

SqsBase 0..*<br />

SqsConnection<br />

ctureHandler<br />

SqsDescriptionHandler<br />

1<br />

class<br />

1<br />

+classInfo<br />

1<br />

+session<br />

1<br />

SqsProxy<br />

SqsClassInfo<br />

SqsSession<br />

SqsTableStructureHandler<br />

1<br />

instVarValue<br />

1<br />

1<br />

<br />

currentClass<br />

SqsConnectionManager<br />

dbAdapter<br />

re 4.1: Overview of <strong>SqueakSave</strong> System Classes.<br />

SqsDatabaseAdapter<br />

SqsDatabaseConnection<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 9<br />

0..1<br />

1<br />

0..*<br />

<br />

connection<br />

e into the separate sub words and connects them with an underscore. A<br />

e’, for example, is thereby converted to the column name ‘user name’.<br />

ide simple compatibility with most other O/R mappers for dynamic<br />

lundi 31 août 2009<br />

<strong>SqueakSave</strong> – Architecture<br />

Schema update and<br />

object insertion or update


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Query Analysis<br />

• SQL statement generation through block execution<br />

with placeholder objects<br />

• one placeholder class per ‘simple type’,<br />

SqsQueryObject and SqsQueryCollection for<br />

complex cases<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

(SqsSearch for: User) detect: [:aUser |<br />

aUser username = 'testuser']<br />

10


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Query Analysis<br />

• SQL statement generation through block execution<br />

with placeholder objects<br />

• one placeholder class per ‘simple type’,<br />

SqsQueryObject and SqsQueryCollection for<br />

complex cases<br />

queryObject := SqsQueryObject new<br />

depictedClass: User.<br />

result := aBlock value: queryObject.<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

(SqsSearch for: User) detect: [:aUser |<br />

aUser username = 'testuser']<br />

10


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Query Analysis<br />

• SQL statement generation through block execution<br />

with placeholder objects<br />

• one placeholder class per ‘simple type’,<br />

SqsQueryObject and SqsQueryCollection for<br />

complex cases<br />

The query object does not know what #username<br />

does, but generates the SQL to scope to the<br />

respective column.<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

(SqsSearch for: User) detect: [:aUser |<br />

aUser username = 'testuser']<br />

10


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Query Analysis<br />

• SQL statement generation through block execution<br />

with placeholder objects<br />

• one placeholder class per ‘simple type’,<br />

SqsQueryObject and SqsQueryCollection for<br />

complex cases<br />

WHERE users.username<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

(SqsSearch for: User) detect: [:aUser |<br />

aUser username = 'testuser']<br />

10


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Query Analysis<br />

• SQL statement generation through block execution<br />

with placeholder objects<br />

• one placeholder class per ‘simple type’,<br />

SqsQueryObject and SqsQueryCollection for<br />

complex cases<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

(SqsSearch for: User) detect: [:aUser |<br />

aUser username = 'testuser']<br />

The result of the first call is an SqsQueryString.<br />

It knows how to map the #= to SQL properly.<br />

10


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Query Analysis<br />

• SQL statement generation through block execution<br />

with placeholder objects<br />

• one placeholder class per ‘simple type’,<br />

SqsQueryObject and SqsQueryCollection for<br />

complex cases<br />

WHERE users.username =<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

(SqsSearch for: User) detect: [:aUser |<br />

aUser username = 'testuser']<br />

10


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Query Analysis<br />

• SQL statement generation through block execution<br />

with placeholder objects<br />

• one placeholder class per ‘simple type’,<br />

SqsQueryObject and SqsQueryCollection for<br />

complex cases<br />

WHERE users.username = ‘testuser’<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

(SqsSearch for: User) detect: [:aUser |<br />

aUser username = 'testuser']<br />

10


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Evaluation<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

• evaluation based on OO7 benchmark<br />

– CAD application data structure<br />

– complex object model with many cyclic dependencies<br />

• set of queries with increasing complexity<br />

• number of traversals of an object graph<br />

• comparison with GLORP<br />

11


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Evaluation – Query Performance<br />

• approx. 20% slower than GLORP<br />

• two exceptions<br />

– caching mechanism (10x slower)<br />

(SqsSearch for: SqsAtomicPart) detect:<br />

[:ap | ap oid = id].<br />

– query creation with joins (1/3x faster)<br />

(SqsSearch for: SqsBaseAssembly) select: [:ba |<br />

ba unsharedParts anySatisfy: [:part |<br />

part document = id ]].<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 12<br />

lundi 31 août 2009


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Traversal 1<br />

<strong>SqueakSave</strong> GLORP<br />

Traversal 2b<br />

– missing eager loading<br />

(n+1 queries problem)<br />

<strong>SqueakSave</strong> GLORP<br />

Evaluation – Traversal Performance<br />

6s<br />

5s<br />

3s<br />

2s<br />

0s<br />

24s<br />

18s<br />

12s<br />

6s<br />

0s<br />

Traversal 2a<br />

<strong>SqueakSave</strong> GLORP<br />

Traversal 2c<br />

– minimal intrusion into object<br />

models (only collection proxies)<br />

<strong>SqueakSave</strong> GLORP<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009 13<br />

lundi 31 août 2009


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Summary and Outlook<br />

• simple usage & setup<br />

– integration into existing applications almost seamless<br />

• automatic deduction of database structures<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

14


<strong>SqueakSave</strong>: An Automatic Object-Relational Mapping Framework<br />

Summary and Outlook<br />

• simple usage & setup<br />

– integration into existing applications almost seamless<br />

• automatic deduction of database structures<br />

• possible extensions<br />

– SqueakDBX usage<br />

– eager loading<br />

– performance optimizations<br />

Thomas Kowark, Robert Hirschfeld, Michael Haupt (www.hpi.uni-potsdam.de/swa) 2009<br />

lundi 31 août 2009<br />

14

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!