Thinking Beyond RDBMS : Building Polyglot Persistence ... Beyond RDBMS : Building Polyglot...

34
OPENSHIFT Workshop PRESENTED BY Shekhar Gulati Thinking Beyond RDBMS : Building Polyglot Persistence Java Applications

Transcript of Thinking Beyond RDBMS : Building Polyglot Persistence ... Beyond RDBMS : Building Polyglot...

OPENSHIFTWorkshop

PRESENTEDBY

ShekharGulati

Thinking Beyond RDBMS : Building Polyglot Persistence

Java Applications

WHO AM I?

• Shekhar Gulati -- OpenShift Developer Evangelist

• Java / JavaScript /Python / NoSQL / Cloud Guy

• Twitter Handle : shekhargulati

• Github https://github.com/shekhargulati

• Slides http://www.slideshare.net/shekhargulati

AGENDA

WHO ARE YOU?

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

ASK QUESTIONS

http://nosql-database.org/ lists 150 databases

NOW WE HAVE CHOICES ...

● 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?

● 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

NoSQL Databases to rescue

● Schema-less

● Eventual consistent

● Scales writes and reads

● Easy to scale horizontally to add processing power and storage

● Tries to solve few practical use-cases

NoSQL TO RESCUE

NoSQL CLASSIFICATIONNOSQL CLASSIFICATION

Source http://www.slideshare.net/bscofield/nosql-codemash-2010

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

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

HYPOTHETICAL EXAMPLE

GET MORE INFO AT

APPLICATION

http://localjobs-t20.rhcloud.com/

● MongoDB – Storing Jobs data

● PostgreSQL – Storing Users data

● Redis – Cache for Users

● Java 7

– Spring framework , Spring Social, Spring MongoDB, Spring Security , Spring Redis , etc.

● OpenShift

● Git

● Twitter Bootstrap

● jQuery

● Searchify : Full-text Search as a Service

TECHNOLOGY CHOICES

● 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

Database → Database

Table → Collection

Row → Document

Index → Index

MONGODB TERMINOLOGYMONGODB TERMINOLOGY

● Easy to get running

● Open Source

● Active community

● Rich documents

● Geospatial indexing

● Writes are very fast. You can customize it using WriteConcern

WHY MONGODB?

RICH DOCUMENT

21

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

22

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

OpenShiftis

PaaS by Red Hat

Multi-language,Auto-Scaling,Self-service,

Elastic,Cloud Application

Platform

● Supports MongoDB , PostgreSQL ,and MySQL

● Multi-language support. Supports Java, Node.js, Perl, Python, PHP and Ruby

● Extensible via DIY and cartridges

● No need to learn anything new

● Open source – OpenShift Origin

● Scalable

● FREE!

WHY OPENSHIFT?

origin

Public Cloud Service

On-premise or Private Cloud Software

Open Source Project

FLAVORS OF OPENSHIFT

26

OUR STACK

27

Let's build the application

28

OPENSHIFT – GETTING STARTED

●Go tohttps://openshift.redhat.com/app/account/new

Promo code is LINUXCON2013●Create namespace●Install rhc command line

utility●Run rhc setup command

29

$ rhc create-app localjobs jbosseap mongodb-2.2 postgresql-9.2 -s

$ rhc add-cartridge http://cartreflect-claytondev.rhcloud.com/reflect?github=smarterclayton/openshift-redis-cart --app localjobs

$ rhc env set SPRING_PROFILES_ACTIVE=openshift

Lot of other tasks you can do with rhc – tail log, app management, cartridge management , ssh management , namespace management, etc. Run rhc -h for details

DEMO : LOCALJOBS APP

30

$ git rm -rf src pom.xml

$ git commit -am “delete template app”

$ git remote add upstream -m master https://github.com/shekhargulati/localjobs-demo.git

$ git pull -s recursive -X theirs upstream master

ITS All GIT

Source code https://github.com/shekhargulati/localjobs-demo

31

git push

32

Code Walkthrough

QUESTIONS?

DONE!