SlideShare a Scribd company logo
Content Mirror

Plone Content Serialization to a
Structured/Relational Database
 Who am I

 Kapil Thangavelu

     Lives in Washington, DC

        Works with Python
    
            Uses zope3, sqlalchemy, repoze, z3c
What is this talk about  

  Rethinking How to Use Plone
  Data Portability

  Developer Productivity
What its not about

Using relational database with Plone
Product vs. Framework

2003, First Plone conference NOLA, paul everitt posed the
question.
The Product Won

Plone does alot of out the box, with alot of knobs and
customization possible through the web.
More Complexity

 - Features are great if your using them.
 - Size Matters
 - Orthogonality Maters
Complexity Measured

quot;I have measured out my life in coffee spoonsquot;, The Love
song of J Alrefd Prufrock, TS. Eliot

(1m x 40r x 5d x 50w )/60 = 166h

The Plone Tax, aka time spent waiting on restarts
Simplicity is Good
- Pay for What You Use     - Developer Productivity
                           and the Learning Curve
- We can build fast,       Matters 
interactive applications    
                           - Simple things have a
                           better chance of being
                           correct
Separating Deployment

2am December 6th 2002, Amsterdam, infrae zope3 sprint
Static Deployment

CMFDeployment - Flexible Static Deployment, Filtering,
transforms, deployment skins, rendering, url
resolution.

http://plone.org/products/cmfdeployment

From Plone 1.0 - Plone 3.1
Data Deployment

Entransit, provides data deployment, with features like
rollback in a workspace based site structure.

.. requires particular site structure/layout according to
workgroups, provides advanced features like rollback of a
deployment.
Too Complex

Still too complex, needs to work out of the box.

operation and setup need to be dirt simple regardless of the
internal complexity (like a product ;-)
ContentMirror

 quot;A facility for mirroring the content of a Plone site into a
structured external datastore.quot;
 
 - automated, transparent, synchronous serialization. 
 
 - default source, Archetypes Content
 
 - default target, Relational Databases
ContentMirror

Supports Plone 2.5 - Plone   Work out of the Box
3.1
                             Strong Test Coverage
Support different
Databases ( tested with      Easy to Extend
Postgresql & Mysql )
Bootstrapping

 - Load the Archetypes
 - Transform to Database Schema
 - Create Peer Class
Schema Transformation
transform archetypes
schemas into relational tables
 
Using SQLAlchemy
 
Uses a default schema (
dublin core, relations, files,
identity )
 
each type gets its own table
with common fields factored
out
Peer Based
Each content type's class has a corresponding,
database persisted class (orm mapped), with
corresponding attributes. The peer/domain class can be
specified or autogenerated (default).
Event Based

In order to serialize content as changes are happening in
the CMS, we integrate into the application server's event
stream and subscribe to content events. The subscribers in
turn create sync operations via an operation factory.
Files

Don't copy files without need
 
Stored in the database by default
Containment

Adjacency List Model 
 
Modified Preorder Tree Traversal
Lightweight Mapper for Site Maps (use eager join option )
Relations

Archetypes              Content Mirror

Bidirectional           Relations Table

Generic Between Types   Doesn't support custom
                        attributes without
Custom Attributes       customization.
Installation   
<configure xmlns=quot;http://namespaces.zope.org/zopequot;
           xmlns:db=quot;http://namespaces.objectrealms.net/rdbquot;
           xmlns:ore=quot;http://namespaces.objectrealms.
net/mirrorquot;>
    <!-- setup a database connection -->
   <db:engine url=quot;postgres://localhost/contentmirrorquot;
             name=quot;mirror-dbquot;
             echo=quot;Truequot;/>
   <!-- associate the connection to the db structures -->
   <db:bind engine=quot;mirror-dbquot;
           metadata=quot;ore.contentmirror.schema.metadataquot; />
</configure>
Finishing Installation

# generate a schema
./bin/zopectl run Products/ContentMirror/ddl.py postgres
 
# create the database
./bin/createdb mirror-example
 
# load up the schema
./bin/psql mirror-example < db.sql
 
