A Retrospective: Couchbase on the JVM or how we’ve built the first reactive driver and still love it Michael Nitschinger, SDK Engineer
View Slide
©2015 Couchbase Inc. 2 Some History
©2015 Couchbase Inc. 3 Memcached
©2015 Couchbase Inc. 4 Memcached
©2015 Couchbase Inc. 5 Membase + CouchOne =
©2015 Couchbase Inc. 6 = Couchbase
©2015 Couchbase Inc. 7 Java SDK 1.x § Extends Spymemcached § Adds Config & View Capabilities § Stable & Mature § Old codebase, difficult to maintain and evolve § API grew organically
©2015 Couchbase Inc. 8 Spymemcached § Initial Work Started mid 2006 (Java 5) § No Generics § Memcached ASCII Protocol
©2015 Couchbase Inc. 9 API Inconsistencies
©2015 Couchbase Inc. 10 Reworking the API
©2015 Couchbase Inc. 11 From Key Value to Documents Key Value Views N1QL Search mcd ✔ 1.8 ✔ 2.0 ✔ ✔ 3.0 ✔ ✔ 4.0 ✔ ✔ ✔ .next ✔ ✔ ✔ ✔
©2015 Couchbase Inc. 12 Reworking the API – The Document
©2015 Couchbase Inc. 13 Reworking the API – 2.x
©2015 Couchbase Inc. 14 Reworking the API
©2015 Couchbase Inc. 15 Rx Semantics single multiple sync T Iterable async Future Observable
©2015 Couchbase Inc. 16 Rx Semantics Event Iterable Observable data retrieval T next() onNext(T) discover error throws Exception onError(Throwable) complete returns onCompleted()
©2015 Couchbase Inc. 17 Consuming Observables 17 § The Observer subscribes and receives events. § A cold Observable starts when subscribed. § onNext can be called 0..N times
©2015 Couchbase Inc. 18 RxJava: Creating Observables just18
©2015 Couchbase Inc. 19 RxJava: Creating Observables 19
©2015 Couchbase Inc. 20 RxJava: Creating Observables 20
©2015 Couchbase Inc. 21 RxJava: Creating Observables 21
©2015 Couchbase Inc. 22 RxJava: Creating Observables 22
©2015 Couchbase Inc. 23 RxJava: Creating Observables 23
©2015 Couchbase Inc. 24 RxJava: Transforming Observables 24
©2015 Couchbase Inc. 25 RxJava: Transforming Observables 25
©2015 Couchbase Inc. 26 RxJava: Transforming Observables 26
©2015 Couchbase Inc. 27 RxJava: Transforming Observables 27
©2015 Couchbase Inc. 28 RxJava: Transforming Observables 28
©2015 Couchbase Inc. 29 RxJava: Transforming Observables 29
©2015 Couchbase Inc. 30 RxJava: Transforming Observables 30
©2015 Couchbase Inc. 31 RxJava: Transforming Observables 31
©2015 Couchbase Inc. 32 RxJava: Transforming Observables 32
©2015 Couchbase Inc. 33 RxJava: Filtering Observables 33
©2015 Couchbase Inc. 34 RxJava: Filtering Observables 34
©2015 Couchbase Inc. 35 RxJava: Filtering Observables 35
©2015 Couchbase Inc. 36 RxJava: Filtering Observables 36
©2015 Couchbase Inc. 37 Simple Query 37
©2015 Couchbase Inc. 38 Parameterized Query 38 § Named Params
©2015 Couchbase Inc. 39 Parametrized Query 39 § Positional Params
©2015 Couchbase Inc. 40 Conditional Index Creation 40
©2015 Couchbase Inc. 41 Coordinated Fallback 41
©2015 Couchbase Inc. 42 Coordinated Retry: Builder 42 § Declarative API instead of complicated retryWhen
©2015 Couchbase Inc. 43 Levelling up the Architecture
©2015 Couchbase Inc. 44 Why Reactive? 44
©2015 Couchbase Inc. 45 Java != JVM
©2015 Couchbase Inc. 46 Architecture
©2015 Couchbase Inc. 47 Smart Batching
©2015 Couchbase Inc. 48 Backpressure
©2015 Couchbase Inc. 49 Netty
©2015 Couchbase Inc. 50 Netty – In the next Session!