Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Michael Nitschinger on Building a reactive Couc...
Search
Enterprise Java User Group Austria
September 29, 2015
Technology
160
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Michael Nitschinger on Building a reactive Couchbase driver for the JVM
Enterprise Java User Group Austria
September 29, 2015
More Decks by Enterprise Java User Group Austria
See All by Enterprise Java User Group Austria
Gerrit Grunwald on What the CRaC... SUPERFAST JVM STARTUP
ejug
2
210
Spring Framework 5.2 - Core Container Revisited
ejug
0
190
Andreas Caternberg on Jenkins Pipelines
ejug
1
800
Martin Ahrer on Continuous Delivery Infrastructure With Docker
ejug
0
170
Dirk Mahler on Software Analyse mit jQAssistant & Neo4j
ejug
1
310
Christoph Strobl on Spring Data & Hypermedia
ejug
0
170
Stefan Armbruster on Graph Modelling Antipatterns
ejug
1
140
Stefan Armbruster on Introduction into Neo4J
ejug
1
110
Michael Nitschinger on State of the art JVM networking with Netty
ejug
1
89
Other Decks in Technology
See All in Technology
LLM Internals: 언어 모델의 계보와 알고리즘 진화 (2023~2026)
inureyes
PRO
1
810
三人寄ればチューリング完全
puhitaku
4
2k
国家プロジェクトを支える「さくらONE」 大規模LLM開発におけるGPU障害を乗り越えるクラスター運用戦略
gpuunite_official
0
180
ハッカソンで入賞した話 @ Findy LT
asari194617
0
1.4k
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
AI時代のアウトプット――変わったこと、変わらないこと / Devsumi 2026 Kansai #devsumi
jnchito
0
370
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.5k
ハーレムエンジニアリング
kazuma777777
0
210
Kiro入門|仕様駆動開発で変わるAI時代の開発スタイル
cmkudo
0
270
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
20k
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.2k
【GCC2026】大規模言語モデルを活用した内製検索サービスの社内展開や業務活用
bandainamcostudios
PRO
0
370
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.5k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
The Invisible Side of Design
smashingmag
301
52k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
210
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6.1k
Ruling the World: When Life Gets Gamed
codingconduct
0
310
Product Roadmaps are Hard
iamctodd
55
12k
Chasing Engaging Ingredients in Design
codingconduct
0
280
A better future with KSS
kneath
240
18k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Transcript
A Retrospective: Couchbase on the JVM or
how we’ve built the first reactive driver and still love it Michael Nitschinger, SDK Engineer
©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<T> async Future<T> Observable<T>
©2015 Couchbase Inc. 16 Rx Semantics Event
Iterable<T> Observable<T> 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
just 18
©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!