# bulk load the existing content
./bin/zopectl run Products/ContentMirror/bulk.py portal
Playing with Content Demo

 SQL Command Line

 Django Admin Interface
Resources

Source Code, Issue Tracker, Documentation
http://code.google.com/p/contentmirror
 
Mailing List
http://groups.google.com/group/contentmirror
 
99% unit test coverage / 48 tests / Doctests
Questions   


   ?

More Related Content

What's hot

Choice component in mule demo
Choice component in mule demoChoice component in mule demo
Choice component in mule demo
Sudha Ch
 
Mule Esb Data Weave
Mule Esb Data WeaveMule Esb Data Weave
Mule Esb Data Weave
Mohammed246
 
How to use splitter component
How to use splitter componentHow to use splitter component
How to use splitter component
RaviRajuRamaKrishna
 
Expression filter in Mule
Expression filter in MuleExpression filter in Mule
Expression filter in Mule
Mohammed246
 
Mule Message Properties Component
Mule Message Properties ComponentMule Message Properties Component
Mule Message Properties Component
Durga Prasad Kakarla
 
Dropbox connector Mule ESB Integration
Dropbox connector Mule ESB IntegrationDropbox connector Mule ESB Integration
Dropbox connector Mule ESB Integration
AnilKumar Etagowni
 
Mule ESB SMTP Connector Integration
Mule ESB SMTP Connector  IntegrationMule ESB SMTP Connector  Integration
Mule ESB SMTP Connector Integration
AnilKumar Etagowni
 
For each component in mule
For each component in muleFor each component in mule
For each component in mule
Rajkattamuri
 
MuleSoft ESB Message Enricher
MuleSoft ESB Message Enricher MuleSoft ESB Message Enricher
MuleSoft ESB Message Enricher
akashdprajapati
 
File component in mule
File component in muleFile component in mule
File component in mule
Rajkattamuri
 
Mule property placeholder
Mule property placeholderMule property placeholder
Mule property placeholder
Sashidhar Rao GDS
 
Introduction to ElephantDB
Introduction to ElephantDBIntroduction to ElephantDB
Introduction to ElephantDB
Soren Macbeth
 
Stored Procedure With In Out Parameters in Mule 3.6
 Stored Procedure With In Out Parameters in Mule 3.6 Stored Procedure With In Out Parameters in Mule 3.6
Stored Procedure With In Out Parameters in Mule 3.6
Sashidhar Rao GDS
 
Mule esb :Data Weave
Mule esb :Data WeaveMule esb :Data Weave
Mule esb :Data Weave
AnilKumar Etagowni
 
PL/SQL
PL/SQLPL/SQL
How to use smtp endpoint
How to use smtp endpointHow to use smtp endpoint
How to use smtp endpoint
sivachandra mandalapu
 
xslt in mule
xslt in mulexslt in mule
xslt in mule
Praneethchampion
 

What's hot (17)

Choice component in mule demo
Choice component in mule demoChoice component in mule demo
Choice component in mule demo
 
Mule Esb Data Weave
Mule Esb Data WeaveMule Esb Data Weave
Mule Esb Data Weave
 
How to use splitter component
How to use splitter componentHow to use splitter component
How to use splitter component
 
Expression filter in Mule
Expression filter in MuleExpression filter in Mule
Expression filter in Mule
 
Mule Message Properties Component
Mule Message Properties ComponentMule Message Properties Component
Mule Message Properties Component
 
Dropbox connector Mule ESB Integration
Dropbox connector Mule ESB IntegrationDropbox connector Mule ESB Integration
Dropbox connector Mule ESB Integration
 
Mule ESB SMTP Connector Integration
Mule ESB SMTP Connector  IntegrationMule ESB SMTP Connector  Integration
Mule ESB SMTP Connector Integration
 
For each component in mule
For each component in muleFor each component in mule
For each component in mule
 
MuleSoft ESB Message Enricher
MuleSoft ESB Message Enricher MuleSoft ESB Message Enricher
MuleSoft ESB Message Enricher
 
File component in mule
File component in muleFile component in mule
File component in mule
 
