SlideShare une entreprise Scribd logo
@tall_chris#Devoxx #TCoffheap
Terracotta’s OffHeap Explained
Chris Dennis
Terracotta (aka Software AG)
@tall_chris#Devoxx #TCoffheap
Who Am I?
• Trained as a Physicist, clearly not trained as a Computer
Scientist.
• 4Years Doing Unnatural Things With Bytecode In Academia
• 3Years Doing Unnatural Things With Bytecode For Money
• 4Years Doing Unnatural Things With ByteBuffers
• 11Years Doing Java Development
• Software Engineer working at Terracotta (Software AG)
@tall_chris#Devoxx #TCoffheap
[dungeon@Main1	~]$	cat	/proc/meminfo		
MemTotal:							6354030896	kB	
MemFree:								112170556	kB	
[dungeon@Main1	~]$	cat	/proc/cpuinfo		
processor	:	119	
vendor_id	:	GenuineIntel	
cpu	family	 :	6	
model	 	 :	62	
model	name	 :	Intel(R)	Xeon(R)	CPU	E7-4890	v2	@	2.80GHz	
stepping	 :	7	
cpu	MHz		 :	1200.000	
cache	size	 :	38400	KB	
physical	id	:	3
I Get To Play With Big Toys
@tall_chris#Devoxx #TCoffheap
A Bit of History
2010 Started development as a caching ‘tier’ within Ehcache.
2011 Integrated as a caching tier in front of Oracle BDB in the
Terracotta Server.
2013 Legal complications push it in to service as the primary
storage for the Terracotta Server.
2015 Open Sourced (https://github.com/Terracotta-OSS/
offheap-store).
@tall_chris#Devoxx #TCoffheap
Problem Statement
• Map: collection of key-value pairs
• Cache ≈ a Map with bells on
• Caching is good:
https://xkcd.com/908/
https://xkcd.com/908/
@tall_chris#Devoxx #TCoffheap
Problem Statement
• “a lot of caching” leads to
• a lot of heap, which leads to,
• a lot of work for the garbage collector, which leads to,
• a lot of GC pausing/overhead”
• The situation is markedly better now than when the bulk of this
library was written. (Please don’t tell my employer I said that)
@tall_chris#Devoxx #TCoffheap
Map/Cache Best Practices
• Immutable Keys
• please do this!
• ImmutableValues
• please do this!
• So with immutability everywhere, who cares about object
identity?
• If I don’t need object identity, do I need a heap?
• If I don’t need a heap, do I need a garbage collector?
@tall_chris#Devoxx #TCoffheap
Solution
• Replace heavy (large) map/cache usage with an ‘outside the
heap’ but ‘inside the process’ implementation.
• Benefits at two scales:
• At moderate scale, the GC offload reduces overheads.
• At large scale, we can still function: -Xmx6T
• Caveats
• Marshalling/unmarshalling costs time (and CPU)
• Trading away average latency to control the tail.
@tall_chris#Devoxx #TCoffheap
Replace What?
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
Maps
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
JDK HashMap
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
put(k1, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
put(k1, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
put(k1, v)
k1, v
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
k3, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
JDK HashMap
0 1 2 3 4 5 6 7
k1, v k2, v
k3, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
put(k1, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
put(k1, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
put(k1, v)
k1, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
put(k2, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, vk3, v
put(k3, v)
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, vk3, v
@tall_chris#Devoxx #TCoffheap
OffHeap Map
0 1 2 3 4 5 6 7
k1, v k2, vk3, v
• Hash Map
• Open Addressing
• Linear Reprobe (1 slot)
@tall_chris#Devoxx #TCoffheap
class	Node<K,	V>	{	
		final	int	hash;	
		final	K	key;	
		V	value;	
		Node<K,	V>	next;	
}
JDK HashMap
k1, v
primitive - easy to store
heap references
closed addressing specific
@tall_chris#Devoxx #TCoffheap
‘struct’	slot	{	
		int	status	
		int	hash;	
		long	encoding	
}
OffHeap Map
k1, v
primitive - easy to store
encoded key/value pair
@tall_chris#Devoxx #TCoffheap
interface	StorageEngine<K,	V>	{	
		Long	writeMapping(K	key,	V	value,	int	hash,	int	metadata);	
		void	freeMapping(long	encoding,	int	hash,	boolean	removal);	
			
		V	readValue(long	encoding);	
		boolean	equalsValue(Object	value,	long	encoding);	
			
		K	readKey(long	encoding,	int	hashCode);	
			
		boolean	equalsKey(Object	key,	long	encoding);	
}
Storing Key & Values
@tall_chris#Devoxx #TCoffheap
Options with 64 bits available
• 64 bit combined pointer
• 32 bit key pointer & 32 bit value pointer
• int key directly + 32 bit pointer
• long key directly + 32 bit pointer
• …anything else you like
@tall_chris#Devoxx #TCoffheap
Pointer to What?
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
A Native ‘Heap’
byte addressable memory (logical address space)
0 max
page page page page
ByteBuffer
.slice()
ByteBuffer
.slice()
ByteBuffer
.slice()
ByteBuffer
.slice()
ByteBuffer.allocateDirect() (physical address space)
@tall_chris#Devoxx #TCoffheap
Managing The ‘Heap’
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
A Native Heap Allocator
• malloc/free performed using a Java port of dlmalloc
• http://g.oswego.edu/dl/html/malloc.html
• Works well for our use cases as we do not generally control
or even know the malloc size distribution.
@tall_chris#Devoxx #TCoffheap
Marshaling
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
“Java Serialization Sucks”
• Serialization is self describing.
• It supports
• object identity
• cycles
• complex versioning
• Pretty heavyweight, especially for short streams…
• …but it’s the default serialization mechanism available in
Ehcache 2.x
@tall_chris#Devoxx #TCoffheap
“Java Serialization Sucks”
• serialize(new Integer(42))
• results in these 81 bytes:
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 AC ED 00 05 73 72 00 11 6A 61 76 61 2E 6C 61 6E
1 67 2E 49 6E 74 65 67 65 72 12 E2 A0 A4 F7 81 87
2 38 02 00 01 49 00 05 76 61 6C 75 65 78 72 00 10
3 6A 61 76 61 2E 6C 61 6E 67 2E 4E 75 6D 62 65 72
4 86 AC 95 1D 0B 94 E0 8B 02 00 00 78 70 00 00 00
5 2A
@tall_chris#Devoxx #TCoffheap
OffHeap’s Serialization Sucks Less?
• serialize(new Integer(42))
• results in 22 bytes
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 AC ED 00 05 73 72 00 00 00 00 78 72 00 00 00 01
1 78 70 00 00 00 2A
2
3
4
5
@tall_chris#Devoxx #TCoffheap
With some structure
STREAM_MAGIC	STREAM_VERSION	
TC_OBJECT	
		TC_CLASSDESC	utf(17,	java.lang.Integer)	
				serialVersionUID[12E2A0A4F7818738]	SC_SERIALIZABLE	
				fields=[I:utf(5,	value)]	
		TC_END_BLOCKDATA	
		TC_CLASSDESC	utf(16,	java.lang.Number)	
				serialVersionUID[86AC951D0B94E08B]	SC_SERIALIZABLE	
				fields=[]	
		TC_END_BLOCKDATA	
		TC_NULL	
0000002A
@tall_chris#Devoxx #TCoffheap
With some structure
STREAM_MAGIC	STREAM_VERSION	
TC_OBJECT	
		TC_CLASSDESC	descriptor(0)	
		TC_END_BLOCKDATA	
		TC_CLASSDESC	descriptor(1)	
		TC_END_BLOCKDATA	
		TC_NULL	
0000002A
@tall_chris#Devoxx #TCoffheap
Where did the 59 bytes go?
• How many types are in my map?
• All keys the same type: really common
• All values the same type: fairly common
• Stick those common ObjectStreamClass instances in a look
aside structure
• Map<Integer, ObjectStreamClass> for reading streams
• Map<SerializableDataKey, Integer> for writing streams
@tall_chris#Devoxx #TCoffheap
class	ObjectOutputStream	{	
		protected	void	writeClassDescriptor(ObjectStreamClass	desc);	
}	
class	ObjectInputStream	{	
		protected	ObjectStreamClass	readClassDescriptor();	
}
Serialization is pretty malleable
@tall_chris#Devoxx #TCoffheap
Portability
• But if serialization still sucks…
interface	Portability<T>	{	
		ByteBuffer	encode(T	object);	
		T	decode(ByteBuffer	buffer);	
		boolean	equals(Object	object,	ByteBuffer	buffer);	
}
@tall_chris#Devoxx #TCoffheap
Concurrency
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
j.u.c.ConcurrentMap
• What does a concurrent map provide?
• happens-before relationship: “actions in a thread prior to placing an
object into a ConcurrentMap as a key or value happen-before actions
subsequent to the access or removal of that object from the
ConcurrentMap in another thread”
• atomic operations: “…except that the action is performed atomically.”
• What do we want?
• concurrent access (readers and writers)
@tall_chris#Devoxx #TCoffheap
Happens Before Relationships
• volatile write/read
• but not on offheap memory locations
• synchronized
• needs a heap object
• other j.u.c classes (Lock,Atomic…)
• needs a heap object
• There is no way within the JDK to enforce a happens before
relationship between writes/reads of an offheap location…
@tall_chris#Devoxx #TCoffheap
No Unsafe please, we’re a library
• Our testing has never shown our offheap implementation to
be a bottleneck in our usages.
• Unnecessary complexity costs $$$
• support
• maintenance
• bugs
@tall_chris#Devoxx #TCoffheap
Simple solution:
OffHeapMap offheap memory area
dlmalloc serializer
@tall_chris#Devoxx #TCoffheap
ReadWriteLock
Simple solution:
OffHeapMap
offheap memory area
dlmalloc
serializer
ConcurrentOffHeapMap
@tall_chris#Devoxx #TCoffheap
A ‘Concurrent’ Map
✅ happens-before relationship: “actions in a thread prior to
placing an object into a ConcurrentMap as a key or value
happen-before actions subsequent to the access or removal of
that object from the ConcurrentMap in another thread”
✅ atomic operations: “…except that the action is performed
atomically.”
⚠ concurrent access (readers and writers)
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k1, v)
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k1, v)
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k1, v)
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k1, v)
k1, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
k1, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k2, v)
k1, v
k2, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
k1, v
k2, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
put(k3, v)
k1, v k3, v
k2, v
@tall_chris#Devoxx #TCoffheap
Moar Write Concurrency!
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
ReadWriteLock
OffHeapMap
offheap memory area
dlmalloc serializer
ConcurrentOffHeapMap
StripingLogic
k1, v k3, v
k2, v
@tall_chris#Devoxx #TCoffheap
Concurrency
java.util
(Hash)Map
java.util.concurrent
Concurrent(Hash)Map
Java Heap
Garbage
Collector
Class Layout
Logic
@tall_chris#Devoxx #TCoffheap
Conclusions
1. Simple engineering is simpler to support and maintain.
2. Going off-heap doesn’t require Unsafe
• (unless ultimate performance is your primary concern)
@tall_chris#Devoxx #TCoffheap
Additional Topics
• Caching
• Weakly-consistent Iterators
• Cross Segment Eviction
• Page Stealing Algorithms
• Native Heap Compaction
• Map Rehashing (Growing &
Shrinking)
• Off-Memory (SSDs)
• Persistence/Durability
• Entry Level Pinning
• Probably Other Stuff I
Forgot About…
@tall_chris#Devoxx #TCoffheap
Questions?
(BTW We’re Hiring)
https://github.com/Terracotta-OSS/offheap-store/

