SlideShare a Scribd company logo
1 of 23
Download to read offline
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.

More Related Content

What's hot

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
 

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

Viewers also liked

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

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

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

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

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

Recently uploaded

Recently uploaded (20)

Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
Powerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara LaskowskaPowerful Start- the Key to Project Success, Barbara Laskowska
Powerful Start- the Key to Project Success, Barbara Laskowska
 
Oauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoftOauth 2.0 Introduction and Flows with MuleSoft
Oauth 2.0 Introduction and Flows with MuleSoft
 
Designing for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at ComcastDesigning for Hardware Accessibility at Comcast
Designing for Hardware Accessibility at Comcast
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdfHow Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
How Red Hat Uses FDO in Device Lifecycle _ Costin and Vitaliy at Red Hat.pdf
 
Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
Secure Zero Touch enabled Edge compute with Dell NativeEdge via FDO _ Brad at...
 
Working together SRE & Platform Engineering
Working together SRE & Platform EngineeringWorking together SRE & Platform Engineering
Working together SRE & Platform Engineering
 
Portal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russePortal Kombat : extension du réseau de propagande russe
Portal Kombat : extension du réseau de propagande russe
 
AI mind or machine power point presentation
AI mind or machine power point presentationAI mind or machine power point presentation
AI mind or machine power point presentation
 
Your enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4jYour enemies use GenAI too - staying ahead of fraud with Neo4j
Your enemies use GenAI too - staying ahead of fraud with Neo4j
 
A Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System StrategyA Business-Centric Approach to Design System Strategy
A Business-Centric Approach to Design System Strategy
 
Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024Extensible Python: Robustness through Addition - PyCon 2024
Extensible Python: Robustness through Addition - PyCon 2024
 
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
Behind the Scenes From the Manager's Chair: Decoding the Secrets of Successfu...
 
ECS 2024 Teams Premium - Pretty Secure
ECS 2024   Teams Premium - Pretty SecureECS 2024   Teams Premium - Pretty Secure
ECS 2024 Teams Premium - Pretty Secure
 
AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101AI presentation and introduction - Retrieval Augmented Generation RAG 101
AI presentation and introduction - Retrieval Augmented Generation RAG 101
 
ERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage IntacctERP Contender Series: Acumatica vs. Sage Intacct
ERP Contender Series: Acumatica vs. Sage Intacct
 
WebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM PerformanceWebAssembly is Key to Better LLM Performance
WebAssembly is Key to Better LLM Performance
 
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdfThe Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
The Value of Certifying Products for FDO _ Paul at FIDO Alliance.pdf
 

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.