Slide 1

Slide 1 text

Building Polyglot Persistence Applications on OpenShift PRESENTED BY Shekhar Gulati

Slide 2

Slide 2 text

AGENDA

Slide 3

Slide 3 text

WHO AM I? • Shekhar Gulati • OpenShift Developer Evangelist at Red Hat • 8 years of software development experience • Learning JavaScript these days :) • Java / NoSQL/ Cloud • Loves to learn and try new technologies • Twitter Handle : shekhargulati • Github https://github.com/shekhargulati • Slides https://speakerdeck.com/shekhargulati

Slide 4

Slide 4 text

WHO ARE YOU?

Slide 5

Slide 5 text

In how many days/months/years JavaScript was written?

Slide 6

Slide 6 text

ASSUMPTIONS • You want to learn how to use OpenShift • You can write or read Java • You will ask questions

Slide 7

Slide 7 text

There are no stupid questions only stupid answers. So ask questions ASK QUESTIONS

Slide 8

Slide 8 text

http://nosql-database.org/ lists 150 databases Now we have choices ...

Slide 9

Slide 9 text

● Widely used and understood ● Tested in real environments ● Efficient use of storage space if data normalized properly ● Great tools support ● ACID semantics ● Incredibly flexible and powerful query language ● Great framework support WHY RDBMS?

Slide 10

Slide 10 text

● Complex object graphs does not map very well with flat tables. ● Difficult to evolve Schema with time. ● Data constraints and JOINs can be expensive at runtime. ● Difficult to scale horizontally. RDBMS LIMITATIONS

Slide 11

Slide 11 text

NoSQL Databases to rescue

Slide 12

Slide 12 text

● Schema-less ● Eventual consistent ● Fast writes ● Easy to scale horizontally to add processing power and storage ● Tries to solve few practical use-cases NoSQL TO RESCUE

Slide 13

Slide 13 text

Using multiple data storage technologies, chosen based upon the way data is being used by individual applications or components of single application. Martin Fowler http://martinfowler.com/articles/nosql-intro.pdf POLYGLOT PERSISTENCE

Slide 14

Slide 14 text

http://martinfowler.com/articles/nosql-intro.pdf HYPOTHETICAL EXAMPLE

Slide 15

Slide 15 text

GET MORE INFO AT

Slide 16

Slide 16 text

APPLICATION http://localjobs-cix.rhcloud.com/

Slide 17

Slide 17 text

● OpenShift ● MongoDB ● PostgreSQL ● Java – Spring framework , Spring Social, Spring MongoDB, Spring Security etc. ● Searchify : Full-text Search as a Service ● Git ● Twitter Bootstrap ● Backbone.js TECHNOLOGY CHOICES

Slide 18

Slide 18 text

● Document Oriented database – JSON-style documents ● Schema-less – Each document is heterogeneous, and may have completely unique structure compared to other documents. ● Fast and horizontally scalable ● Rich query language MONGODB

Slide 19

Slide 19 text

Database → Database Table → Collection Row → Document Index → Index MONGODB TERMINOLOGY MONGODB TERMINOLOGY

Slide 20

Slide 20 text

● Easy to get running ● Open Source ● Active community ● Rich documents ● Geospatial indexing ● Writes are very fast. You can customize it using WriteConcern WHY MONGODB?

Slide 21

Slide 21 text

RICH DOCUMENT

Slide 22

Slide 22 text

22  What is it for?  Find all the MongoDB jobs near me – Proximity Queries  Find all the MongoDB jobs within Colombo – Bounded Queries  Find all the MongoDB job at this location – Exact Queries ● Supports only two dimensional indexes.  You can only have one geospatial index per collection.  By default, 2d geospatial indexes assume longitude and latitude have boundaries of -180 inclusive and 180 non-inclusive (i.e. [-180, 180)) GEOSPATIAL INDEXING BASICS

Slide 23

Slide 23 text

23 1) Put your coordinates into an array { loc : [ 50 , 30 ] } //SUGGESTED OPTION { loc : { x : 50 , y : 30 } } { loc : { foo : 50 , y : 30 } } 1) { loc : { lon : 40.739037, lat: 73.992964 } } 2) Make a 2d index db.places.ensureIndex( { loc : "2d" } ) 3) If you use latitude and longitude as your coordinate system, always store longitude first. MongoDB’s 2d spherical index operators only recognize [ longitude, latitude] ordering. HOW TO MAKE IT WORK