Contenu connexe

Tendances

Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Running High Performance & Fault-tolerant Elasticsearch Clusters on DockerRunning High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Sematext Group, Inc.
 
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel PoderTroubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
Tanel Poder
 
In Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry OsborneIn Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry Osborne
Enkitec
 
Oracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention TroubleshootingOracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention Troubleshooting
Tanel Poder
 
Use case for using the ElastiCache for Redis in production
Use case for using the ElastiCache for Redis in productionUse case for using the ElastiCache for Redis in production
Use case for using the ElastiCache for Redis in production
知教 本間
 
Empowering developers to deploy their own data stores
Empowering developers to deploy their own data storesEmpowering developers to deploy their own data stores
Empowering developers to deploy their own data stores
Tomas Doran
 
Data Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby UsageData Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby Usage
SATOSHI TAGOMORI
 
Scaling massive elastic search clusters - Rafał Kuć - Sematext
Scaling massive elastic search clusters - Rafał Kuć - SematextScaling massive elastic search clusters - Rafał Kuć - Sematext
Scaling massive elastic search clusters - Rafał Kuć - Sematext
Rafał Kuć
 
Creating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleCreating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at Scale
Sean Chittenden
 
Async and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRubyAsync and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRuby
Joe Kutner
 
Caching with Memcached and APC
Caching with Memcached and APCCaching with Memcached and APC
Caching with Memcached and APC
Ben Ramsey
 
