SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
Store Beyond Glorp
    What's Next


                      World Headquarters
                         Cincinnati, Ohio




                                        ®




                          Welcome
                     August 21, 2011
What is Store ?

•  Store is a Version Control System for Cincom Smalltalk
•  Uses a Relational Database as the repository
•  Versions
  §    Bundles and Packages (components)
  §    Namespaces
  §    Class Definitions
  §    Class Extensions (methods only)
  §    Shared Variables
  §    Methods
Store Capabilities

•  Provides Tools for:
   §    Publishing Bundles/Packages
   §    Merging Bundle/Package versions into the image
   §    Loading all version-able entities
   §    Listing, Browsing, Comparing all version-able entities
   §    Administration
•  Supports object queries using Glorp
What is Glorp

•  Glorp is an Object Relational Mapping Framework
•  Cross Dialect
•  Multiple Database Support
•  Uses Database Specific Optimizations
   §  Arrayed Changes
   §  Smart Unions
What Store used to use
•  Hand coded (generic) SQL
•  Minimal optimized execution
•  “Flat” objects
   §  Bundle
      •  Bundles
      •  Packages
      •  Methods (package to method)
         §  Method
      •  PkgClasses (package to class)
         §  ClassRecord


•  Views into relationships
Glorp Objects

•  All in NameSpace : Store.Glorp
•  Most subclassed from StoreObject
  §  Exceptions:
     •    StoreClassExtension
     •    StoreMetaclassExtension
     •    StoreLoadRecord (obsolete)
     •    StoreUserGroup
     •    StoreVersionlessPundle
     •    StoreAccessPrivilege
Working With Store Objects - Session

•  You need a session
   §  session := Store.Glorp.StoreLoginFactory currentStoreSession

•  What is in a session:
   §  Accessor (a DatabaseAccessor subclass)
   §  System (a StoreDescriptorSystem subclass)
   §  Platform (Glorp.DatabasePlatform)
      •  session system platform
      •  session platform
