SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Downloaden Sie, um offline zu lesen
Voyage-Tugrik:
A new persistence option for
Pharo using GemStone/S 64
Dale Henrichs
GemTalk Systems
ESUG 2016
Tugrik???
WAT???
1 Tugrik = 100 Mongo
Voyage
• Object-Document Mapper for NOSQL databases
• MongoDB and UnQLite databases
• Simplest API possible
• 6 methods for save remove, and query
• No Voyage Query language
GemStone/S 64
• Multi-terabyte Smalltalk image
• 1000’s of concurrent Smalltalk vms (gems) making updates to shared
image
• 1000’s of ACID transactions (concurrent image saves) per second
• Generous “Free for commercial use”
• Cost for the following is an email
• 50Gb data base
• 20 gems - 20 concurrent transactions
• https://gemtalksystems.com/licensing/#CWELicensing
GsDevKit/GLASS
• A compatibility layer for GemStone/S that provides a
class library that more closely resembles a classical
Smalltalk environment
• Smalltalk global is present
• Implements a large number of classes and methods
that are present in Squeak and Pharo images
GsDevKit_home
• Bash scripts for creating/starting/stopping GemStone
database instances (stones)
• Bash scripts for creating/starting/stopping Pharo
clients
• Ubuntu 12.04/14.04 and MacOs
• Ubuntu 16.04 soon
Tugrik
Proof of Concept
• Tugrik was created to make it possible to move a Voyage
application written against MongoDB to GemStone/S
• Tugrik implements the public MongoTalk Smalltalk API
• Tugrik models the MongoDB collection organization
• named database instance consisting of a number of
named document store collections
• Tugrik supports the MongoDB query filters
• Tugrik passes all of the MongoTalk unit tests
Tugrik
Tugrik
Tugrik
MongoDB query filters
{ <field>: { $all: [ <value1> , <value2> ... ] } }
{ field: { $size: 2 } }
{ $nor: [ { price: 1.99 }, { sale: true } ] }
Voyage-Tugrik
• Voyage-Tugrik specializes Voyage-Mongo.
• VOTugrikRepository is a subclass of
VOMongoRepository
Voyage-Tugrik
Class Mapping
• With Voyage-Tugrik Class Mapping, instances of root
object classes are created on server instead of
anonymous TugrikObject instances
• Expect to share common packages between client and
server
Voyage Server Blocks:
Unlocking Server-Side Execution
• Class instances WITHOUT behavior on the server is
interesting and even useful in some cases
• More interesting would be to enable server-side
execution
https://twitter.com/joeerl/status/765793779949395968
Voyage Server Blocks:
Send Small Programs to Data
• The expression is embedded in your client code
• The block source is extracted, shipped to the server
and evaluated.
• The return value is serialized and returned to client.
Voyage Server Blocks:
non-local variables
• The values of non-local variable references in block
are serialized and shipped to server where the values
are bound to the variables before execution
Voyage Server Blocks:
Voyage Root Objects
• A root object can be passed as the value of a non-
local variable and a returned root object is mapped to
client-side instance
Voyage Server Blocks:
Root Object behavior
• Voyage query blocks can use full range of root object
behavior on server (i.e., real select blocks)
Voyage Server Blocks:
Voyage API
• Full Voyage API (save, remove, select*) is implemented
on server
Tugrik Tools:
Debugger
Tugrik Tools:
Interactions
Future Work
• Tugrik session pool and object cache refactoring
• Improve/add client-side tools
• Harden Tugrik client implementation
• GemStone indexing support(???)
• GemStone Transaction models(???)
• Replication and synchronization improvements(???)
• Automatically compile shared code on Server(???)
• Optimizations
Looking for Partners
• Set agenda and priorities for Future Work
• Contributions!!!!
• My Preferences:
• incremental development with active participation from users
• features added based on demand
• simple over complicated
• thin clients over fat clients
Path of Least Resistance
• Concurrent document update issues
• Large number of documents
• Interest in Thin Client/Fat Server application
Voyage-Tugrik
Installation
# Install GsDevKit_home
git clone https://github.com/GsDevKit/GsDevKit_home.git
# Setup $GS_HOME env var and put $GS_HOME/bin in path
cd GsDevKit_home
. bin/defHOME_PATH.env
# Setup system for client/server operations (install OS prerequisites using `sudo`)
installServerClient
# Create tODE client
createClient tode
# Create Voyage stone
createStone -u http://gsdevkit.github.io/GsDevKit_home/Voyage.ston -i Voyage -l Voyage Voyage 3.3.1
# Create Pharo5.0 Voyage client
createClient -t pharo voyage -l -v Pharo5.0 -z $GS_HOME/shared/repos/voyage/.smalltalk-tugrik.ston
# Start Voyage client and register Voyage stone as default server
startClient voyage -s Voyage
Questions
Resources
• GemTalk Systems
• http://gemtalksystems.com
• https://gemtalksystems.com/products/gs64/versions33x/#33
• Voyage-Tugrik project
• https://github.com/dalehenrich/voyage#voyage-tugrik
• GsDevKit_home Installation and Documentation
• http://github.com/GsDevKit/GsDevKit_home
• GLASS (GemStone Open Source Community) mailing list
• http://forum.world.st/GLASS-f1460844.html

