hands-onnosql-110818092713-phpapp01 (1)

download hands-onnosql-110818092713-phpapp01 (1)

of 21

Transcript of hands-onnosql-110818092713-phpapp01 (1)

  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    1/21

    Click to edit Master subtitle style

    4/28/12

    Hands-on NoSQLMongoDB & Spring Integration

    http://automateddeveloper.blogsp

  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    2/21

    4/28/12

    Im a professional Software Engineerbased in the UK.

    Neither I, nor this presentation, are in

    any way affiliated with SpringSourceor MongoDB

    Still want more?

    http://automateddeveloper.blogspot.com http://www.thirdmindmedia.co.uk

    [email protected]

    http://automateddeveloper.blogspot.com/http://www.thirdmindmedia.co.uk/mailto:[email protected]:[email protected]://www.thirdmindmedia.co.uk/http://automateddeveloper.blogspot.com/
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    3/21

    4/28/12

    What is NoSQL?

    NoSQL means Not Only SQL

    The NoSQL umbrella covers a range ofnon-relational databases, including key-value, document , wide column store

    and graph based databases

    mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    4/21

    4/28/12

    Why NoSQL?

    NoSQLs recent increase in popularitybeing largely driven by the explosionin amount of data that is now being

    created/captured on the web

    Many leading web 2.0 sites now useNoSQL implementations:

    Facebook Cassandra (originallydeveloped in-house and later open-sourced

    Twitter Hadoop & Cassandra

    mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    5/21

    4/28/12

    In the News

    $14millionAmount raised in Series C Funding last week byCouchBase for further investment in to NoSQLsolutions(Aug2011)

    4,850%Percent increase in NoSQL jobs since

    November 2009 as reported bySimplyHired.com

    8TBAmount of data generatedeveryday in Twitter, and needs tobe supported by their NoSQLsolution (figure from 2010)

    mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    6/21

    4/28/12

    MongoDB

    An Open Source Documentoriented database

    Dynamic schemas, storingdata in JSON style documents thatallows for addition of data on the fly

    Supports indexing of documents Auto-sharding supported, providing

    full horizontal scaling

    mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    7/21

    4/28/12

    MongoDB & Spring

    Core Spring and the SpringMVC framework areenterprise standard Java

    libraries for buildingprofessional web sites

    As more and more web sites need to

    be able to handle huge amounts ofdata, there will be an increased needto be able to build professional sites

    incorporating NoSQL solutions

    mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    8/21

    4/28/12

    How Spring & MongoDBFit Together

    Servlet Engine (e.g. Tomcat)

    Controller LayerFront

    Controller(Spring

    Dispatcher)

    Controller

    Request

    /Response

    Servic

    eLayer

    DAO Layer

    Mongo

    Repository

    iRepository

    Mongo DB

    Spring enables completeconfiguration of the Controller,Service, DAO Layer and facilitatesconnection to Mongo DB

    mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    9/21

    4/28/12

    Getting Started

    This overview does not cover detailsof setting up a Spring MVC app, andwill assume a working knowledge of

    the framework

    Only the configuration to connect anexisting Spring MVC app will be

    covered in detail

    Before proceeding, install MongoDB full details are available:

    http://www.mongodb.org/display/DOCS/

    mailto:[email protected]://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    10/21

    4/28/12

    Domain Objects

    Similar to using JPA(Hibernate, etc)the first step is to model theunderlying Domain objects you want

    to use to model the applicationsunderlying meta-data.

    Using Spring Data

    we can model ourdomain using POJOsand annotations.

    http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    11/21

    4/28/12

    Domain Objects

    @Document annotation on the rootDocument object

    @Id on any member variable to beused as an identifier for the object(must be String/int/long)

    The @Id field must either be namedid, or the annotation used incombination with aMappingConverter

    http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    12/21

  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    13/21

    4/28/12

    Data Access TheRepository

    Core CRUD functionality can beachieved out-of-the-box by extendingthe MongoRepository class

    This provides save(), findAll(),findOne() and delete() methods

    that can be used on our @Document

    object (in our case Resume.java)

    http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    14/21

    4/28/12

    Data Access TheRepository

    Our Repository interface can easilybe extended to include custommethods, and the MongoTemplate

    class provides an API to createcustom queries:

    mongoTemplate.find(COLLECTION_NAME, newQuery(Criteria.where(name).is(searchTerm)), Resume.class);

    Criteria allows querying by any fieldn m in n m nt

    http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    15/21

    4/28/12

    Service Layer

    The majority of the MongoDBimplementation is abstracted to theData Access layer through the

    MongoRepository There is no real change in the

    Service or Controller Layers to the

    normal Spring MVC approach In the Service class we can just auto-

    wire the Repository Interface in to

    the class just like we would normally

    http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstart
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    16/21

    4/28/12

    Configuration

  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    17/21

    4/28/12

    Deploying toCloudFoundry

    Sign up for your freeCloudFoundry account(currently in Beta, so it may

    take time for your accountdetails) athttp://www.cloudfoundry.com/

    Install the latest STS Eclipse buildand CloudFoundry extensions (fulldetails here:

    http://blog.springsource.com/2011/04/1

    http://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.mongodb.org/display/DOCS/Quickstarthttp://www.cloudfoundry.com/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://www.cloudfoundry.com/
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    18/21

    4/28/12

    App Config forCloudFoundry

    A change to your application config isneeded to support access toCloudFoundry MongoDB service

    Notice the only change is themongoDbFactory bean is being

    instantiated with no constructor

    http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    19/21

    4/28/12

    ConfiguringCloudFoundry

    In the Servers tab, double-click the deployed applicationto open the Applications tab

    In the Services section of theApplications tab, select theAdd Service button, selectMongoDB and name theservice appropriately

    Once the MongoDB servicehas been created, click anddrag it in to the ApplicationServices tab

    http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    20/21

    4/28/12

    Thoughts

    NoSQL is growing in popularity but isnot intended to be a replacement forRDBMS

    NoSQL should be considered asanother tool in the arsenal RDBMSis not going anywhere!

    Database technology choice shouldbe driven by the requirements of theproblem Document oriented have

    specific applications

    http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/
  • 8/3/2019 hands-onnosql-110818092713-phpapp01 (1)

    21/21

    4/28/12

    Appendix

    Full source code for the application isavailable fromhttp://automateddeveloper.blogspot.co

    Feel free to drop me an email or

    come by to the blog and leave a

    comment if you have any questionsor feedback

    http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://blog.springsource.com/2011/04/13/using-cloud-foundry-from-sts/http://automateddeveloper.blogspot.com/http://automateddeveloper.blogspot.com/