Slide 24

Slide 24 text

24 ● When you create the index, MongoDB converts location data to binary geohash values and calculates these values using the location data and the index’s location range ● Geohashes have a precision that is determined by the number of bits in the hash. Default value 26 ● More bits allow the index to provide results with greater precision ● You can configure number of bits at index creation db.collection.ensureIndex( {: "2d"} , { bits: } ) GEOHASHES

Slide 25

Slide 25 text

25 ● MongoDB supports compound geospatial indexes. ● the field with location data is the first field db.jobs.ensureIndex( { location: "2d", skills: 1 } ) COMPOUND GEOSPATIAL INDEXES

Slide 26

Slide 26 text

OpenShift is PaaS by Red Hat Multi-language, Auto-Scaling, Self-service, Elastic, Cloud Application Platform

Slide 27

Slide 27 text

Lowers Cost Improves Developer Efficiency Scales WHY PAAS?

Slide 28

Slide 28 text

origin Public Cloud Service On- premise or Private Cloud Software Open Source Project FLAVORS OF OPENSHIFT

Slide 29

Slide 29 text

● Supports MongoDB and PostgreSQL. Also supports MySQL ● Multi-language support. Supports Java, Node.js, Perl, Python, PHP and Ruby ● Extensible via DIY ● No need to learn anything new ● Open source – OpenShift Origin ● Scalable ● FREE! WHY OPENSHIFT?

Slide 30

Slide 30 text

Developer IDE Integrations Web Browser Console Command Line Tooling REST APIs INTERACTIONS

Slide 31

Slide 31 text

● OpenShift is free-as-in-beer & free-as-in-freedom ● You get three free gears, each with 512MB memory and 1GB of disk space. ● Need more resources, just ask! ● The catch is we are in developer preview right now WHAT DO I GET?

Slide 32

Slide 32 text

32 Let's get our hands dirty

Slide 33

Slide 33 text

33 https://openshift.redhat.com/app/account/new Promo code is JUDCONBR13 CREATING OPENSHIFT ACCOUNT

Slide 34

Slide 34 text

34 ➢ Login to OpenShift web console ➢ Click on “My Account” ➢ Namespace – JUDCONBR – Unique per user CREATING NAMESPACE

Slide 35

Slide 35 text

35 Some terminology for today 1. Application – your web code and any data store. Has to be on 1 or more gears 2. Gear – is like a server. It can have only 1 language for the web programming. 3. Cartridge – it adds a language, a data store, or other functionality 4. Git – used for version control and managing code between server and your development machine 5. Ssh – command line tool to connect to your gear

Slide 36

Slide 36 text

36 Install Ruby 1.8.7 or greater Install Git Install rhc OpenShift gem Refer to documentation INSTALLING CLIENT TOOLS

Slide 37

Slide 37 text

37 rhc setup -l -> creates namespace -> upload ssh keys SETUP OPENSHIFT ENVIRONMENT

Slide 38

Slide 38 text

38 1. Git add . (means add all new files as being tracked in the local repository) 2. Git commit –am “your message” (means commit all my changes to the local repository with this message) 3. Git push (means push from your local repository to the repository on your OpenShift gear) 3 COMMANDS YOU SHOULD KNOW

Slide 39

Slide 39 text

39 $ rhc app create localjobs jbosseap mongodb-2.2 postgresql-8.4 -s $ git remote add upstream -m master https://github.com/shekhargulati/localjobs- scalable.git $ git pull -s recursive -X theirs upstream master $ rhc app show -a localjobs $ scp jobs-data.json :app-root/data $ rhc app ssh -a localjobs $ cd app-root/data $ mongoimport -d localjobs -c jobs --file jobs-data.json -u $OPENSHIFT_MONGODB_DB_USERNAME -p $OPENSHIFT_MONGODB_DB_PASSWORD -h $OPENSHIFT_MONGODB_DB_HOST -port $OPENSHIFT_MONGODB_DB_PORT $ mongo $ db.jobs.ensureIndex({“location”:”2d”}) DEMO : LOCALJOBS APP

Slide 40

Slide 40 text

40 git push

Slide 41

Slide 41 text

41 Code Walkthrough

Slide 42

Slide 42 text

QUESTIONS?

Slide 43

Slide 43 text

DONE!