Weitere ähnliche Inhalte

Was ist angesagt?

JRuby: Pushing the Java Platform Further
JRuby: Pushing the Java Platform FurtherJRuby: Pushing the Java Platform Further
JRuby: Pushing the Java Platform Further
Charles Nutter
 

Was ist angesagt? (20)

Zun project update (boston summit)
Zun project update (boston summit)Zun project update (boston summit)
Zun project update (boston summit)
 
Distributed system coordination by zookeeper and introduction to kazoo python...
Distributed system coordination by zookeeper and introduction to kazoo python...Distributed system coordination by zookeeper and introduction to kazoo python...
Distributed system coordination by zookeeper and introduction to kazoo python...
 
How to Test Asynchronous Code (v2)
How to Test Asynchronous Code (v2)How to Test Asynchronous Code (v2)
How to Test Asynchronous Code (v2)
 
How we use Twisted in Launchpad
How we use Twisted in LaunchpadHow we use Twisted in Launchpad
How we use Twisted in Launchpad
 
Docker volume-isolator-in-mesos
Docker volume-isolator-in-mesosDocker volume-isolator-in-mesos
Docker volume-isolator-in-mesos
 
Twisted Introduction
Twisted IntroductionTwisted Introduction
Twisted Introduction
 
Understanding and tuning WiredTiger, the new high performance database engine...
Understanding and tuning WiredTiger, the new high performance database engine...Understanding and tuning WiredTiger, the new high performance database engine...
Understanding and tuning WiredTiger, the new high performance database engine...
 
Nsq & python worker
Nsq & python workerNsq & python worker
Nsq & python worker
 
Kubernetes #6 advanced scheduling
Kubernetes #6   advanced schedulingKubernetes #6   advanced scheduling
Kubernetes #6 advanced scheduling
 
Kubernetes #3 security
Kubernetes #3   securityKubernetes #3   security
Kubernetes #3 security
 
无锁编程
无锁编程无锁编程
无锁编程
 
OpenStack Cinder Overview - Havana Release
OpenStack Cinder Overview - Havana ReleaseOpenStack Cinder Overview - Havana Release
OpenStack Cinder Overview - Havana Release
 
JRuby: Pushing the Java Platform Further
JRuby: Pushing the Java Platform FurtherJRuby: Pushing the Java Platform Further
JRuby: Pushing the Java Platform Further
 
Blocks & Grand Central Dispatch
Blocks & Grand Central DispatchBlocks & Grand Central Dispatch
Blocks & Grand Central Dispatch
 
Kubernetes intro public - kubernetes meetup 4-21-2015
Kubernetes intro   public - kubernetes meetup 4-21-2015Kubernetes intro   public - kubernetes meetup 4-21-2015
Kubernetes intro public - kubernetes meetup 4-21-2015
 
Easy access to open stack object storage
Easy access to open stack object storageEasy access to open stack object storage
Easy access to open stack object storage
 
Facebook C++网络库Wangle调研
Facebook C++网络库Wangle调研Facebook C++网络库Wangle调研
Facebook C++网络库Wangle调研
 
Bringing Concurrency to Ruby - RubyConf India 2014
Bringing Concurrency to Ruby - RubyConf India 2014Bringing Concurrency to Ruby - RubyConf India 2014
Bringing Concurrency to Ruby - RubyConf India 2014
 
Groovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentationGroovy & Grails eXchange 2012 vert.x presentation
Groovy & Grails eXchange 2012 vert.x presentation
 
CDN algos
CDN algosCDN algos
CDN algos
 

Andere mochten auch

New Native Windows UI possibilities in Cincom Smalltalk ObjectStudio
New Native Windows UI possibilities in Cincom Smalltalk ObjectStudioNew Native Windows UI possibilities in Cincom Smalltalk ObjectStudio
New Native Windows UI possibilities in Cincom Smalltalk ObjectStudio
ESUG
 

Andere mochten auch (10)

seamless – Object Oriented CMS System
seamless – Object Oriented CMS Systemseamless – Object Oriented CMS System
seamless – Object Oriented CMS System
 
Presenty
PresentyPresenty
Presenty
 
A Weak Pharo Story
A Weak Pharo StoryA Weak Pharo Story
A Weak Pharo Story
 
Test Selection with Moose In Industry - Impact of Granularity
Test Selection with Moose In Industry - Impact of GranularityTest Selection with Moose In Industry - Impact of Granularity
Test Selection with Moose In Industry - Impact of Granularity
 
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
 