Mule property placeholder
Mule property placeholderMule property placeholder
Mule property placeholder
 
Introduction to ElephantDB
Introduction to ElephantDBIntroduction to ElephantDB
Introduction to ElephantDB
 
Stored Procedure With In Out Parameters in Mule 3.6
 Stored Procedure With In Out Parameters in Mule 3.6 Stored Procedure With In Out Parameters in Mule 3.6
Stored Procedure With In Out Parameters in Mule 3.6
 
Mule esb :Data Weave
Mule esb :Data WeaveMule esb :Data Weave
Mule esb :Data Weave
 
PL/SQL
PL/SQLPL/SQL
PL/SQL
 
How to use smtp endpoint
How to use smtp endpointHow to use smtp endpoint
How to use smtp endpoint
 
xslt in mule
xslt in mulexslt in mule
xslt in mule
 

Similar to Content Mirror

Front Range PHP NoSQL Databases
Front Range PHP NoSQL DatabasesFront Range PHP NoSQL Databases
Front Range PHP NoSQL Databases
Jon Meredith
 
Top 20 FAQs on the Autonomous Database
Top 20 FAQs on the Autonomous DatabaseTop 20 FAQs on the Autonomous Database
Top 20 FAQs on the Autonomous Database
Sandesh Rao
 
Silverlight Development & The Model-View-ViewModel Pattern
Silverlight Development & The Model-View-ViewModel PatternSilverlight Development & The Model-View-ViewModel Pattern
Silverlight Development & The Model-View-ViewModel Pattern
Derek Novavi
 
Windows Azure: Lessons From The Field
Windows Azure: Lessons From The FieldWindows Azure: Lessons From The Field
Windows Azure: Lessons From The Field
Rob Gillen
 
Dba 3+ exp qus
Dba 3+ exp qusDba 3+ exp qus
Dba 3+ exp quskrreddy21
 
Intro to-html-backbone
Intro to-html-backboneIntro to-html-backbone
Intro to-html-backbone
zonathen
 
Intro to Talend Open Studio for Data Integration
Intro to Talend Open Studio for Data IntegrationIntro to Talend Open Studio for Data Integration
Intro to Talend Open Studio for Data Integration
Philip Yurchuk
 
Tuning and optimizing webcenter spaces application white paper
Tuning and optimizing webcenter spaces application white paperTuning and optimizing webcenter spaces application white paper
Tuning and optimizing webcenter spaces application white paper
Vinay Kumar
 
HTTP cache @ PUG Rome 03-29-2011
HTTP cache @ PUG Rome 03-29-2011HTTP cache @ PUG Rome 03-29-2011
HTTP cache @ PUG Rome 03-29-2011
Alessandro Nadalin
 
51881801 informatica-faq
51881801 informatica-faq51881801 informatica-faq
51881801 informatica-faq
Venkat485
 
A winning combination: Plone as CMS and your favorite Python web framework as...
A winning combination: Plone as CMS and your favorite Python web framework as...A winning combination: Plone as CMS and your favorite Python web framework as...
A winning combination: Plone as CMS and your favorite Python web framework as...
Carlos de la Guardia
 
http://www.hfadeel.com/Blog/?p=151
http://www.hfadeel.com/Blog/?p=151http://www.hfadeel.com/Blog/?p=151
http://www.hfadeel.com/Blog/?p=151xlight
 
Cloudera Impala Internals
Cloudera Impala InternalsCloudera Impala Internals
Cloudera Impala Internals
David Groozman
 
Content delivery Plone Symposium East 2010
Content delivery Plone Symposium East 2010Content delivery Plone Symposium East 2010
Content delivery Plone Symposium East 2010
alan runyan
 

Similar to Content Mirror (20)

Front Range PHP NoSQL Databases
Front Range PHP NoSQL DatabasesFront Range PHP NoSQL Databases
Front Range PHP NoSQL Databases
 
11g R2
11g R211g R2
11g R2
 
Top 20 FAQs on the Autonomous Database
Top 20 FAQs on the Autonomous DatabaseTop 20 FAQs on the Autonomous Database
Top 20 FAQs on the Autonomous Database
 