Regex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language InsteadRegex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language Instead
All Things Open
 
Practicing Continuous Deployment
Practicing Continuous DeploymentPracticing Continuous Deployment
Practicing Continuous Deployment
zeeg
 
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
Natan Silnitsky
 
HBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBaseHBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBase
Michael Stack
 
JRuby with Java Code in Data Processing World
JRuby with Java Code in Data Processing WorldJRuby with Java Code in Data Processing World
JRuby with Java Code in Data Processing World
SATOSHI TAGOMORI
 
Logging for Production Systems in The Container Era
Logging for Production Systems in The Container EraLogging for Production Systems in The Container Era
Logging for Production Systems in The Container Era
Sadayuki Furuhashi
 
Memcached
MemcachedMemcached
Elasticsearch - Dynamic Nodes
Elasticsearch - Dynamic NodesElasticsearch - Dynamic Nodes
Elasticsearch - Dynamic Nodes
Scott Davis
 
Sparkstreaming
SparkstreamingSparkstreaming
Sparkstreaming
Marilyn Waldman
 

Tendances (20)

Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Running High Performance & Fault-tolerant Elasticsearch Clusters on DockerRunning High Performance & Fault-tolerant Elasticsearch Clusters on Docker
Running High Performance & Fault-tolerant Elasticsearch Clusters on Docker
 
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel PoderTroubleshooting Complex Oracle Performance Problems with Tanel Poder
Troubleshooting Complex Oracle Performance Problems with Tanel Poder
 
In Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry OsborneIn Memory Database In Action by Tanel Poder and Kerry Osborne
In Memory Database In Action by Tanel Poder and Kerry Osborne
 
Oracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention TroubleshootingOracle Latch and Mutex Contention Troubleshooting
Oracle Latch and Mutex Contention Troubleshooting
 
Use case for using the ElastiCache for Redis in production
Use case for using the ElastiCache for Redis in productionUse case for using the ElastiCache for Redis in production
Use case for using the ElastiCache for Redis in production
 
Empowering developers to deploy their own data stores
Empowering developers to deploy their own data storesEmpowering developers to deploy their own data stores
Empowering developers to deploy their own data stores
 
Data Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby UsageData Analytics Service Company and Its Ruby Usage
Data Analytics Service Company and Its Ruby Usage
 
Scaling massive elastic search clusters - Rafał Kuć - Sematext
Scaling massive elastic search clusters - Rafał Kuć - SematextScaling massive elastic search clusters - Rafał Kuć - Sematext
Scaling massive elastic search clusters - Rafał Kuć - Sematext
 
Creating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at ScaleCreating PostgreSQL-as-a-Service at Scale
Creating PostgreSQL-as-a-Service at Scale
 
Async and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRubyAsync and Non-blocking IO w/ JRuby
Async and Non-blocking IO w/ JRuby
 
Caching with Memcached and APC
Caching with Memcached and APCCaching with Memcached and APC
Caching with Memcached and APC
 
Regex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language InsteadRegex Considered Harmful: Use Rosie Pattern Language Instead
Regex Considered Harmful: Use Rosie Pattern Language Instead
 
Practicing Continuous Deployment
Practicing Continuous DeploymentPracticing Continuous Deployment
Practicing Continuous Deployment
 
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love5 Takeaways from Migrating a Library to Scala 3 - Scala Love
5 Takeaways from Migrating a Library to Scala 3 - Scala Love
 
HBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBaseHBaseConEast2016: Practical Kerberos with Apache HBase
HBaseConEast2016: Practical Kerberos with Apache HBase
 
JRuby with Java Code in Data Processing World
JRuby with Java Code in Data Processing WorldJRuby with Java Code in Data Processing World
JRuby with Java Code in Data Processing World
 
Logging for Production Systems in The Container Era
Logging for Production Systems in The Container EraLogging for Production Systems in The Container Era
Logging for Production Systems in The Container Era
 
Memcached
MemcachedMemcached
Memcached
 
Elasticsearch - Dynamic Nodes
Elasticsearch - Dynamic NodesElasticsearch - Dynamic Nodes
Elasticsearch - Dynamic Nodes
 
