SlideShare uma empresa Scribd logo
1 de 75
Baixar para ler offline
RowKey design in HBase

Akka Persistence Plugin	

Konrad 'ktoso' Malawski	

GeeCON 2014 @ Kraków, PL
Konrad `@ktosopl` Malawski
Konrad `@ktosopl` Malawski
hAkker @
Konrad `@ktosopl` Malawski
typesafe.com	

geecon.org	

Java.pl / KrakowScala.pl	

sckrk.com / meetup.com/Paper-Cup @ London	

GDGKrakow.pl 	

meetup.com/Lambda-Lounge-Krakow
hAkker @
PersistentActor
Akka	
  Persistence	
  ScalaDays	
  2014
PersistentActor
Compared to “Good ol’ CRUD Model”
state
“Mutable Record”
state
=
apply(es)
“Series of Events”
super quick domain modelling!
sealed trait Command!
case class GiveMe(geeCoins: Int) extends Command!
case class TakeMy(geeCoins: Int) extends Command
Commands - what others “tell” us; not persisted
case class Wallet(geeCoins: Int) {!
def updated(diff: Int) = State(geeCoins + diff)!
}
State - reflection of a series of events
sealed trait Event!
case class BalanceChangedBy(geeCoins: Int) extends Event!
Events - reflect effects, past tense; persisted
var state = S0
!
persistenceId = “a”
!
PersistentActor
Command
!
!
Journal
PersistentActor
var state = S0
!
persistenceId = “a”
!
!
!
Journal
Generate
Events
PersistentActor
var state = S0
!
persistenceId = “a”
!
!
!
Journal
Generate
Events
E1
PersistentActor
ACK
“persisted”
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
PersistentActor
“Apply”
event
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
E1
PersistentActor
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
E1
Okey!
PersistentActor
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
E1
Okey!
PersistentActor
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
E1
Ok, he got my $.
PersistentActor
class BitCoinWallet extends PersistentActor {!
!
var state = Wallet(coins = 0)!
!
def updateState(e: Event): State = {!
case BalanceChangedBy(coins) => state.updatedWith(coins)!
}!
!
// API:!
!
def receiveCommand = ??? // TODO!
!
def receiveRecover = ??? // TODO!
!
}!
persist(e) { e => }
PersistentActor
def receiveCommand = {!
!
case TakeMy(coins) =>!
persist(BalanceChangedBy(coins)) { changed =>!
state = updateState(changed) !
}!
!
!
!
!
!
!
}
async callback
persist(){} - Ordering guarantees
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
C1
C2
C3
!
!
Journal
E1
var state = S0
!
persistenceId = “a”
!
C1
C2
C3
Commands get “stashed” until
processing C1’s events are acted upon.
persist(){} - Ordering guarantees
!
!
Journal
var state = S0
!
persistenceId = “a”
!
C1
C2
C3 E1
E2
E2E1
events get
applied in-order
persist(){} - Ordering guarantees
C2
!
!
Journal
var state = S0
!
persistenceId = “a”
!
C3 E1 E2
E2E1
and the cycle
repeats
persist(){} - Ordering guarantees
Recovery
Akka	
  Persistence	
  ScalaDays
Eventsourced, recovery
/** MUST NOT SIDE-EFFECT! */!
def receiveRecover = {!
case replayedEvent: Event => !
state = updateState(replayedEvent)!
}
re-using updateState, as seen in
receiveCommand
Akka	
  Persistence	
  ScalaDays