Silverlight Development & The Model-View-ViewModel Pattern
Silverlight Development & The Model-View-ViewModel PatternSilverlight Development & The Model-View-ViewModel Pattern
Silverlight Development & The Model-View-ViewModel Pattern
 
Virtual Classroom
Virtual ClassroomVirtual Classroom
Virtual Classroom
 
Windows Azure: Lessons From The Field
Windows Azure: Lessons From The FieldWindows Azure: Lessons From The Field
Windows Azure: Lessons From The Field
 
Dba 3+ exp qus
Dba 3+ exp qusDba 3+ exp qus
Dba 3+ exp qus
 
Intro to-html-backbone
Intro to-html-backboneIntro to-html-backbone
Intro to-html-backbone
 
Intro to Talend Open Studio for Data Integration
Intro to Talend Open Studio for Data IntegrationIntro to Talend Open Studio for Data Integration
Intro to Talend Open Studio for Data Integration
 
SandhyaRani
SandhyaRaniSandhyaRani
SandhyaRani
 
Tuning and optimizing webcenter spaces application white paper
Tuning and optimizing webcenter spaces application white paperTuning and optimizing webcenter spaces application white paper
Tuning and optimizing webcenter spaces application white paper
 
HTTP cache @ PUG Rome 03-29-2011
HTTP cache @ PUG Rome 03-29-2011HTTP cache @ PUG Rome 03-29-2011
HTTP cache @ PUG Rome 03-29-2011
 
51881801 informatica-faq
51881801 informatica-faq51881801 informatica-faq
51881801 informatica-faq
 
Do you queue (updated)
Do you queue (updated)Do you queue (updated)
Do you queue (updated)
 
Migration from 8.1 to 11.3
Migration from 8.1 to 11.3Migration from 8.1 to 11.3
Migration from 8.1 to 11.3
 
A winning combination: Plone as CMS and your favorite Python web framework as...
A winning combination: Plone as CMS and your favorite Python web framework as...A winning combination: Plone as CMS and your favorite Python web framework as...
A winning combination: Plone as CMS and your favorite Python web framework as...
 
http://www.hfadeel.com/Blog/?p=151
http://www.hfadeel.com/Blog/?p=151http://www.hfadeel.com/Blog/?p=151
http://www.hfadeel.com/Blog/?p=151
 
Cloudera Impala Internals
Cloudera Impala InternalsCloudera Impala Internals
Cloudera Impala Internals
 
Content delivery Plone Symposium East 2010
Content delivery Plone Symposium East 2010Content delivery Plone Symposium East 2010
Content delivery Plone Symposium East 2010
 
HarishPoojaryCV
HarishPoojaryCVHarishPoojaryCV
HarishPoojaryCV
 

Recently uploaded

Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Albert Hoitingh
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
Dorra BARTAGUIZ
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Enhancing Performance with Globus and the Science DMZ
Enhancing Performance with Globus and the Science DMZEnhancing Performance with Globus and the Science DMZ
Enhancing Performance with Globus and the Science DMZ
Globus
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
Jen Stirrup
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
KAMESHS29
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
James Anderson
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
UiPathCommunity
 

Recently uploaded (20)

Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 
Elevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object CalisthenicsElevating Tactical DDD Patterns Through Object Calisthenics
Elevating Tactical DDD Patterns Through Object Calisthenics
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Enhancing Performance with Globus and the Science DMZ
Enhancing Performance with Globus and the Science DMZEnhancing Performance with Globus and the Science DMZ
Enhancing Performance with Globus and the Science DMZ
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
 
RESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for studentsRESUME BUILDER APPLICATION Project for students
RESUME BUILDER APPLICATION Project for students
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...
 
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...
 

