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

Next Generation MongoDB with Spring: Sessions, Streams, Transactions (WJax-2018)

Next Generation MongoDB with Spring: Sessions, Streams, Transactions (WJax-2018)

Christoph Strobl

November 07, 2018
Tweet

More Decks by Christoph Strobl

Other Decks in Programming

Transcript

  1. Next Generation mongoDB
    Christoph Strobl, Pivotal Software Inc.
    @stroblchristoph
    Sessions - Streams - Transactions

    View Slide

  2. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    Next Generation MongoDB
    Christoph Strobl
    Software Engineer, Spring Data
    Sessions - Streams - Transactions

    View Slide

  3. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    Christoph Strobl
    Fantasy Book Addict Workout Enthusiast
    Next Generation MongoDB
    Sessions - Streams - Transactions
    image: https://wall.alphacoders.com/

    License: PD

    View Slide

  4. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    image: https://wall.alphacoders.com/

    License: PD

    View Slide

  5. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    10,30 €
    incl. VAT

    Shipping information
    5
    $ http GET :8080/book/f430cb49
    HTTP/1.1 200 OK
    Content-Length: 177
    Content-Type: application/json;charset=UTF-8
    {
    "authors": [
    "Peter V. Brett"
    ],
    "id": "f430cb49",
    "language": "English",
    "pages": 880,
    "publishDate": "2017-28-09",
    "publisherId": "Harper Collins Publishers",
    "stock": 3,
    "title": "The Core"
    }

    View Slide

  6. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    Cart
    Cart Register Shipping Payment Confirmation
    3 copies available
    The Core
    6
    only 2 more copies available
    {
    _id: "f430cb49",
    title: "The Core",
    author: [ "Peter V. Brett" ],
    published_date: ISODate("2017-09-28"),
    pages: 880,
    language: "English",
    publisher_id: "Harper Collins",
    available: 2
    checkout : [
    {by : "cstrobl", date : "2018-
    ]
    }
    $ http POST :8080/book/f430cb49/order
    HTTP/1.1 200 OK
    Content-Length: 267
    Content-Type: application/json;charset=UTF-8
    {
    "books": [ {
    "authors": [
    "Peter V. Brett"
    ],
    "id": "f430cb49",
    "language": "English",
    "pages": 880,
    "publishDate": "2017-28-09",
    "publisherId": "Harper Collins Publishers",
    "title": "The Core"
    } ],
    "customer": "cstrobl",
    "date": "2018-09-04"
    }

    View Slide

  7. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    Cart
    Cart Register Shipping Payment Confirmation
    3 copies available
    The Core
    $ http POST :8080/book/f430cb49/order
    HTTP/1.1 200 OK
    Content-Length: 267
    Content-Type: application/json;charset=UTF-8
    {
    "books": [ {
    "authors": [
    "Peter V. Brett"
    ],
    "id": "f430cb49",
    "language": "English",
    "pages": 880,
    "publishDate": "2017-28-09",
    "publisherId": "Harper Collins Publishers",
    "title": "The Core"
    } ],
    "customer": "cstrobl",
    "date": "2018-09-04"
    }
    7
    only 2 more copies available
    {
    "_id" : "5b8ee10e",
    "by" : "cstrobl",
    "date" : ISODate("2018-09-04"),
    "books" : [
    {
    "$ref" : "books",
    "$id" : "f430cb49"
    }
    ]
    }
    {
    _id: "f430cb49",
    title: "The Core",
    author: [ "Peter V. Brett" ],
    published_date: ISODate("2017-09-28"),
    pages: 880,
    language: "English",
    publisher_id: "Harper Collins",
    available: 2
    }

    View Slide

  8. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    Multi Document Transactions
    image: http://www.intestasuimotori.it

    License: CC

    View Slide

  9. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    Requirements
    9
    // start transaction
    // update first collection
    // query second collection
    // update third collection
    // commit transaction
    • ACID
    • Conversational, multi-statement

    View Slide

  10. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    How To Get From There to Here
    10
    Wired Tiger
    MVCC
    3.0 - 3.4

    View Slide

  11. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    How To Get From There to Here
    11
    Logical Sessions
    3.6
    Retryable Writes

    View Slide

  12. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    How To Get From There to Here
    12
    update : { lsid : 1, txnNum : 1}, updates: […]
    update : { lsid : 1, txnNum : 1}, updates: […]
    { ok : 1}
    Retryable Writes
    IO Exception

    View Slide

  13. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    How To Get From There to Here
    13
    Replica Set Transactions
    Sharded Cluster Transactions
    4.0
    4.2 (under development)

    View Slide

  14. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://github.com/christophstrobl/mongodb-bookstore
    image: https://wall.alphacoders.com/

    License: PD

    View Slide

  15. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    Known issues…
    15
    try(ClientSession session = client.startSession()) {
    session.startTransaction();
    Long result = collection.count(session, Filters.gt("available", 0));
    Bson nearSphereFilter = Filters.nearSphere("location", new Point(

    new Position(-73.99D, 40.73D)), 0.313D);
    Long result = collection.countDocuments(nearSphereFilter);
    Cannot run 'count' in a multi-document 

    transaction.
    Error 50851
    '$geoNear, $near, and $nearSphere

    are not allowed in this context'
    Error 2
    Long result = collection.countDocuments(session, Filters.gt("available", 0));
    Bson nearSphereFilter = Filters.geoWithinCenterSphere("location", -73.99D, 40.73D, 0.313D);
    Long result = collection.countDocuments(nearSphereFilter);

    View Slide

  16. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    Reactive Multi Document Transactions
    16
    return mongoOperations.inTransaction().execute(action "-> {
    return action.save(order)
    .flatMap(order "-> {
    return action.update(Book.class)
    .matching(query(
    where("id").is(book.id)
    .and("available").gt(0)))
    .apply(new Update().inc("available", -1)).first()
    .flatMap(result "-> {
    if (result.getModifiedCount() "== 0) {
    throw new BookSoldOutException(book);
    }
    return Mono.just(order);
    });
    });
    }).next();
    Flux.usingWhen(() "-> session,
    ClientSession"::commitTransaction,
    ClientSession"::abortTransaction,
    session "-> … )
    @Transactional
    public Mono insertDocuments()
    @Deprecated
    public ReactiveSessionScoped inTransaction()

    View Slide

  17. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    https://pixnio.com/de/landschaften/blatt-blatter/grunes-blatt-flora-natur-baum-sommer-garten

    License: PD
    Summary & Outlook
    17
    Transactions are multi-document, multi-collection, conversational.
    They fit in well to existing Spring transaction paradigms.


    View Slide

  18. > Stay Connected.
    MongoDB 4.0 & SpringData Lovelace Releases are out now!

    Get started with Spring Boot 2.1.M4.
    https://www.mongodb.com/transactions
    http://projects.spring.io/spring-data-mongodb/

    View Slide

  19. Unless otherwise indicated, these slides are © 2013-2018 Pivotal Software, Inc.
    and licensed under a Creative Commons Attribution-NonCommercial license:
    http://creativecommons.org/licenses/by-nc/3.0/
    Safe Harbor Statement
    The following is intended to outline the general direction of Pivotal's offerings. It is intended for information purposes
    only and may not be incorporated into any contract. Any information regarding pre-release of Pivotal offerings,
    future updates or other planned modifications is subject to ongoing evaluation by Pivotal and is subject to change.
    This information is provided without warranty or any kind, express or implied, and is not a commitment to deliver any
    material, code, or functionality, and should not be relied upon in making purchasing decisions regarding Pivotal's
    offerings. These purchasing decisions should only be based on features currently available. The development,
    release, and timing of any features or functionality described for Pivotal's offerings in this presentation remain at the
    sole discretion of Pivotal. Pivotal has no obligation to update forward looking information in this presentation.
    19

    View Slide