Upgrade to Pro — share decks privately, control downloads, hide ads and more …

JavaOne India 2013 Thinking Beyond RDBMS -- Bui...

JavaOne India 2013 Thinking Beyond RDBMS -- Building Polyglot Persistence Java Applications

JavaOne India 2013 Thinking Beyond RDBMS -- Building Polyglot Persistence Java Applications

Shekhar Gulati

May 08, 2013
Tweet

More Decks by Shekhar Gulati

Other Decks in Technology

Transcript

  1. OPENSHIFT Workshop PRESENTED BY Shekhar Gulati Thinking Beyond RDBMS :

    Building Polyglot Persistence Java Applications
  2. WHO AM I? • Shekhar Gulati -- OpenShift Developer Evangelist

    • Java / NoSQL / Cloud Guy • Learning JavaScript these days ;) • Twitter Handle : shekhargulati • Facebook : shekhar.gulati.1 • Github https://github.com/shekhargulati • Slides https://speakerdeck.com/shekhargulati
  3. • 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?
  4. • 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
  5. • 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
  6. 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
  7. • OpenShift • MongoDB • MySQL • Java – Spring

    framework , Spring Social, Spring MongoDB, Spring Security etc. • Searchify : Full-text Search as a Service • Git • Twitter Bootstrap • Backbone.js TECHNOLOGY CHOICES
  8. • 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
  9. Database → Database Table → Collection Row → Document Index

    → Index MONGODB TERMINOLOGY MONGODB TERMINOLOGY
  10. • Easy to get running • Open Source • Active

    community • Rich documents • Geospatial indexing • Writes are very fast. You can customize it using WriteConcern WHY MONGODB?
  11. 20  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
  12. 21 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
  13. • 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?
  14. 28 ➢ Login to OpenShift web console ➢ Click on

    “My Account” ➢ Namespace – javaonein – Unique per user CREATING NAMESPACE
  15. 29 Install Ruby 1.8.7 or greater Install Git Install rhc

    OpenShift gem Refer to documentation INSTALLING CLIENT TOOLS
  16. 30 $ rhc app create localjobs jbosseap mongodb-2.2 mysql-5.1 -s

    OR 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 RHC is only required for infrastructure tasks rhc app create localjobs jbosseap rhc cartridge add mongodb-2.2 --app localjobs rhc cartridge add mysql-5.1 --app localjobs
  17. 31 $ git rm -rf src pom.xml $ git commit

    -am “delete template app” $ git remote add upstream -m master git://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
  18. 32 $ rhc app show -a localjobs $ scp jobs-data.json

    <ssh url>: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 LOADING DATA IN MONGODB