Snapshots
Snapshots
(in SnapshotStore)
Eventsourced, snapshots
def receiveCommand = {!
case command: Command =>!
saveSnapshot(state) // async!!
}
/** MUST NOT SIDE-EFFECT! */!
def receiveRecover = {!
case SnapshotOffer(meta, snapshot: State) => !
this.state = state!
!
case replayedEvent: Event => !
updateState(replayedEvent)!
}
snapshot!?
how?
…sum of states…
Snapshots
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
state until [E8]
Snapshots
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
!
!
Snapshot Store
snapshot!
state until [E8]
Snapshots
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
crash!
!
!
Snapshot Store
snapshot!
S8
Snapshots
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
crash!
!
!
Snapshot Store
S8
“bring me up-to-date!”
Snapshots
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
restart!
replay!
!
!
Snapshot Store
S8
“bring me up-to-date!”
Snapshots
restart!
replay!
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
!
!
Snapshot Store
S8
state until [E8]
Snapshots
restart!
replay!
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
!
!
Snapshot Store
S8
state until [E8]
Snapshots
S8
!
!
Journal
E1 E2 E3 E4
E5 E6 E7 E8
We could delete these!
!
!
Snapshot Store
S8
trait MySummer extends Processor {!
var nums: List[Int]!
var total: Int!
!
def receive = {!
case "snap" => saveSnapshot(total)!
case SaveSnapshotSuccess(metadata) => // ...!
case SaveSnapshotFailure(metadata, reason) => // ...!
}!
}!
Snapshots, save
Async!
Snapshot Recovery
class Counter extends Processor {!
var total = 0!
!
def receive = {!
case SnapshotOffer(metadata, snap: Int) => !
total = snap!
!
case Persistent(payload, sequenceNr) => // ...!
}!
}
Persistence Plugins
Akka Persistence TCK
class JournalTCKSpec extends JournalSpec {!
lazy val config = ConfigFactory.parseString(“").!
withFallback(ConfigFactory.load())!
}!
!
!
!
!
class SnapshotStoreTCKSpec extends SnapshotStoreSpec {!
lazy val config = ConfigFactory.parseString(“").!
! ! ! ! ! ! ! ! ! ! withFallback(ConfigFactory.load())!
}!
Journal Plugin API
!
def asyncWriteMessages(!
messages: immutable.Seq[PersistentRepr]!
): Future[Unit]!
!
def asyncDeleteMessagesTo(!
persistenceId: String, !
toSequenceNr: Long, !
permanent: Boolean!
): Future[Unit]!
!
@deprecated("writeConfirmations will be removed.", since = "2.3.4")!
def asyncWriteConfirmations(!
confirmations: immutable.Seq[PersistentConfirmation]!
): Future[Unit]!
!
@deprecated("asyncDeleteMessages will be removed.", since = "2.3.4")!
def asyncDeleteMessages(!
messageIds: immutable.Seq[PersistentId], !
permanent: Boolean!
): Future[Unit]!
Optimising writes
Hbase table data layout
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
Hbase table data layout
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
HBase regions
Hbase table data layout
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
HBase regions
(lexicographical order)
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
HOT region
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
HOT region
Optimising writes
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
id = “b”
impossible to
spread load!
Optimising writes
hot-spotting
Optimising writes
hot-spotting
utilise
entire cluster
Optimising writes
001-a-0001,

001-b-0001,

001-a-0051
id = “a”
002-a-0002,

002-b-0002,

002-a-00052
003-a-0003,

003-b-0003,

003-a-0053
049-a-0049,

049-b-0049,

049-a-0099
…
“partition” seeds
[HMaster]
Optimising writes
001-a-0001,

001-b-0001,

001-a-0051
id = “a”
002-a-0002,

002-b-0002,

002-a-00052
003-a-0003,

003-b-0003,

003-a-0053
049-a-0049,

049-b-0049,

049-a-0099
…
“partition” seeds
[HMaster]
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
[HMaster]
Write load spread to cluster!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
Writes to different regions! [HMaster]
Optimising writes
Optimising reads
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
replay!
Optimising reads
a-0001,a-0002,a-0003 b-0001,b-0002,b-0003
id = “a”
replay!
Ordered, batch read,
super efficient!!!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising writes
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
this is madness!
replay!
Optimising reads
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
async!
replay!
+ re-sequence
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
async!
small
batches
replay!
+ re-sequence
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
(to seqNr = 2)
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
replay!
(to seqNr = 2)
Optimising recovery
001-a-0001,

001-a-0051
id = “a”
002-a-0002,

002-a-00052
003-a-0003,

003-a-0053
049-a-0049,

049-a-0099…
for short recovery = no need
to check all servers!
replay!
(to seqNr = 2)
Akka	
  Persistence	
  ScalaDays	
  2014
Akka Persistence Plugins
• Journals / Snapshot Stores (http://akka.io/community/)
• Cassandra
• HBase 
• Kafka 
• DynamoDB
• MongoDB
• shared LevelDB journal for testing
Akka	
  Persistence	
  ScalaDays	
  2014
Links
• http://akka.io
• https://groups.google.com/forum/#!forum/akka-user
!
• https://github.com/ktoso/akka-persistence-hbase
!
• http://www.slideshare.net/alexbaranau/intro-to-hbase-
internals-schema-design-for-hbase-users
• http://blog.sematext.com/2012/04/09/hbasewd-avoid-
regionserver-hotspotting-despite-writing-records-with-
sequential-keys/
• https://github.com/OpenTSDB/asynchbase
©Typesafe 2014 – All Rights Reserved

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese2014 akka-streams-tokyo-japanese
2014 akka-streams-tokyo-japanese
 
A dive into akka streams: from the basics to a real-world scenario
A dive into akka streams: from the basics to a real-world scenarioA dive into akka streams: from the basics to a real-world scenario
A dive into akka streams: from the basics to a real-world scenario
 
Akka streams - Umeå java usergroup
Akka streams - Umeå java usergroupAkka streams - Umeå java usergroup
Akka streams - Umeå java usergroup
 
Resilient Applications with Akka Persistence - Scaladays 2014
Resilient Applications with Akka Persistence - Scaladays 2014Resilient Applications with Akka Persistence - Scaladays 2014
Resilient Applications with Akka Persistence - Scaladays 2014
 
MongoSF - mongodb @ foursquare
MongoSF - mongodb @ foursquareMongoSF - mongodb @ foursquare
MongoSF - mongodb @ foursquare
 
Reactive stream processing using Akka streams
Reactive stream processing using Akka streams Reactive stream processing using Akka streams
Reactive stream processing using Akka streams
 
whats new in java 8
whats new in java 8 whats new in java 8
whats new in java 8
 
Async - react, don't wait - PingConf
Async - react, don't wait - PingConfAsync - react, don't wait - PingConf
Async - react, don't wait - PingConf
 
Spark stream - Kafka
Spark stream - Kafka Spark stream - Kafka
Spark stream - Kafka
 
The Why and How of Scala at Twitter
The Why and How of Scala at TwitterThe Why and How of Scala at Twitter
The Why and How of Scala at Twitter
 
Reactive programming on Android
Reactive programming on AndroidReactive programming on Android
Reactive programming on Android
 
Reactive streams processing using Akka Streams
Reactive streams processing using Akka StreamsReactive streams processing using Akka Streams
Reactive streams processing using Akka Streams
 
Next generation actors with Akka
Next generation actors with AkkaNext generation actors with Akka
Next generation actors with Akka
 
Laying down the smack on your data pipelines
Laying down the smack on your data pipelinesLaying down the smack on your data pipelines
Laying down the smack on your data pipelines
 
Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"Distributed Consensus A.K.A. "What do we eat for lunch?"
Distributed Consensus A.K.A. "What do we eat for lunch?"
 
Buiilding reactive distributed systems with Akka
Buiilding reactive distributed systems with AkkaBuiilding reactive distributed systems with Akka
Buiilding reactive distributed systems with Akka
 
Building reactive distributed systems with Akka
Building reactive distributed systems with Akka Building reactive distributed systems with Akka
Building reactive distributed systems with Akka
 
Building Distributed Systems in Scala
Building Distributed Systems in ScalaBuilding Distributed Systems in Scala
Building Distributed Systems in Scala
 
Networks and Types - the Future of Akka @ ScalaDays NYC 2018
Networks and Types - the Future of Akka @ ScalaDays NYC 2018Networks and Types - the Future of Akka @ ScalaDays NYC 2018
Networks and Types - the Future of Akka @ ScalaDays NYC 2018
 
Akka Actor presentation
Akka Actor presentationAkka Actor presentation
Akka Actor presentation
 

Destaque

Akka Typed — between Session Types and the Actor Model
Akka Typed — between Session Types and the Actor ModelAkka Typed — between Session Types and the Actor Model
Akka Typed — between Session Types and the Actor Model
Roland Kuhn
 
Ebay legacy-code-retreat
Ebay legacy-code-retreatEbay legacy-code-retreat
Ebay legacy-code-retreat
Konrad Malawski
 

Destaque (20)

Akka Typed — between Session Types and the Actor Model
Akka Typed — between Session Types and the Actor ModelAkka Typed — between Session Types and the Actor Model
Akka Typed — between Session Types and the Actor Model
 
Open soucerers - jak zacząć swoją przygodę z open source
Open soucerers - jak zacząć swoją przygodę z open sourceOpen soucerers - jak zacząć swoją przygodę z open source
Open soucerers - jak zacząć swoją przygodę z open source
 
JavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good PartsJavaOne 2013: Java 8 - The Good Parts
JavaOne 2013: Java 8 - The Good Parts
 
Scalding - the not-so-basics @ ScalaDays 2014
Scalding - the not-so-basics @ ScalaDays 2014Scalding - the not-so-basics @ ScalaDays 2014
Scalding - the not-so-basics @ ScalaDays 2014
 
Need for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applicationsNeed for Async: Hot pursuit for scalable applications
Need for Async: Hot pursuit for scalable applications
 
Ebay legacy-code-retreat
Ebay legacy-code-retreatEbay legacy-code-retreat
Ebay legacy-code-retreat
 
Android at-xsolve
Android at-xsolveAndroid at-xsolve
Android at-xsolve
 
TDD drogą do oświecenia w Scali
TDD drogą do oświecenia w ScaliTDD drogą do oświecenia w Scali
TDD drogą do oświecenia w Scali
 
Git tak po prostu (SFI version)
Git tak po prostu (SFI version)Git tak po prostu (SFI version)
Git tak po prostu (SFI version)
 
Scala dsls-dissecting-and-implementing-rogue
Scala dsls-dissecting-and-implementing-rogueScala dsls-dissecting-and-implementing-rogue
Scala dsls-dissecting-and-implementing-rogue
 
BDD in Action - Devoxx 2014
BDD in Action - Devoxx 2014BDD in Action - Devoxx 2014
BDD in Action - Devoxx 2014
 
Android my Scala @ JFokus 2013
Android my Scala @ JFokus 2013Android my Scala @ JFokus 2013
Android my Scala @ JFokus 2013
 
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
100th SCKRK Meeting - best software engineering papers of 5 years of SCKRK
 
Disrupt 2 Grow - Devoxx 2013
Disrupt 2 Grow - Devoxx 2013Disrupt 2 Grow - Devoxx 2013
Disrupt 2 Grow - Devoxx 2013
 
The things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and AkkaThe things we don't see – stories of Software, Scala and Akka
The things we don't see – stories of Software, Scala and Akka
 
KrakDroid: Scala on Android
KrakDroid: Scala on AndroidKrakDroid: Scala on Android
KrakDroid: Scala on Android
 
Scalding - Hadoop Word Count in LESS than 70 lines of code
Scalding - Hadoop Word Count in LESS than 70 lines of codeScalding - Hadoop Word Count in LESS than 70 lines of code
Scalding - Hadoop Word Count in LESS than 70 lines of code
 
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
[Japanese] How Reactive Streams and Akka Streams change the JVM Ecosystem @ R...
 
The Need for Async @ ScalaWorld
The Need for Async @ ScalaWorldThe Need for Async @ ScalaWorld
The Need for Async @ ScalaWorld
 
Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016Akka Streams in Action @ ScalaDays Berlin 2016
Akka Streams in Action @ ScalaDays Berlin 2016
 

Semelhante a HBase RowKey design for Akka Persistence

HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
Remy Sharp
 

Semelhante a HBase RowKey design for Akka Persistence (20)

London Cassandra Meetup 10/23: Apache Cassandra at British Gas Connected Home...
London Cassandra Meetup 10/23: Apache Cassandra at British Gas Connected Home...London Cassandra Meetup 10/23: Apache Cassandra at British Gas Connected Home...
London Cassandra Meetup 10/23: Apache Cassandra at British Gas Connected Home...
 
JS everywhere 2011
JS everywhere 2011JS everywhere 2011
JS everywhere 2011
 
Riak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup GroupRiak at The NYC Cloud Computing Meetup Group
Riak at The NYC Cloud Computing Meetup Group
 
Building a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and SparkBuilding a High-Performance Database with Scala, Akka, and Spark
Building a High-Performance Database with Scala, Akka, and Spark
 
Swift - One step forward from Obj-C
Swift -  One step forward from Obj-CSwift -  One step forward from Obj-C
Swift - One step forward from Obj-C
 
Avoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.jsAvoiding Callback Hell with Async.js
Avoiding Callback Hell with Async.js
 
Spark streaming with kafka
Spark streaming with kafkaSpark streaming with kafka
Spark streaming with kafka
 
Server Side Swift: Vapor
Server Side Swift: VaporServer Side Swift: Vapor
Server Side Swift: Vapor
 
Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016Async Redux Actions With RxJS - React Rally 2016
Async Redux Actions With RxJS - React Rally 2016
 
JVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in KotlinJVMLS 2016. Coroutines in Kotlin
JVMLS 2016. Coroutines in Kotlin
 
Kotlin Coroutines and Rx
Kotlin Coroutines and RxKotlin Coroutines and Rx
Kotlin Coroutines and Rx
 
Play vs Rails
Play vs RailsPlay vs Rails
Play vs Rails
 
Intro to ReactJS
Intro to ReactJSIntro to ReactJS
Intro to ReactJS
 
HTML5: huh, what is it good for?
HTML5: huh, what is it good for?HTML5: huh, what is it good for?
HTML5: huh, what is it good for?
 
Device Simulator with Akka
Device Simulator with AkkaDevice Simulator with Akka
Device Simulator with Akka
 
Implementing Server Side Data Synchronization for Mobile Apps
Implementing Server Side Data Synchronization for Mobile AppsImplementing Server Side Data Synchronization for Mobile Apps
Implementing Server Side Data Synchronization for Mobile Apps
 
Coroutines in Kotlin. In-depth review
Coroutines in Kotlin. In-depth reviewCoroutines in Kotlin. In-depth review
Coroutines in Kotlin. In-depth review
 
Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.Coroutines in Kotlin. UA Mobile 2017.
Coroutines in Kotlin. UA Mobile 2017.
 
Event-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander MakEvent-sourced architectures with Akka - Sander Mak
Event-sourced architectures with Akka - Sander Mak
 
Event-sourced architectures with Akka
Event-sourced architectures with AkkaEvent-sourced architectures with Akka
Event-sourced architectures with Akka
 

Mais de Konrad Malawski

Reactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka StreamsReactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka Streams
Konrad Malawski
 

Mais de Konrad Malawski (14)

Akka Typed (quick talk) - JFokus 2018
Akka Typed (quick talk) - JFokus 2018Akka Typed (quick talk) - JFokus 2018
Akka Typed (quick talk) - JFokus 2018
 
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in'tScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
ScalaSwarm 2017 Keynote: Tough this be madness yet theres method in't
 
State of Akka 2017 - The best is yet to come
State of Akka 2017 - The best is yet to comeState of Akka 2017 - The best is yet to come
State of Akka 2017 - The best is yet to come
 
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYCBuilding a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
Building a Reactive System with Akka - Workshop @ O'Reilly SAConf NYC
 
Akka-chan's Survival Guide for the Streaming World
Akka-chan's Survival Guide for the Streaming WorldAkka-chan's Survival Guide for the Streaming World
Akka-chan's Survival Guide for the Streaming World
 
Reactive integrations with Akka Streams
Reactive integrations with Akka StreamsReactive integrations with Akka Streams
Reactive integrations with Akka Streams
 
Not Only Streams for Akademia JLabs
Not Only Streams for Akademia JLabsNot Only Streams for Akademia JLabs
Not Only Streams for Akademia JLabs
 
Reactive Streams, j.u.concurrent & Beyond!
Reactive Streams, j.u.concurrent & Beyond!Reactive Streams, j.u.concurrent & Beyond!
Reactive Streams, j.u.concurrent & Beyond!
 
End to End Akka Streams / Reactive Streams - from Business to Socket
End to End Akka Streams / Reactive Streams - from Business to SocketEnd to End Akka Streams / Reactive Streams - from Business to Socket
End to End Akka Streams / Reactive Streams - from Business to Socket
 
The Cloud-natives are RESTless @ JavaOne
The Cloud-natives are RESTless @ JavaOneThe Cloud-natives are RESTless @ JavaOne
The Cloud-natives are RESTless @ JavaOne
 
Krakow communities @ 2016
Krakow communities @ 2016Krakow communities @ 2016
Krakow communities @ 2016
 
Zen of Akka
Zen of AkkaZen of Akka
Zen of Akka
 
How Reactive Streams & Akka Streams change the JVM Ecosystem
How Reactive Streams & Akka Streams change the JVM EcosystemHow Reactive Streams & Akka Streams change the JVM Ecosystem
How Reactive Streams & Akka Streams change the JVM Ecosystem
 
Reactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka StreamsReactive Stream Processing with Akka Streams
Reactive Stream Processing with Akka Streams
 

Último

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 

HBase RowKey design for Akka Persistence