Thinking Beyond RDBMS : OPEN SHIFT Building Polyglot Persistence Java Applications Workshop PRESENTED BY Shekhar Gulati
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?
ASK QUESTIONS There are no stupid questions only stupid answers. So ask questions
NOW WE HAVE CHOICES ... http://nosql-database.org/ lists 150 databases
WHY RDBMS? ● 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
RDBMS LIMITATIONS ● 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.
NoSQL Databases to rescue
NoSQL 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 CLASSIFICATION NoSQL CLASSIFICATION Source http://www.slideshare.net/bscofield/nosql-codemash-2010
POLYGLOT PERSISTENCE 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
HYPOTHETICAL EXAMPLE http://martinfowler.com/articles/nosql-intro.pdf
GET MORE INFO AT
APPLICATION http://localjobs-t20.rhcloud.com/
TECHNOLOGY CHOICES ● 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
MONGODB ● 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 TERMINOLOGY MONGODB TERMINOLOGY Database → Database Table → Collection Row → Document Index → Index
WHY MONGODB? ● Easy to get running ● Open Source ● Active community ● Rich documents ● Geospatial indexing ● Writes are very fast. You can customize it using WriteConcern
RICH DOCUMENT
GEOSPATIAL INDEXING BASICS 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)) 21
HOW TO MAKE IT WORK 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. 22
OpenShift is PaaS by Red Hat Multi-language, Auto-Scaling, Self-service, Elastic, Cloud Application Platform
WHY OPENSHIFT? ● 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!
FLAVORS OF OPENSHIFT Open Source origin Project On- Public premise Cloud or Private Service Cloud Software
OUR STACK 26
Let's build the application 27
OPENSHIFT – GETTING STARTED ● Go to https://openshift.redhat.com/app/account/new Promo code is LINUXCON2013 ● Create namespace ● Install rhc command line utility ● Run rhc setup command 28
DEMO : LOCALJOBS APP $ 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 29
ITS All GIT $ 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 Source code https://github.com/shekhargulati/localjobs-demo 30
git push 31
Code Walkthrough 32
QUESTIONS?
DONE!
Recommend
More recommend