New Native Windows UI possibilities in Cincom Smalltalk ObjectStudio
New Native Windows UI possibilities in Cincom Smalltalk ObjectStudioNew Native Windows UI possibilities in Cincom Smalltalk ObjectStudio
New Native Windows UI possibilities in Cincom Smalltalk ObjectStudio
 
Prototyping Software Product Lines analysis with Pharo
Prototyping Software Product Lines analysis with PharoPrototyping Software Product Lines analysis with Pharo
Prototyping Software Product Lines analysis with Pharo
 
Pillar: one language for all supports
Pillar: one language for all supportsPillar: one language for all supports
Pillar: one language for all supports
 
The Glamorous Toolkit: Towards a novel live IDE
The Glamorous Toolkit: Towards a novel live IDEThe Glamorous Toolkit: Towards a novel live IDE
The Glamorous Toolkit: Towards a novel live IDE
 
Lub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented ProgrammingLub: a DSL for Dynamic Context Oriented Programming
Lub: a DSL for Dynamic Context Oriented Programming
 

Ähnlich wie Tugrik: A new persistence option for Pharo

Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5
Ganesh Kondal
 
MongoDB at Gilt Groupe
MongoDB at Gilt GroupeMongoDB at Gilt Groupe
MongoDB at Gilt Groupe
MongoDB
 
Gaelyk - JFokus 2011 - Guillaume Laforge
Gaelyk - JFokus 2011 - Guillaume LaforgeGaelyk - JFokus 2011 - Guillaume Laforge
Gaelyk - JFokus 2011 - Guillaume Laforge
Guillaume Laforge
 

Ähnlich wie Tugrik: A new persistence option for Pharo (20)

Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5Tech io spa_angularjs_20130814_v0.9.5
Tech io spa_angularjs_20130814_v0.9.5
 
Google App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and GaelykGoogle App Engine Java, Groovy and Gaelyk
Google App Engine Java, Groovy and Gaelyk
 
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDK
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDKBigQuery case study in Groovenauts & Dive into the DataflowJavaSDK
BigQuery case study in Groovenauts & Dive into the DataflowJavaSDK
 
Intro to kubernetes
Intro to kubernetesIntro to kubernetes
Intro to kubernetes
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor Framework
 
Node azure
Node azureNode azure
Node azure
 
MongoDB at Gilt Groupe
MongoDB at Gilt GroupeMongoDB at Gilt Groupe
MongoDB at Gilt Groupe
 
Notes on SF W3Conf
Notes on SF W3ConfNotes on SF W3Conf
Notes on SF W3Conf
 
Developing Series 40 web apps with Nokia Web Tools 2.0
Developing Series 40 web apps with Nokia Web Tools 2.0Developing Series 40 web apps with Nokia Web Tools 2.0
Developing Series 40 web apps with Nokia Web Tools 2.0
 
Gaelyk - JFokus 2011 - Guillaume Laforge
Gaelyk - JFokus 2011 - Guillaume LaforgeGaelyk - JFokus 2011 - Guillaume Laforge
Gaelyk - JFokus 2011 - Guillaume Laforge
 
Ruby and Distributed Storage Systems
Ruby and Distributed Storage SystemsRuby and Distributed Storage Systems
Ruby and Distributed Storage Systems
 
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
CT Software Developers Meetup: Using Docker and Vagrant Within A GitHub Pull ...
 
OrigoDB - take the red pill
OrigoDB - take the red pillOrigoDB - take the red pill
OrigoDB - take the red pill
 
cadec-2017-golang
cadec-2017-golangcadec-2017-golang
cadec-2017-golang
 
Getting Started with Docker
Getting Started with DockerGetting Started with Docker
Getting Started with Docker
 
Scala at Treasure Data
Scala at Treasure DataScala at Treasure Data
Scala at Treasure Data
 
Html5 more than just html5 v final
Html5  more than just html5 v finalHtml5  more than just html5 v final
Html5 more than just html5 v final
 
Shindig Apachecon Asia 09
Shindig Apachecon Asia 09Shindig Apachecon Asia 09
Shindig Apachecon Asia 09
 
Stackato v2
Stackato v2Stackato v2
Stackato v2
 
20120306 dublin js
20120306 dublin js20120306 dublin js
20120306 dublin js
 

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

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 

Kürzlich hochgeladen (20)

%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
Reassessing the Bedrock of Clinical Function Models: An Examination of Large ...
 