Working With Store Objects : Selecting
•    session readOneOf:
•    session read: (readManyOf:)
•    session count: X
•    Where statements (#read:where:, #count:where:, etc.)
      §  [:each | each <someStatmentAnsweringBoolean>]
      §  [:each | each xxx AND: (each yyy)]
      §  [:each | each xxx OR: (each yyy)]
•  Store object ‘fields’
      §  StoreDescriptorSystem >> classModelFor<XXX>:
Working With Store Objects : Queries
•  query := Query where: [:each | ….]
•  query alsoFetch:
   §  [:each | each definition comment]

•  query orderBy:
   §  [:each | each timstamp descending]

•  query retrieve:
   §  [:each | each count]
   §  [:each | each name distinct]
Queries – All versions of a method

  session := StoreLoginFactory currentStoreSession.
  query := Query
        read: Store.Glorp.StoreMethodInPackage
        where: [:each | each definition name = 'fileNew' &
        (each definition className =
             'Root.Smalltalk.Tools.Workspace') &
        (each package name = 'Tools-Workspace')].
  query alsoFetch: #definition.
  query orderBy: [:each | each definition timestamp descending].
  ^session execute: query
Queries – Latest trunk version of bundle

   session := StoreLoginFactory currentStoreSession.
   query := Query readOneOf: StoreBundle
    where: [:each |each name = 'Glorp' &
    (each currentBlessingLevel >= 15) &
    (each version similarTo: '7.[7-9](.1)* - [0-9]+') ].
   query orderBy: [:each | (each version copyFrom: 1 to: 6) descending ].
   query orderBy: [:each | each timestamp descending ].
   ^session execute: query

   Query gets highest 7.7, 7.7.1, 7.8 or 7.9 version
Administrative Tasks
•  Rename a Version
   §  packages := session
        read: StorePackage
        where: [:each | each version = ‘Ugly’].
       session inUnitOfWorkDo:
        [:thisSession |
        thisSession register: packages first.
        packages first version: ‘BetterName’]

•  Add a SQL Function
   §                                  createBasicFunctionsFor:
   §  DatabasePlatform subclass >> #initializeFunctions
   §  at: #length put: (PrefixFunction named: 'LENGTH')
   §  session
         read: StorePackage
         where: [:each | each version length > 50]
Warning, Will Robinson (Traps to avoid)
•  Sessions
   §  Too Many Hold On To Connection Resources (Cursors)
   §  Too Few Grow Huge Caches

•  Most StoreObject APIs have two versions:
   §  allVersionsWithName: aString
   §  allVersionsWithName: aString in: aSessionOrNil

•  StorePackage & StoreBundle have session instance
  variable!
•  Don’t get full objects if you just want a single attribute
Store Opportunities provided by Glorp
•  Schema changes become easier
  §  Currently, previous version key is in version record, making
      tracing history inefficient
  §  Text fields that could be large, like method source are stored in
      Blobs with indirect reference and chaining

•  Querying the repository in complex ways becomes
 easier
  §  Possible to run SmallLint on methods in repository, not just
      when loaded (I think)

•  Building Store add-ons becomes easier – composed
 DesriptorSystem?
Glorp Opportunities provided by Store
•  Cincom now has a Glorp application
   §  Helps us to understand viewpoing of Glorp users better
   §  Likely to drive Glorp feature development a bit faster
   §  Creating DBA functionality across platforms/DBs bit win for us

•  Users now have a (non-toy) Glorp application to look at
  in Cincom Smalltalk
   •  Want to know how to do something? Browse senders of….
Store Migration Issues - Speed
•  Speed has suffered
   §  Query speed
      •  Old implementation was hand-coded, brittle, relatively fast SQL
      •  New implementation uses generated SQL
      §  Schema suboptimal

•  Likely that we can make it faster than old Store
   §  Eliminate unnecessary queries
   §  Eliminate redundant processing
Eliminating Redundant Queries
•  Redundant queries in session creation
•  Queries which don’t get quite enough data
  §  Proxies need to be resolved
  §  1 query per value – lots of extra round trips

•  Data retrieved, used, thrown away, retrieved again
Eliminating Redundant Processing
•  Example: ChangeSet
   §  VisualWorks has 3 types of ChangeSet
      §  Bundle/Package change sets (1 per pundle, per repository)
      §  Global change set
      §  Named change sets (1 current)
   §  Loading a version updates all 3 kinds
   §  Unloading package searches and removes changes from all 3

•  Reducing the number of change sets being updated
   should significantly improve unloading, loading likely
   improved to a lesser degree
Enhancements for 7.9

•  All old Store objects and tools not loaded by default
   and moved to:
   §  OldStoreDatabase package
   §  OldStore Tools package

•  Progress in ongoing speed improvement effor
•  Store problems that raise Dialogs have been modified
   to throw exceptions, allowing you to catch them
   §  Makes automated testing more robust
   §  Supports scripting for build, etc
Enhancements for 7.9, continued

•  MergeTool
   §  Apply will use RB refactorings to allow merge to be undone if
       desired
   §  Will be able to do automatic merge, taking you directly to the
       Publish dialog, if no manual merge decisions required
      §    Eventually, we would like to make it easy to script Load, Merge and
            Publish
Enhancements for 7.9, continued

•  Gather and Distribute
   §  Gather – Allows you to compare multiple bundles or
       packages and publish all changes as a single package
   §  Distribute – After loading a package created by Gather, allows
       you distribute the contents back where they belong (subject
       to some limitations)
•  Immediate application in product support. There may
   be others
Questions ? Comments ?


         Ask now
          --- or ---

         Tom Robinson
   trobinson1@cincom.com
©  2011 Cincom Systems, Inc.
                                         All Rights Reserved
                                        Developed in the U.S.A.

CINCOM, the Quadrant Logo, and Simplification Through Innovation are registered trademarks of Cincom Systems, Inc.
                             All other trademarks belong to their respective companies.

Weitere ähnliche Inhalte

Was ist angesagt?

From Tomcat to Java EE, making the transition with TomEE
From Tomcat to Java EE, making the transition with TomEEFrom Tomcat to Java EE, making the transition with TomEE
From Tomcat to Java EE, making the transition with TomEE
jaxconf
 
Building perfect sql servers, every time -oops
Building perfect sql servers, every time -oopsBuilding perfect sql servers, every time -oops
Building perfect sql servers, every time -oops
Joseph D'Antoni
 
Handling Massive Writes
Handling Massive WritesHandling Massive Writes
Handling Massive Writes
Liran Zelkha
 

Was ist angesagt? (20)

Ehcache 3 @ BruJUG
Ehcache 3 @ BruJUGEhcache 3 @ BruJUG
Ehcache 3 @ BruJUG
 
MySQL Tuning
MySQL TuningMySQL Tuning
MySQL Tuning
 
Transactions and Concurrency Control Patterns
Transactions and Concurrency Control PatternsTransactions and Concurrency Control Patterns
Transactions and Concurrency Control Patterns
 
VMworld 2013: Big Data: Virtualized SAP HANA Performance, Scalability and Bes...
VMworld 2013: Big Data: Virtualized SAP HANA Performance, Scalability and Bes...VMworld 2013: Big Data: Virtualized SAP HANA Performance, Scalability and Bes...
VMworld 2013: Big Data: Virtualized SAP HANA Performance, Scalability and Bes...
 
SM16 - Can i move my stuff to openstack
SM16 - Can i move my stuff to openstackSM16 - Can i move my stuff to openstack
SM16 - Can i move my stuff to openstack
 
From Tomcat to Java EE, making the transition with TomEE
From Tomcat to Java EE, making the transition with TomEEFrom Tomcat to Java EE, making the transition with TomEE
From Tomcat to Java EE, making the transition with TomEE
 
Building perfect sql servers, every time -oops
Building perfect sql servers, every time -oopsBuilding perfect sql servers, every time -oops
Building perfect sql servers, every time -oops
 
VMworld 2013: Extreme Performance Series: Monster Virtual Machines
VMworld 2013: Extreme Performance Series: Monster Virtual Machines VMworld 2013: Extreme Performance Series: Monster Virtual Machines
VMworld 2013: Extreme Performance Series: Monster Virtual Machines
 
Handling Massive Writes
Handling Massive WritesHandling Massive Writes
Handling Massive Writes
 
OSGifying the repository
OSGifying the repositoryOSGifying the repository
OSGifying the repository
 
Improving Website Performance with Memecached Webinar | Achieve Internet
Improving Website Performance with Memecached Webinar | Achieve InternetImproving Website Performance with Memecached Webinar | Achieve Internet
Improving Website Performance with Memecached Webinar | Achieve Internet
 
Zend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applicationsZend_Cache: how to improve the performance of PHP applications
Zend_Cache: how to improve the performance of PHP applications
 
/path/to/content - the Apache Jackrabbit content repository
/path/to/content - the Apache Jackrabbit content repository/path/to/content - the Apache Jackrabbit content repository
/path/to/content - the Apache Jackrabbit content repository
 
Jakarta EE 8 on JDK17
Jakarta EE 8 on JDK17Jakarta EE 8 on JDK17
Jakarta EE 8 on JDK17
 
Accelerate your ColdFusion Applications using Caching
Accelerate your ColdFusion Applications using CachingAccelerate your ColdFusion Applications using Caching
Accelerate your ColdFusion Applications using Caching
 
Repository performance tuning
Repository performance tuningRepository performance tuning
Repository performance tuning
 
Access Data from XPages with the Relational Controls
Access Data from XPages with the Relational ControlsAccess Data from XPages with the Relational Controls
Access Data from XPages with the Relational Controls
 
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
How to JavaOne 2016 - Generate Customized Java 8 Code from Your Database [TUT...
 
Java EE 7, what's in it for me?
Java EE 7, what's in it for me?Java EE 7, what's in it for me?
Java EE 7, what's in it for me?
 
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi   SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
SenchaCon 2016: The Modern Toolchain - Ross Gerbasi
 

Andere mochten auch

Andere mochten auch (6)

Show Us: SS7 Update
Show Us: SS7 UpdateShow Us: SS7 Update
Show Us: SS7 Update
 
DeltaImpact: Assessing semantic merge conflicts with Dependency Analysis
DeltaImpact: Assessing semantic merge conflicts with Dependency AnalysisDeltaImpact: Assessing semantic merge conflicts with Dependency Analysis
DeltaImpact: Assessing semantic merge conflicts with Dependency Analysis
 
Ocean Update
Ocean Update Ocean Update
Ocean Update
 
NativeBoost
NativeBoostNativeBoost
NativeBoost
 
Bloc: a Modern Core for Highly Dynamic Graphics
Bloc: a Modern Core for Highly Dynamic Graphics Bloc: a Modern Core for Highly Dynamic Graphics
Bloc: a Modern Core for Highly Dynamic Graphics
 
Code Transformation by Direct Transformation of ASTs
Code Transformation by Direct Transformation of ASTsCode Transformation by Direct Transformation of ASTs
Code Transformation by Direct Transformation of ASTs
 

Ähnlich wie Store Beyond Glorp

Advanced caching techniques with ehcache, big memory, terracotta, and coldfusion
Advanced caching techniques with ehcache, big memory, terracotta, and coldfusionAdvanced caching techniques with ehcache, big memory, terracotta, and coldfusion
Advanced caching techniques with ehcache, big memory, terracotta, and coldfusion
ColdFusionConference
 
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
seleniumconf
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
Ulrich Krause
 

Ähnlich wie Store Beyond Glorp (20)

A Notes Developer's Journey into Java
A Notes Developer's Journey into JavaA Notes Developer's Journey into Java
A Notes Developer's Journey into Java
 
Advanced caching techniques with ehcache, big memory, terracotta, and coldfusion
Advanced caching techniques with ehcache, big memory, terracotta, and coldfusionAdvanced caching techniques with ehcache, big memory, terracotta, and coldfusion
Advanced caching techniques with ehcache, big memory, terracotta, and coldfusion
 
Where Django Caching Bust at the Seams
Where Django Caching Bust at the SeamsWhere Django Caching Bust at the Seams
Where Django Caching Bust at the Seams
 
CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011CakePHP 2.0 - PHP Matsuri 2011
CakePHP 2.0 - PHP Matsuri 2011
 
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
Testing Rapidly Changing Applications With Self-Testing Object-Oriented Selen...
 
SenchaCon 2016: How to Auto Generate a Back-end in Minutes - Per Minborg, Emi...
SenchaCon 2016: How to Auto Generate a Back-end in Minutes - Per Minborg, Emi...SenchaCon 2016: How to Auto Generate a Back-end in Minutes - Per Minborg, Emi...
SenchaCon 2016: How to Auto Generate a Back-end in Minutes - Per Minborg, Emi...
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
 
Fastest Servlets in the West
Fastest Servlets in the WestFastest Servlets in the West
Fastest Servlets in the West
 
Tuenti Release Workflow
Tuenti Release WorkflowTuenti Release Workflow
Tuenti Release Workflow
 
Alfresco tuning part1
Alfresco tuning part1Alfresco tuning part1
Alfresco tuning part1
 
Alfresco tuning part1
Alfresco tuning part1Alfresco tuning part1
Alfresco tuning part1
 
Investigate TempDB Like Sherlock Holmes
Investigate TempDB Like Sherlock HolmesInvestigate TempDB Like Sherlock Holmes
Investigate TempDB Like Sherlock Holmes
 
SenchaCon 2016 - How to Auto Generate a Back-end in Minutes
SenchaCon 2016 - How to Auto Generate a Back-end in MinutesSenchaCon 2016 - How to Auto Generate a Back-end in Minutes
SenchaCon 2016 - How to Auto Generate a Back-end in Minutes
 
SenchaCon 2016 - How to Auto Generate a Back-end in Minutes
SenchaCon 2016 - How to Auto Generate a Back-end in MinutesSenchaCon 2016 - How to Auto Generate a Back-end in Minutes
SenchaCon 2016 - How to Auto Generate a Back-end in Minutes
 
Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...Generalization in Auto-Testing. How we put what we had into new Technological...
Generalization in Auto-Testing. How we put what we had into new Technological...
 
Locks, Blocks, and Snapshots: Maximizing Database Concurrency (PASSDC User Gr...
Locks, Blocks, and Snapshots: Maximizing Database Concurrency (PASSDC User Gr...Locks, Blocks, and Snapshots: Maximizing Database Concurrency (PASSDC User Gr...
Locks, Blocks, and Snapshots: Maximizing Database Concurrency (PASSDC User Gr...
 
Locks, Blocks, and Snapshots: Maximizing Database Concurrency (New England SQ...
Locks, Blocks, and Snapshots: Maximizing Database Concurrency (New England SQ...Locks, Blocks, and Snapshots: Maximizing Database Concurrency (New England SQ...
Locks, Blocks, and Snapshots: Maximizing Database Concurrency (New England SQ...
 
XPages -Beyond the Basics
XPages -Beyond the BasicsXPages -Beyond the Basics
XPages -Beyond the Basics
 
Reactive GUI Implemented in Clojure
Reactive GUI Implemented in ClojureReactive GUI Implemented in Clojure
Reactive GUI Implemented in Clojure
 
Redshift deep dive
Redshift deep diveRedshift deep dive
Redshift deep dive
 

Mehr von ESUG

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
ESUG
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
ESUG
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
ESUG
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
ESUG
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
ESUG
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
ESUG
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
ESUG
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
ESUG
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
ESUG
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
ESUG
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
ESUG
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
ESUG
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
ESUG
 

Mehr von ESUG (20)

Workshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programmingWorkshop: Identifying concept inventories in agile programming
Workshop: Identifying concept inventories in agile programming
 
Technical documentation support in Pharo
Technical documentation support in PharoTechnical documentation support in Pharo
Technical documentation support in Pharo
 
The Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and RoadmapThe Pharo Debugger and Debugging tools: Advances and Roadmap
The Pharo Debugger and Debugging tools: Advances and Roadmap
 
Sequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in PharoSequence: Pipeline modelling in Pharo
Sequence: Pipeline modelling in Pharo
 
Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...Migration process from monolithic to micro frontend architecture in mobile ap...
Migration process from monolithic to micro frontend architecture in mobile ap...
 
Analyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early resultsAnalyzing Dart Language with Pharo: Report and early results
Analyzing Dart Language with Pharo: Report and early results
 
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
Transpiling Pharo Classes to JS ECMAScript 5 versus ECMAScript 6
 
A Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test GenerationA Unit Test Metamodel for Test Generation
A Unit Test Metamodel for Test Generation
 
Creating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic ProgrammingCreating Unit Tests Using Genetic Programming
Creating Unit Tests Using Genetic Programming
 
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution ModesThreaded-Execution and CPS Provide Smooth Switching Between Execution Modes
Threaded-Execution and CPS Provide Smooth Switching Between Execution Modes
 
Exploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience ReportExploring GitHub Actions through EGAD: An Experience Report
Exploring GitHub Actions through EGAD: An Experience Report
 
Pharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIsPharo: a reflective language A first systematic analysis of reflective APIs
Pharo: a reflective language A first systematic analysis of reflective APIs
 
Garbage Collector Tuning
Garbage Collector TuningGarbage Collector Tuning
Garbage Collector Tuning
 
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame CaseImproving Performance Through Object Lifetime Profiling: the DataFrame Case
Improving Performance Through Object Lifetime Profiling: the DataFrame Case
 
Pharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and FuturePharo DataFrame: Past, Present, and Future
Pharo DataFrame: Past, Present, and Future
 
thisContext in the Debugger
thisContext in the DebuggerthisContext in the Debugger
thisContext in the Debugger
 
Websockets for Fencing Score
Websockets for Fencing ScoreWebsockets for Fencing Score
Websockets for Fencing Score
 
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScriptShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
ShowUs: PharoJS.org Develop in Pharo, Run on JavaScript
 
Advanced Object- Oriented Design Mooc
Advanced Object- Oriented Design MoocAdvanced Object- Oriented Design Mooc
Advanced Object- Oriented Design Mooc
 
A New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and TransformationsA New Architecture Reconciling Refactorings and Transformations
A New Architecture Reconciling Refactorings and Transformations
 

Kürzlich hochgeladen

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Kürzlich hochgeladen (20)

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 

Store Beyond Glorp

  • 1. Store Beyond Glorp What's Next World Headquarters Cincinnati, Ohio ® Welcome August 21, 2011
  • 2. What is Store ? •  Store is a Version Control System for Cincom Smalltalk •  Uses a Relational Database as the repository •  Versions §  Bundles and Packages (components) §  Namespaces §  Class Definitions §  Class Extensions (methods only) §  Shared Variables §  Methods
  • 3. Store Capabilities •  Provides Tools for: §  Publishing Bundles/Packages §  Merging Bundle/Package versions into the image §  Loading all version-able entities §  Listing, Browsing, Comparing all version-able entities §  Administration •  Supports object queries using Glorp
  • 4. What is Glorp •  Glorp is an Object Relational Mapping Framework •  Cross Dialect •  Multiple Database Support •  Uses Database Specific Optimizations §  Arrayed Changes §  Smart Unions
  • 5. What Store used to use •  Hand coded (generic) SQL •  Minimal optimized execution •  “Flat” objects §  Bundle •  Bundles •  Packages •  Methods (package to method) §  Method •  PkgClasses (package to class) §  ClassRecord •  Views into relationships
  • 6. Glorp Objects •  All in NameSpace : Store.Glorp •  Most subclassed from StoreObject §  Exceptions: •  StoreClassExtension •  StoreMetaclassExtension •  StoreLoadRecord (obsolete) •  StoreUserGroup •  StoreVersionlessPundle •  StoreAccessPrivilege
  • 7. Working With Store Objects - Session •  You need a session §  session := Store.Glorp.StoreLoginFactory currentStoreSession •  What is in a session: §  Accessor (a DatabaseAccessor subclass) §  System (a StoreDescriptorSystem subclass) §  Platform (Glorp.DatabasePlatform) •  session system platform •  session platform
  • 8. Working With Store Objects : Selecting •  session readOneOf: •  session read: (readManyOf:) •  session count: X •  Where statements (#read:where:, #count:where:, etc.) §  [:each | each <someStatmentAnsweringBoolean>] §  [:each | each xxx AND: (each yyy)] §  [:each | each xxx OR: (each yyy)] •  Store object ‘fields’ §  StoreDescriptorSystem >> classModelFor<XXX>:
  • 9. Working With Store Objects : Queries •  query := Query where: [:each | ….] •  query alsoFetch: §  [:each | each definition comment] •  query orderBy: §  [:each | each timstamp descending] •  query retrieve: §  [:each | each count] §  [:each | each name distinct]
  • 10. Queries – All versions of a method session := StoreLoginFactory currentStoreSession. query := Query read: Store.Glorp.StoreMethodInPackage where: [:each | each definition name = 'fileNew' & (each definition className = 'Root.Smalltalk.Tools.Workspace') & (each package name = 'Tools-Workspace')]. query alsoFetch: #definition. query orderBy: [:each | each definition timestamp descending]. ^session execute: query
  • 11. Queries – Latest trunk version of bundle session := StoreLoginFactory currentStoreSession. query := Query readOneOf: StoreBundle where: [:each |each name = 'Glorp' & (each currentBlessingLevel >= 15) & (each version similarTo: '7.[7-9](.1)* - [0-9]+') ]. query orderBy: [:each | (each version copyFrom: 1 to: 6) descending ]. query orderBy: [:each | each timestamp descending ]. ^session execute: query Query gets highest 7.7, 7.7.1, 7.8 or 7.9 version
  • 12. Administrative Tasks •  Rename a Version §  packages := session read: StorePackage where: [:each | each version = ‘Ugly’]. session inUnitOfWorkDo: [:thisSession | thisSession register: packages first. packages first version: ‘BetterName’] •  Add a SQL Function §  createBasicFunctionsFor: §  DatabasePlatform subclass >> #initializeFunctions §  at: #length put: (PrefixFunction named: 'LENGTH') §  session read: StorePackage where: [:each | each version length > 50]
  • 13. Warning, Will Robinson (Traps to avoid) •  Sessions §  Too Many Hold On To Connection Resources (Cursors) §  Too Few Grow Huge Caches •  Most StoreObject APIs have two versions: §  allVersionsWithName: aString §  allVersionsWithName: aString in: aSessionOrNil •  StorePackage & StoreBundle have session instance variable! •  Don’t get full objects if you just want a single attribute
  • 14. Store Opportunities provided by Glorp •  Schema changes become easier §  Currently, previous version key is in version record, making tracing history inefficient §  Text fields that could be large, like method source are stored in Blobs with indirect reference and chaining •  Querying the repository in complex ways becomes easier §  Possible to run SmallLint on methods in repository, not just when loaded (I think) •  Building Store add-ons becomes easier – composed DesriptorSystem?
  • 15. Glorp Opportunities provided by Store •  Cincom now has a Glorp application §  Helps us to understand viewpoing of Glorp users better §  Likely to drive Glorp feature development a bit faster §  Creating DBA functionality across platforms/DBs bit win for us •  Users now have a (non-toy) Glorp application to look at in Cincom Smalltalk •  Want to know how to do something? Browse senders of….
  • 16. Store Migration Issues - Speed •  Speed has suffered §  Query speed •  Old implementation was hand-coded, brittle, relatively fast SQL •  New implementation uses generated SQL §  Schema suboptimal •  Likely that we can make it faster than old Store §  Eliminate unnecessary queries §  Eliminate redundant processing
  • 17. Eliminating Redundant Queries •  Redundant queries in session creation •  Queries which don’t get quite enough data §  Proxies need to be resolved §  1 query per value – lots of extra round trips •  Data retrieved, used, thrown away, retrieved again
  • 18. Eliminating Redundant Processing •  Example: ChangeSet §  VisualWorks has 3 types of ChangeSet §  Bundle/Package change sets (1 per pundle, per repository) §  Global change set §  Named change sets (1 current) §  Loading a version updates all 3 kinds §  Unloading package searches and removes changes from all 3 •  Reducing the number of change sets being updated should significantly improve unloading, loading likely improved to a lesser degree
  • 19. Enhancements for 7.9 •  All old Store objects and tools not loaded by default and moved to: §  OldStoreDatabase package §  OldStore Tools package •  Progress in ongoing speed improvement effor •  Store problems that raise Dialogs have been modified to throw exceptions, allowing you to catch them §  Makes automated testing more robust §  Supports scripting for build, etc
  • 20. Enhancements for 7.9, continued •  MergeTool §  Apply will use RB refactorings to allow merge to be undone if desired §  Will be able to do automatic merge, taking you directly to the Publish dialog, if no manual merge decisions required §  Eventually, we would like to make it easy to script Load, Merge and Publish
  • 21. Enhancements for 7.9, continued •  Gather and Distribute §  Gather – Allows you to compare multiple bundles or packages and publish all changes as a single package §  Distribute – After loading a package created by Gather, allows you distribute the contents back where they belong (subject to some limitations) •  Immediate application in product support. There may be others
  • 22. Questions ? Comments ? Ask now --- or --- Tom Robinson trobinson1@cincom.com
  • 23. ©  2011 Cincom Systems, Inc. All Rights Reserved Developed in the U.S.A. CINCOM, the Quadrant Logo, and Simplification Through Innovation are registered trademarks of Cincom Systems, Inc. All other trademarks belong to their respective companies.