Sparkstreaming
SparkstreamingSparkstreaming
Sparkstreaming
 

Similaire à Terracotta's OffHeap Explained

Fast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaFast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible Java
Charles Nutter
 
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
Андрей Новиков
 
What the C?
What the C?What the C?
What the C?
baccigalupi
 
Spark with Elasticsearch
Spark with ElasticsearchSpark with Elasticsearch
Spark with Elasticsearch
Holden Karau
 
ImplementingCryptoSecurityARMCortex_Doin
ImplementingCryptoSecurityARMCortex_DoinImplementingCryptoSecurityARMCortex_Doin
ImplementingCryptoSecurityARMCortex_Doin
Jonny Doin
 
Modern C++
Modern C++Modern C++
Modern C++
Michael Clark
 
Data Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes backData Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes back
Victor_Cr
 
Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout
source{d}
 
Forcelandia 2016 PK Chunking
Forcelandia 2016 PK ChunkingForcelandia 2016 PK Chunking
Forcelandia 2016 PK Chunking
Daniel Peter
 
Move from C to Go
Move from C to GoMove from C to Go
Move from C to Go
Yu-Shuan Hsieh
 
Vavr Java User Group Rheinland
Vavr Java User Group RheinlandVavr Java User Group Rheinland
Vavr Java User Group Rheinland
David Schmitz
 
HBase Data Modeling and Access Patterns with Kite SDK
HBase Data Modeling and Access Patterns with Kite SDKHBase Data Modeling and Access Patterns with Kite SDK
HBase Data Modeling and Access Patterns with Kite SDK
HBaseCon
 
Hash Functions FTW
Hash Functions FTWHash Functions FTW
Hash Functions FTW
sunnygleason
 
Apache cassandra en production - devoxx 2017
Apache cassandra en production  - devoxx 2017Apache cassandra en production  - devoxx 2017
Apache cassandra en production - devoxx 2017
Alexander DEJANOVSKI
 
Collections forceawakens
Collections forceawakensCollections forceawakens
Collections forceawakens
RichardWarburton
 
Jose Selvi - Side-Channels Uncovered [rootedvlc2018]
Jose Selvi - Side-Channels Uncovered [rootedvlc2018]Jose Selvi - Side-Channels Uncovered [rootedvlc2018]
Jose Selvi - Side-Channels Uncovered [rootedvlc2018]
RootedCON
 
C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8
Christian Nagel
 
NoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 VirtualNoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 Virtual
Werner Keil
 
String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?
Jeremy Schneider
 
Overview of the Hive Stinger Initiative
Overview of the Hive Stinger InitiativeOverview of the Hive Stinger Initiative
Overview of the Hive Stinger Initiative
Modern Data Stack France
 

Similaire à Terracotta's OffHeap Explained (20)

Fast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaFast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible Java
 
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
PostgreSQL as seen by Rubyists (Kaigi on Rails 2022)
 
What the C?
What the C?What the C?
What the C?
 
Spark with Elasticsearch
Spark with ElasticsearchSpark with Elasticsearch
Spark with Elasticsearch
 
ImplementingCryptoSecurityARMCortex_Doin
ImplementingCryptoSecurityARMCortex_DoinImplementingCryptoSecurityARMCortex_Doin
ImplementingCryptoSecurityARMCortex_Doin
 
Modern C++
Modern C++Modern C++
Modern C++
 
Data Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes backData Wars: The Bloody Enterprise strikes back
Data Wars: The Bloody Enterprise strikes back
 
Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout Introduction to source{d} Engine and source{d} Lookout
Introduction to source{d} Engine and source{d} Lookout
 
Forcelandia 2016 PK Chunking
Forcelandia 2016 PK ChunkingForcelandia 2016 PK Chunking
Forcelandia 2016 PK Chunking
 
Move from C to Go
Move from C to GoMove from C to Go
Move from C to Go
 
Vavr Java User Group Rheinland
Vavr Java User Group RheinlandVavr Java User Group Rheinland
Vavr Java User Group Rheinland
 
HBase Data Modeling and Access Patterns with Kite SDK
HBase Data Modeling and Access Patterns with Kite SDKHBase Data Modeling and Access Patterns with Kite SDK
HBase Data Modeling and Access Patterns with Kite SDK
 