Tugrik: A new persistence option for Pharo

  • 1. Voyage-Tugrik: A new persistence option for Pharo using GemStone/S 64 Dale Henrichs GemTalk Systems ESUG 2016
  • 3. 1 Tugrik = 100 Mongo
  • 4. Voyage • Object-Document Mapper for NOSQL databases • MongoDB and UnQLite databases • Simplest API possible • 6 methods for save remove, and query • No Voyage Query language
  • 5. GemStone/S 64 • Multi-terabyte Smalltalk image • 1000’s of concurrent Smalltalk vms (gems) making updates to shared image • 1000’s of ACID transactions (concurrent image saves) per second • Generous “Free for commercial use” • Cost for the following is an email • 50Gb data base • 20 gems - 20 concurrent transactions • https://gemtalksystems.com/licensing/#CWELicensing
  • 6. GsDevKit/GLASS • A compatibility layer for GemStone/S that provides a class library that more closely resembles a classical Smalltalk environment • Smalltalk global is present • Implements a large number of classes and methods that are present in Squeak and Pharo images
  • 7. GsDevKit_home • Bash scripts for creating/starting/stopping GemStone database instances (stones) • Bash scripts for creating/starting/stopping Pharo clients • Ubuntu 12.04/14.04 and MacOs • Ubuntu 16.04 soon
  • 8. Tugrik Proof of Concept • Tugrik was created to make it possible to move a Voyage application written against MongoDB to GemStone/S • Tugrik implements the public MongoTalk Smalltalk API • Tugrik models the MongoDB collection organization • named database instance consisting of a number of named document store collections • Tugrik supports the MongoDB query filters • Tugrik passes all of the MongoTalk unit tests
  • 11. Tugrik MongoDB query filters { <field>: { $all: [ <value1> , <value2> ... ] } } { field: { $size: 2 } } { $nor: [ { price: 1.99 }, { sale: true } ] }
  • 12. Voyage-Tugrik • Voyage-Tugrik specializes Voyage-Mongo. • VOTugrikRepository is a subclass of VOMongoRepository
  • 13.
  • 14. Voyage-Tugrik Class Mapping • With Voyage-Tugrik Class Mapping, instances of root object classes are created on server instead of anonymous TugrikObject instances • Expect to share common packages between client and server
  • 15.
  • 16. Voyage Server Blocks: Unlocking Server-Side Execution • Class instances WITHOUT behavior on the server is interesting and even useful in some cases • More interesting would be to enable server-side execution https://twitter.com/joeerl/status/765793779949395968
  • 17. Voyage Server Blocks: Send Small Programs to Data • The expression is embedded in your client code • The block source is extracted, shipped to the server and evaluated. • The return value is serialized and returned to client.
  • 18. Voyage Server Blocks: non-local variables • The values of non-local variable references in block are serialized and shipped to server where the values are bound to the variables before execution
  • 19. Voyage Server Blocks: Voyage Root Objects • A root object can be passed as the value of a non- local variable and a returned root object is mapped to client-side instance
  • 20. Voyage Server Blocks: Root Object behavior • Voyage query blocks can use full range of root object behavior on server (i.e., real select blocks)
  • 21. Voyage Server Blocks: Voyage API • Full Voyage API (save, remove, select*) is implemented on server
  • 24. Future Work • Tugrik session pool and object cache refactoring • Improve/add client-side tools • Harden Tugrik client implementation • GemStone indexing support(???) • GemStone Transaction models(???) • Replication and synchronization improvements(???) • Automatically compile shared code on Server(???) • Optimizations
  • 25. Looking for Partners • Set agenda and priorities for Future Work • Contributions!!!! • My Preferences: • incremental development with active participation from users • features added based on demand • simple over complicated • thin clients over fat clients
  • 26. Path of Least Resistance • Concurrent document update issues • Large number of documents • Interest in Thin Client/Fat Server application
  • 27. Voyage-Tugrik Installation # Install GsDevKit_home git clone https://github.com/GsDevKit/GsDevKit_home.git # Setup $GS_HOME env var and put $GS_HOME/bin in path cd GsDevKit_home . bin/defHOME_PATH.env # Setup system for client/server operations (install OS prerequisites using `sudo`) installServerClient # Create tODE client createClient tode # Create Voyage stone createStone -u http://gsdevkit.github.io/GsDevKit_home/Voyage.ston -i Voyage -l Voyage Voyage 3.3.1 # Create Pharo5.0 Voyage client createClient -t pharo voyage -l -v Pharo5.0 -z $GS_HOME/shared/repos/voyage/.smalltalk-tugrik.ston # Start Voyage client and register Voyage stone as default server startClient voyage -s Voyage
  • 29. Resources • GemTalk Systems • http://gemtalksystems.com • https://gemtalksystems.com/products/gs64/versions33x/#33 • Voyage-Tugrik project • https://github.com/dalehenrich/voyage#voyage-tugrik • GsDevKit_home Installation and Documentation • http://github.com/GsDevKit/GsDevKit_home • GLASS (GemStone Open Source Community) mailing list • http://forum.world.st/GLASS-f1460844.html