Content Mirror

  • 1. Content Mirror Plone Content Serialization to a Structured/Relational Database
  • 2.  Who am I Kapil Thangavelu     Lives in Washington, DC        Works with Python                Uses zope3, sqlalchemy, repoze, z3c
  • 3. What is this talk about   Rethinking How to Use Plone Data Portability Developer Productivity
  • 4. What its not about Using relational database with Plone
  • 5. Product vs. Framework 2003, First Plone conference NOLA, paul everitt posed the question.
  • 6. The Product Won Plone does alot of out the box, with alot of knobs and customization possible through the web.
  • 7. More Complexity - Features are great if your using them. - Size Matters - Orthogonality Maters
  • 8. Complexity Measured quot;I have measured out my life in coffee spoonsquot;, The Love song of J Alrefd Prufrock, TS. Eliot (1m x 40r x 5d x 50w )/60 = 166h The Plone Tax, aka time spent waiting on restarts
  • 9. Simplicity is Good - Pay for What You Use - Developer Productivity and the Learning Curve - We can build fast, Matters  interactive applications   - Simple things have a better chance of being correct
  • 10. Separating Deployment 2am December 6th 2002, Amsterdam, infrae zope3 sprint
  • 11. Static Deployment CMFDeployment - Flexible Static Deployment, Filtering, transforms, deployment skins, rendering, url resolution. http://plone.org/products/cmfdeployment From Plone 1.0 - Plone 3.1
  • 12. Data Deployment Entransit, provides data deployment, with features like rollback in a workspace based site structure. .. requires particular site structure/layout according to workgroups, provides advanced features like rollback of a deployment.
  • 13. Too Complex Still too complex, needs to work out of the box. operation and setup need to be dirt simple regardless of the internal complexity (like a product ;-)
  • 14. ContentMirror  quot;A facility for mirroring the content of a Plone site into a structured external datastore.quot;    - automated, transparent, synchronous serialization.     - default source, Archetypes Content    - default target, Relational Databases
  • 15. ContentMirror Supports Plone 2.5 - Plone Work out of the Box 3.1   Strong Test Coverage Support different Databases ( tested with Easy to Extend Postgresql & Mysql )
  • 16. Bootstrapping  - Load the Archetypes  - Transform to Database Schema  - Create Peer Class
  • 17. Schema Transformation transform archetypes schemas into relational tables   Using SQLAlchemy   Uses a default schema ( dublin core, relations, files, identity )   each type gets its own table with common fields factored out
  • 18. Peer Based Each content type's class has a corresponding, database persisted class (orm mapped), with corresponding attributes. The peer/domain class can be specified or autogenerated (default).
  • 19. Event Based In order to serialize content as changes are happening in the CMS, we integrate into the application server's event stream and subscribe to content events. The subscribers in turn create sync operations via an operation factory.
  • 20. Files Don't copy files without need   Stored in the database by default
  • 21. Containment Adjacency List Model    Modified Preorder Tree Traversal Lightweight Mapper for Site Maps (use eager join option )
  • 22. Relations Archetypes Content Mirror Bidirectional Relations Table Generic Between Types Doesn't support custom attributes without Custom Attributes customization.
  • 23. Installation    <configure xmlns=quot;http://namespaces.zope.org/zopequot;            xmlns:db=quot;http://namespaces.objectrealms.net/rdbquot;            xmlns:ore=quot;http://namespaces.objectrealms. net/mirrorquot;>     <!-- setup a database connection -->    <db:engine url=quot;postgres://localhost/contentmirrorquot;              name=quot;mirror-dbquot;              echo=quot;Truequot;/>    <!-- associate the connection to the db structures -->    <db:bind engine=quot;mirror-dbquot;            metadata=quot;ore.contentmirror.schema.metadataquot; /> </configure>
  • 24. Finishing Installation # generate a schema ./bin/zopectl run Products/ContentMirror/ddl.py postgres   # create the database ./bin/createdb mirror-example   # load up the schema ./bin/psql mirror-example < db.sql   # bulk load the existing content ./bin/zopectl run Products/ContentMirror/bulk.py portal
  • 25. Playing with Content Demo  SQL Command Line  Django Admin Interface
  • 26. Resources Source Code, Issue Tracker, Documentation http://code.google.com/p/contentmirror   Mailing List http://groups.google.com/group/contentmirror   99% unit test coverage / 48 tests / Doctests