Hash Functions FTW
Hash Functions FTWHash Functions FTW
Hash Functions FTW
 
Apache cassandra en production - devoxx 2017
Apache cassandra en production  - devoxx 2017Apache cassandra en production  - devoxx 2017
Apache cassandra en production - devoxx 2017
 
Collections forceawakens
Collections forceawakensCollections forceawakens
Collections forceawakens
 
Jose Selvi - Side-Channels Uncovered [rootedvlc2018]
Jose Selvi - Side-Channels Uncovered [rootedvlc2018]Jose Selvi - Side-Channels Uncovered [rootedvlc2018]
Jose Selvi - Side-Channels Uncovered [rootedvlc2018]
 
C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8C# 7.x What's new and what's coming with C# 8
C# 7.x What's new and what's coming with C# 8
 
NoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 VirtualNoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame - Java2Days 2020 Virtual
 
String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?String Comparison Surprises: Did Postgres lose my data?
String Comparison Surprises: Did Postgres lose my data?
 
Overview of the Hive Stinger Initiative
Overview of the Hive Stinger InitiativeOverview of the Hive Stinger Initiative
Overview of the Hive Stinger Initiative
 

Dernier

一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
dakas1
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
NishanthaBulumulla1
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
Remote DBA Services
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
Quickdice ERP
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
rodomar2
 
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
kalichargn70th171
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
ICS
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
Green Software Development
 
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
safelyiotech
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
Peter Muessig
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
Green Software Development
 
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
Bert Jan Schrijver
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
XfilesPro
 
All you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVMAll you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVM
Alina Yurenko
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
Massimo Artizzu
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
mz5nrf0n
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
GohKiangHock
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
mz5nrf0n
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
Grant Fritchey
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
sjcobrien
 

Dernier (20)

一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理一比一原版(USF毕业证)旧金山大学毕业证如何办理
一比一原版(USF毕业证)旧金山大学毕业证如何办理
 
YAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring detailsYAML crash COURSE how to write yaml file for adding configuring details
YAML crash COURSE how to write yaml file for adding configuring details
 
Oracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptxOracle 23c New Features For DBAs and Developers.pptx
Oracle 23c New Features For DBAs and Developers.pptx
 
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian CompaniesE-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
E-Invoicing Implementation: A Step-by-Step Guide for Saudi Arabian Companies
 
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CDKuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
KuberTENes Birthday Bash Guadalajara - Introducción a Argo CD
 
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
The Key to Digital Success_ A Comprehensive Guide to Continuous Testing Integ...
 
Webinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for EmbeddedWebinar On-Demand: Using Flutter for Embedded
Webinar On-Demand: Using Flutter for Embedded
 
Energy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina JonuziEnergy consumption of Database Management - Florina Jonuzi
Energy consumption of Database Management - Florina Jonuzi
 
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
Safelyio Toolbox Talk Softwate & App (How To Digitize Safety Meetings)
 
UI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design SystemUI5con 2024 - Bring Your Own Design System
UI5con 2024 - Bring Your Own Design System
 
GreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-JurisicGreenCode-A-VSCode-Plugin--Dario-Jurisic
GreenCode-A-VSCode-Plugin--Dario-Jurisic
 
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
J-Spring 2024 - Going serverless with Quarkus, GraalVM native images and AWS ...
 
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
Everything You Need to Know About X-Sign: The eSign Functionality of XfilesPr...
 
All you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVMAll you need to know about Spring Boot and GraalVM
All you need to know about Spring Boot and GraalVM
 
Liberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptxLiberarsi dai framework con i Web Component.pptx
Liberarsi dai framework con i Web Component.pptx
 
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
在线购买加拿大英属哥伦比亚大学毕业证本科学位证书原版一模一样
 
SQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure MalaysiaSQL Accounting Software Brochure Malaysia
SQL Accounting Software Brochure Malaysia
 
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
原版定制美国纽约州立大学奥尔巴尼分校毕业证学位证书原版一模一样
 
Using Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query PerformanceUsing Query Store in Azure PostgreSQL to Understand Query Performance
Using Query Store in Azure PostgreSQL to Understand Query Performance
 
Malibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed RoundMalibou Pitch Deck For Its €3M Seed Round
Malibou Pitch Deck For Its €3M Seed Round
 

Terracotta's OffHeap Explained