SlideShare a Scribd company logo
Wanna Go
So You
Fast?
Strange Loop 2017 @tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
this one weird trick
Make your code faster with
@tyler_treat
this one weird trick
Make your code faster with
@tyler_treat
So You Wanna
Subvert Go?
@tyler_treat
Spoiler Alert:

Go is not a

systems language…
@tyler_treat
but that doesn’t mean you
can’t build internet-scale
systems with it.
@tyler_treat
@tyler_treat
This is a talk about how to
write terrible Go code.
@tyler_treat@tyler_treat
@tyler_treat
Because this is a talk
about trade-offs.
@tyler_treat
- Messaging Nerd @ Apcera

- Working on nats.io 

- Distributed systems

- bravenewgeek.com
Tyler Treat
@tyler_treat@tyler_treat
@tyler_treat
matter?
Why does this talk
@tyler_treat
The
compiler
isn’t magic.
@tyler_treat
The
compiler
isn’t magic.
@tyler_treat
You have to be

mindful of performance

when it matters.
@tyler_treat@tyler_treat
Where bad things hide
@tyler_treat@tyler_treat
Where bad things hideWhere we’re usually looking
@tyler_treat
Tire fires

at scale
@tyler_treat
@tyler_treat@tyler_treat@tyler_treat
@tyler_treat@tyler_treat@tyler_treat
@tyler_treat@tyler_treat@tyler_treat
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
Disclaimer:

Don’t blindly apply
optimizations presented.
@tyler_treat
tl;dr of this talk is

“IT DEPENDS!”
@tyler_treat
Measure
Optimize
@tyler_treat
Measurement Techniques
- pprof

- memory

- cpu

- blocking

- GODEBUG

- gctrace

- schedtrace

- allocfreetrace

- Benchmarking

- Code-level: testing.B

- System-level: HdrHistogram (https://github.com/codahale/hdrhistogram)

bench (https://github.com/tylertreat/bench)
@tyler_treat@tyler_treat
@tyler_treat
The only way to get good at something
is to be really fucking bad at it

for a long time.
@tyler_treat
Benchmarking…
a great way to rattle the

Hacker News fart chamber.
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
channels
@tyler_treat
“Instead of explicitly using locks to mediate access
to shared data, Go encourages the use of channels
to pass references to data between goroutines.”

https://blog.golang.org/share-memory-by-communicating
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
USE CHANNELS TO COORDINATE,
NOT SYNCHRONIZE.
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
defer
@tyler_treat@tyler_treat
@tyler_treat
Is defer still slow?
@tyler_treat@tyler_treat
@tyler_treat
The Secret Life

of interface{}
@tyler_treat
type Stringer interface {

String() string

}
https://research.swtch.com/interfaces
@tyler_treat
type Stringer interface {

String() string

}

type Binary uint64
https://research.swtch.com/interfaces
@tyler_treat
type Stringer interface {

String() string

}

type Binary uint64
200
b := Binary(200)
https://research.swtch.com/interfaces
@tyler_treat
type Stringer interface {

String() string

}

type Binary uint64

func (i Binary) String() string {
return strconv.FormatUint(uint64(i), 2)
}
200
b := Binary(200)
https://research.swtch.com/interfaces
@tyler_treat
type Stringer interface {

String() string

}
https://research.swtch.com/interfaces
s := Stringer(b)
Stringer
tab
data
@tyler_treat
s := Stringer(b)
Stringer
tab
data
.

.

.
itable(Stringer, Binary)
type
fun[0]
type(Binary)
(*Binary).String
type Stringer interface {

String() string

}
https://research.swtch.com/interfaces
@tyler_treat
tab
data
200
Binary
s := Stringer(b)
Stringer
.

.

.
itable(Stringer, Binary)
type
fun[0]
type(Binary)
(*Binary).String
type Stringer interface {

String() string

}
https://research.swtch.com/interfaces
@tyler_treat
@tyler_treat
So what?
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
Sorting 100M Interfaces
@tyler_treat@tyler_treat
Sorting 100M Interfaces
@tyler_treat@tyler_treat
Sorting 100M Structs
@tyler_treat@tyler_treat
Sorting 100M Structs
@tyler_treat
$ go test -bench=. -gcflags="-m"
@tyler_treat
$ go test -bench=. -gcflags="-m"
@tyler_treat@tyler_treat
@tyler_treat
$ go test -bench=. -gcflags="-l"
@tyler_treat@tyler_treat
Struct

No Inlining
Interface

No Inlining
@tyler_treat@tyler_treat
Struct

No Inlining
Interface

No Inlining
@tyler_treat@tyler_treat
Struct

No Inlining
Interface

No Inlining
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
x.(*T) inlined
@tyler_treat@tyler_treat
SSA backend &

remaining type

conversions inlined
x.(*T) inlined
@tyler_treat@tyler_treat
@tyler_treat
@tyler_treat@tyler_treat
Struct Interface
@tyler_treat@tyler_treat
Struct Interface
@tyler_treat@tyler_treat
@tyler_treat
$ go test -bench=. -gcflags="-S"
@tyler_treat
$ go test -bench=. -gcflags="-S"
@tyler_treat
$ go test -bench=. -gcflags="-S"
@tyler_treat
Key Insight:
If performance matters,

write type-specific code.
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
[]byte to string

conversions
@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
What’s going on here?
@tyler_treat@tyler_treat
@tyler_treat
memory allocation
@tyler_treat@tyler_treat
@tyler_treat
How is sync.Pool so fast?
@tyler_treat
Per-CPU storage!
@tyler_treat@tyler_treat
https://golang.org/src/sync/pool.go
@tyler_treat@tyler_treat
https://golang.org/src/sync/pool.go
@tyler_treat@tyler_treat
@tyler_treat
Overview
- Measuring performance

- Language features

- Memory management

- Concurrency and multi-core
@tyler_treat
“We generally don’t want sync/atomic to be used
at all…Experience has shown us again and again
that very very few people are capable of writing
correct code that uses atomic operations…”

—Ian Lance Taylor
@tyler_treat
@tyler_treat@tyler_treat
Subscribers Messages
Fast Topic Matching
http://bravenewgeek.com/fast-topic-matching/
@tyler_treat@tyler_treat
Subscribers Messages
Fast Topic Matching
http://bravenewgeek.com/fast-topic-matching/
@tyler_treat@tyler_treat
Fast Topic Matching
@tyler_treat@tyler_treat
Fast Topic Matching
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
Fast Topic Matching
@tyler_treat@tyler_treat
Concurrent

80,000 inserts

80,000 lookups

@tyler_treat@tyler_treat
Ctrie
@tyler_treat@tyler_treat
G1
G1
1. Assign a generation, G1, to each

I-node (empty struct).
Ctrie
@tyler_treat
1. Assign a generation, G1, to each

I-node (empty struct).

2. Add new node by copying I-node with
updated branch and generation then
GCAS, i.e. atomically:

- compare I-nodes to detect tree

mutations.

- compare root generations to detect

snapshots.
@tyler_treat
G2
G1
Ctrie
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
The Go race detector

doesn’t protect you from

doing dumb stuff.
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
Side note:

unsafe is, in fact, unsafe.
@tyler_treat
“Packages that import unsafe may depend on internal
properties of the Go implementation. We reserve the
right to make changes to the implementation that may
break such programs.”

https://golang.org/doc/go1compat
@tyler_treat
@tyler_treat
Key Insight:
Struct layout can make

a big difference.
@tyler_treat@tyler_treat
Mechanical

Sympathy
@tyler_treat
https://github.com/Workiva/go-datastructures/blob/master/queue/ring.go
@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
https://golang.org/src/sync/rwmutex.go
@tyler_treat@tyler_treat
https://golang.org/src/sync/rwmutex.go
@tyler_treat
CPU
reader
reader
reader
RWMutex
@tyler_treat
CPU
reader
reader
CPU
readerreader
reader
RWMutex
@tyler_treat
CPU
reader
reader
CPU
reader
readerreader
reader
CPU
readerreader
reader
RWMutex
@tyler_treat
CPU
reader
reader
CPU
reader
readerreader
reader
CPU
readerreader
CPU
reader
reader
reader
RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
@tyler_treat
RWMutex
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
RWMutex RWMutex RWMutex
CPU
reader
CPU
readerreaderreader
CPU
readerreader
CPU
readerreader
U
writer
CPU
reader
reader
CPU
reader
readerreader
readerreader
writer
CPU
reader
readerreader
reader
CPU
reader
writerreader
reader
CPU
reader
reader
CPU
reader
readerreader
writerreader
reader
CPU
reader
readerreader
reader
CPU
reader
readerreader
reader
reader readerreaderreader readerreaderreaderreader
U
reader
reader
ader
ader
U
reader
reader
ader
ader
ader
readerader
CPU
read
readreader
reader
CPU
read
readreader
reader
CPU
readreader
readreader
@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
How to create

CPU->RWMutex

mapping?
@tyler_treat@tyler_treat
https://github.com/jonhoo/drwmutex/blob/master/cpu_amd64.s
@tyler_treat
/proc/cpuinfo
@tyler_treat@tyler_treat
@tyler_treat
memory RWMutex1
24 bytes
@tyler_treat
RWMutex1 RWMutex2memory
24 bytes
@tyler_treat
RWMutex1 RWMutex2 RWMutex3memory
24 bytes
@tyler_treat
RWMutex1 RWMutex2 RWMutex3 RWMutexN…memory
24 bytes
@tyler_treat
RWMutex1 RWMutex2 RWMutex3 RWMutexN…memory
24 bytes
64 bytes
(cache line size)
@tyler_treat
RWMutex1 RWMutex2 RWMutex3 RWMutexN…memory
24 bytes
64 bytes
(cache line size)
Cache rules everything around me
@tyler_treat
https://github.com/jonhoo/drwmutex/blob/master/drwmutex.go
@tyler_treat
@tyler_treat
https://github.com/jonhoo/drwmutex/blob/master/drwmutex.go
@tyler_treat
@tyler_treat
padding …
64 bytes
(cache line size)
memory
24 bytes
RWMutex1
Cache rules everything around me
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat@tyler_treat
@tyler_treat
Go makes concurrency

easy enough to be
dangerous.
@tyler_treat
Conclusions
@tyler_treat
The standard library provides

general solutions (and they’re

generally what you should use).
1
@tyler_treat
Seemingly small, idiomatic

decisions can have profound

performance implications.
2
@tyler_treat
The Go toolchain has lots

of tools for analyzing your

code—learn them.
3
@tyler_treat
Go’s compiler and runtime

continue to improve.
4
@tyler_treat
Performance profile can

change dramatically

between releases.
5
@tyler_treat
Relying on assumptions

can be fatal.
6
@tyler_treat
Code is marginal,

architecture is material.
7
@tyler_treat
Peeking behind the curtains

can pay dividends.
8
@tyler_treat
Above all, optimize for the

right trade-off.
9
@tyler_treat
Thanks!

More Related Content

Viewers also liked (20)

Operations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from HappeningOperations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from Happening
Amazon Web Services
 
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis FirehoseStreaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
Amazon Web Services
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)
Yuichi Murata
 
What’s New in Amazon Aurora
What’s New in Amazon AuroraWhat’s New in Amazon Aurora
What’s New in Amazon Aurora
Amazon Web Services
 
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraApache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Spark Summit
 
AWS X-Rayによるアプリケーションの分析とデバッグ
AWS X-Rayによるアプリケーションの分析とデバッグAWS X-Rayによるアプリケーションの分析とデバッグ
AWS X-Rayによるアプリケーションの分析とデバッグ
Amazon Web Services Japan
 
ScalaからGoへ
ScalaからGoへScalaからGoへ
ScalaからGoへ
James Neve
 
Blockchain on Go
Blockchain on GoBlockchain on Go
Blockchain on Go
Seiji Takahashi
 
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage libraryAn introduction and future of Ruby coverage library
An introduction and future of Ruby coverage library
mametter
 
神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)
guregu
 
AndApp開発における全て #denatechcon
AndApp開発における全て #denatechconAndApp開発における全て #denatechcon
AndApp開発における全て #denatechcon
DeNA
 
SLOのすすめ
SLOのすすめSLOのすすめ
SLOのすすめ
Takeo Sawada
 
Microservices at Mercari
Microservices at MercariMicroservices at Mercari
Microservices at Mercari
Google Cloud Platform - Japan
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
 
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCFast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPC
Tim Burks
 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
Fastly
 
Google Home and Google Assistant Workshop: Build your own serverless Action o...
Google Home and Google Assistant Workshop: Build your own serverless Action o...Google Home and Google Assistant Workshop: Build your own serverless Action o...
Google Home and Google Assistant Workshop: Build your own serverless Action o...
Bret McGowen - NYC Google Developer Advocate
 
Spark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Streaming Programming Techniques You Should Know with Gerard MaasSpark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Summit
 
リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例
Tetsutaro Watanabe
 
Operations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from HappeningOperations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from Happening
Amazon Web Services
 
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis FirehoseStreaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
Amazon Web Services
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)
Yuichi Murata
 
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan ViladrosarieraApache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Spark Summit
 
AWS X-Rayによるアプリケーションの分析とデバッグ
AWS X-Rayによるアプリケーションの分析とデバッグAWS X-Rayによるアプリケーションの分析とデバッグ
AWS X-Rayによるアプリケーションの分析とデバッグ
Amazon Web Services Japan
 
ScalaからGoへ
ScalaからGoへScalaからGoへ
ScalaからGoへ
James Neve
 
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage libraryAn introduction and future of Ruby coverage library
An introduction and future of Ruby coverage library
mametter
 
神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)
guregu
 
AndApp開発における全て #denatechcon
AndApp開発における全て #denatechconAndApp開発における全て #denatechcon
AndApp開発における全て #denatechcon
DeNA
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
 
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPCFast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPC
Tim Burks
 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
Fastly
 
Spark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Streaming Programming Techniques You Should Know with Gerard MaasSpark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Streaming Programming Techniques You Should Know with Gerard Maas
Spark Summit
 
リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例
Tetsutaro Watanabe
 

Similar to So You Wanna Go Fast? (8)

Distributed Systems Are a UX Problem
Distributed Systems Are a UX ProblemDistributed Systems Are a UX Problem
Distributed Systems Are a UX Problem
Tyler Treat
 
Python basics
Python basicsPython basics
Python basics
Jyoti shukla
 
The Observability Pipeline
The Observability PipelineThe Observability Pipeline
The Observability Pipeline
Tyler Treat
 
From 0 to Ember
From 0 to EmberFrom 0 to Ember
From 0 to Ember
Tracy Lee
 
Future of Ruby on the Web
Future of Ruby on the WebFuture of Ruby on the Web
Future of Ruby on the Web
Future Insights
 
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C..."MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
CAPSiDE
 
Boosting MySQL (for starters)
Boosting MySQL (for starters)Boosting MySQL (for starters)
Boosting MySQL (for starters)
Jose Luis Martínez
 
Trafaret: monads and python
Trafaret: monads and pythonTrafaret: monads and python
Trafaret: monads and python
Mikhail Krivushin
 
Distributed Systems Are a UX Problem
Distributed Systems Are a UX ProblemDistributed Systems Are a UX Problem
Distributed Systems Are a UX Problem
Tyler Treat
 
The Observability Pipeline
The Observability PipelineThe Observability Pipeline
The Observability Pipeline
Tyler Treat
 
From 0 to Ember
From 0 to EmberFrom 0 to Ember
From 0 to Ember
Tracy Lee
 
Future of Ruby on the Web
Future of Ruby on the WebFuture of Ruby on the Web
Future of Ruby on the Web
Future Insights
 
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C..."MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
"MySQL Boosting - DB Best Practices & Optimization" by José Luis Martínez - C...
CAPSiDE
 

More from Tyler Treat (8)

Cloud-Native Observability
Cloud-Native ObservabilityCloud-Native Observability
Cloud-Native Observability
Tyler Treat
 
The Future of Ops
The Future of OpsThe Future of Ops
The Future of Ops
Tyler Treat
 
Building a Distributed Message Log from Scratch - SCaLE 16x
Building a Distributed Message Log from Scratch - SCaLE 16xBuilding a Distributed Message Log from Scratch - SCaLE 16x
Building a Distributed Message Log from Scratch - SCaLE 16x
Tyler Treat
 
Building a Distributed Message Log from Scratch
Building a Distributed Message Log from ScratchBuilding a Distributed Message Log from Scratch
Building a Distributed Message Log from Scratch
Tyler Treat
 
Simple Solutions for Complex Problems
Simple Solutions for Complex ProblemsSimple Solutions for Complex Problems
Simple Solutions for Complex Problems
Tyler Treat
 
Probabilistic algorithms for fun and pseudorandom profit
Probabilistic algorithms for fun and pseudorandom profitProbabilistic algorithms for fun and pseudorandom profit
Probabilistic algorithms for fun and pseudorandom profit
Tyler Treat
 
The Economics of Scale: Promises and Perils of Going Distributed
The Economics of Scale: Promises and Perils of Going DistributedThe Economics of Scale: Promises and Perils of Going Distributed
The Economics of Scale: Promises and Perils of Going Distributed
Tyler Treat
 
From Mainframe to Microservice: An Introduction to Distributed Systems
From Mainframe to Microservice: An Introduction to Distributed SystemsFrom Mainframe to Microservice: An Introduction to Distributed Systems
From Mainframe to Microservice: An Introduction to Distributed Systems
Tyler Treat
 
Cloud-Native Observability
Cloud-Native ObservabilityCloud-Native Observability
Cloud-Native Observability
Tyler Treat
 
The Future of Ops
The Future of OpsThe Future of Ops
The Future of Ops
Tyler Treat
 
Building a Distributed Message Log from Scratch - SCaLE 16x
Building a Distributed Message Log from Scratch - SCaLE 16xBuilding a Distributed Message Log from Scratch - SCaLE 16x
Building a Distributed Message Log from Scratch - SCaLE 16x
Tyler Treat
 
Building a Distributed Message Log from Scratch
Building a Distributed Message Log from ScratchBuilding a Distributed Message Log from Scratch
Building a Distributed Message Log from Scratch
Tyler Treat
 
Simple Solutions for Complex Problems
Simple Solutions for Complex ProblemsSimple Solutions for Complex Problems
Simple Solutions for Complex Problems
Tyler Treat
 
Probabilistic algorithms for fun and pseudorandom profit
Probabilistic algorithms for fun and pseudorandom profitProbabilistic algorithms for fun and pseudorandom profit
Probabilistic algorithms for fun and pseudorandom profit
Tyler Treat
 
The Economics of Scale: Promises and Perils of Going Distributed
The Economics of Scale: Promises and Perils of Going DistributedThe Economics of Scale: Promises and Perils of Going Distributed
The Economics of Scale: Promises and Perils of Going Distributed
Tyler Treat
 
From Mainframe to Microservice: An Introduction to Distributed Systems
From Mainframe to Microservice: An Introduction to Distributed SystemsFrom Mainframe to Microservice: An Introduction to Distributed Systems
From Mainframe to Microservice: An Introduction to Distributed Systems
Tyler Treat
 

Recently uploaded (20)

How Biometric Attendance Systems Reduce Payroll Fraud & Costs?
How Biometric Attendance Systems Reduce Payroll Fraud & Costs?How Biometric Attendance Systems Reduce Payroll Fraud & Costs?
How Biometric Attendance Systems Reduce Payroll Fraud & Costs?
Star Link Communication Pvt Ltd
 
Breaking Barriers in the use of Biomedical Data- Multi-modal Data Management....
Breaking Barriers in the use of Biomedical Data- Multi-modal Data Management....Breaking Barriers in the use of Biomedical Data- Multi-modal Data Management....
Breaking Barriers in the use of Biomedical Data- Multi-modal Data Management....
elucidata1
 
OOP Introduction.pptxOOP Introduction Part 1 In Java Language.pptx
OOP Introduction.pptxOOP Introduction Part 1 In Java Language.pptxOOP Introduction.pptxOOP Introduction Part 1 In Java Language.pptx
OOP Introduction.pptxOOP Introduction Part 1 In Java Language.pptx
habibansar098
 
M251_Meeting 5 (Inheritance and Polymorphism).ppt
M251_Meeting 5 (Inheritance and Polymorphism).pptM251_Meeting 5 (Inheritance and Polymorphism).ppt
M251_Meeting 5 (Inheritance and Polymorphism).ppt
smartashammari
 
MariaDB Galera Cluster webinar — 2025 Edition.pdf
MariaDB Galera Cluster webinar — 2025 Edition.pdfMariaDB Galera Cluster webinar — 2025 Edition.pdf
MariaDB Galera Cluster webinar — 2025 Edition.pdf
Sakari Keskitalo
 
About Us – What is Data Protection Data Protection Consultancy.pdf
About Us – What is Data Protection  Data Protection Consultancy.pdfAbout Us – What is Data Protection  Data Protection Consultancy.pdf
About Us – What is Data Protection Data Protection Consultancy.pdf
Data Protection People
 
Odoo WooCommerce Connector, Multiple Woocommerce store connection
Odoo WooCommerce Connector,  Multiple Woocommerce store connectionOdoo WooCommerce Connector,  Multiple Woocommerce store connection
Odoo WooCommerce Connector, Multiple Woocommerce store connection
Aagam infotech
 
Introducing Agentforce 2.0: The Digital Labor Platform for Building a Limitle...
Introducing Agentforce 2.0: The Digital Labor Platform for Building a Limitle...Introducing Agentforce 2.0: The Digital Labor Platform for Building a Limitle...
Introducing Agentforce 2.0: The Digital Labor Platform for Building a Limitle...
Dele Amefo
 
VADY: Revolutionizing Business Intelligence with AI-Powered Insights
VADY: Revolutionizing Business Intelligence with AI-Powered InsightsVADY: Revolutionizing Business Intelligence with AI-Powered Insights
VADY: Revolutionizing Business Intelligence with AI-Powered Insights
NewFangledVision
 
Alluxio Webinar | What’s New in Alluxio AI: 3X Faster Checkpoint File Creatio...
Alluxio Webinar | What’s New in Alluxio AI: 3X Faster Checkpoint File Creatio...Alluxio Webinar | What’s New in Alluxio AI: 3X Faster Checkpoint File Creatio...
Alluxio Webinar | What’s New in Alluxio AI: 3X Faster Checkpoint File Creatio...
Alluxio, Inc.
 
Dijkstras single source path algorthim
Dijkstras   single source path algorthimDijkstras   single source path algorthim
Dijkstras single source path algorthim
Bobby Pra A
 
How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...
Vadym Kazulkin
 
Evaluation as an Essential Component of the Generative AI Lifecycle
Evaluation as an Essential Component of the Generative AI LifecycleEvaluation as an Essential Component of the Generative AI Lifecycle
Evaluation as an Essential Component of the Generative AI Lifecycle
Maxim Salnikov
 
Wondershare Filmora Crack 2025 + Key Free Download
Wondershare Filmora Crack 2025 + Key Free DownloadWondershare Filmora Crack 2025 + Key Free Download
Wondershare Filmora Crack 2025 + Key Free Download
nasirali027m
 
Disaster Recovery in Azure: Architecture and Best Practices
Disaster Recovery in Azure: Architecture and Best PracticesDisaster Recovery in Azure: Architecture and Best Practices
Disaster Recovery in Azure: Architecture and Best Practices
San sri
 
C++ Programming : from problem analysis to program design
C++ Programming : from problem analysis to program designC++ Programming : from problem analysis to program design
C++ Programming : from problem analysis to program design
ArderjhadeOrlanda
 
40179_Bednar.ppt Oracle Database Upgrade Assistant
40179_Bednar.ppt Oracle Database Upgrade Assistant40179_Bednar.ppt Oracle Database Upgrade Assistant
40179_Bednar.ppt Oracle Database Upgrade Assistant
herryheryadi1
 
Symantec Endpoint Protection Presentation Slide
Symantec Endpoint Protection Presentation SlideSymantec Endpoint Protection Presentation Slide
Symantec Endpoint Protection Presentation Slide
VLODI
 
Happiest MInds - Pimcore PIM Expertise.pdf
Happiest MInds - Pimcore PIM Expertise.pdfHappiest MInds - Pimcore PIM Expertise.pdf
Happiest MInds - Pimcore PIM Expertise.pdf
Happiest Minds Technologies
 
Google Cloud Build - Overview and Examples
Google Cloud Build - Overview and ExamplesGoogle Cloud Build - Overview and Examples
Google Cloud Build - Overview and Examples
Evgenii Studitskikh
 
How Biometric Attendance Systems Reduce Payroll Fraud & Costs?
How Biometric Attendance Systems Reduce Payroll Fraud & Costs?How Biometric Attendance Systems Reduce Payroll Fraud & Costs?
How Biometric Attendance Systems Reduce Payroll Fraud & Costs?
Star Link Communication Pvt Ltd
 
Breaking Barriers in the use of Biomedical Data- Multi-modal Data Management....
Breaking Barriers in the use of Biomedical Data- Multi-modal Data Management....Breaking Barriers in the use of Biomedical Data- Multi-modal Data Management....
Breaking Barriers in the use of Biomedical Data- Multi-modal Data Management....
elucidata1
 
OOP Introduction.pptxOOP Introduction Part 1 In Java Language.pptx
OOP Introduction.pptxOOP Introduction Part 1 In Java Language.pptxOOP Introduction.pptxOOP Introduction Part 1 In Java Language.pptx
OOP Introduction.pptxOOP Introduction Part 1 In Java Language.pptx
habibansar098
 
M251_Meeting 5 (Inheritance and Polymorphism).ppt
M251_Meeting 5 (Inheritance and Polymorphism).pptM251_Meeting 5 (Inheritance and Polymorphism).ppt
M251_Meeting 5 (Inheritance and Polymorphism).ppt
smartashammari
 
MariaDB Galera Cluster webinar — 2025 Edition.pdf
MariaDB Galera Cluster webinar — 2025 Edition.pdfMariaDB Galera Cluster webinar — 2025 Edition.pdf
MariaDB Galera Cluster webinar — 2025 Edition.pdf
Sakari Keskitalo
 
About Us – What is Data Protection Data Protection Consultancy.pdf
About Us – What is Data Protection  Data Protection Consultancy.pdfAbout Us – What is Data Protection  Data Protection Consultancy.pdf
About Us – What is Data Protection Data Protection Consultancy.pdf
Data Protection People
 
Odoo WooCommerce Connector, Multiple Woocommerce store connection
Odoo WooCommerce Connector,  Multiple Woocommerce store connectionOdoo WooCommerce Connector,  Multiple Woocommerce store connection
Odoo WooCommerce Connector, Multiple Woocommerce store connection
Aagam infotech
 
Introducing Agentforce 2.0: The Digital Labor Platform for Building a Limitle...
Introducing Agentforce 2.0: The Digital Labor Platform for Building a Limitle...Introducing Agentforce 2.0: The Digital Labor Platform for Building a Limitle...
Introducing Agentforce 2.0: The Digital Labor Platform for Building a Limitle...
Dele Amefo
 
VADY: Revolutionizing Business Intelligence with AI-Powered Insights
VADY: Revolutionizing Business Intelligence with AI-Powered InsightsVADY: Revolutionizing Business Intelligence with AI-Powered Insights
VADY: Revolutionizing Business Intelligence with AI-Powered Insights
NewFangledVision
 
Alluxio Webinar | What’s New in Alluxio AI: 3X Faster Checkpoint File Creatio...
Alluxio Webinar | What’s New in Alluxio AI: 3X Faster Checkpoint File Creatio...Alluxio Webinar | What’s New in Alluxio AI: 3X Faster Checkpoint File Creatio...
Alluxio Webinar | What’s New in Alluxio AI: 3X Faster Checkpoint File Creatio...
Alluxio, Inc.
 
Dijkstras single source path algorthim
Dijkstras   single source path algorthimDijkstras   single source path algorthim
Dijkstras single source path algorthim
Bobby Pra A
 
How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...
How to develop, run and optimize Spring Boot 3 application on AWS Lambda-OBI ...
Vadym Kazulkin
 
Evaluation as an Essential Component of the Generative AI Lifecycle
Evaluation as an Essential Component of the Generative AI LifecycleEvaluation as an Essential Component of the Generative AI Lifecycle
Evaluation as an Essential Component of the Generative AI Lifecycle
Maxim Salnikov
 
Wondershare Filmora Crack 2025 + Key Free Download
Wondershare Filmora Crack 2025 + Key Free DownloadWondershare Filmora Crack 2025 + Key Free Download
Wondershare Filmora Crack 2025 + Key Free Download
nasirali027m
 
Disaster Recovery in Azure: Architecture and Best Practices
Disaster Recovery in Azure: Architecture and Best PracticesDisaster Recovery in Azure: Architecture and Best Practices
Disaster Recovery in Azure: Architecture and Best Practices
San sri
 
C++ Programming : from problem analysis to program design
C++ Programming : from problem analysis to program designC++ Programming : from problem analysis to program design
C++ Programming : from problem analysis to program design
ArderjhadeOrlanda
 
40179_Bednar.ppt Oracle Database Upgrade Assistant
40179_Bednar.ppt Oracle Database Upgrade Assistant40179_Bednar.ppt Oracle Database Upgrade Assistant
40179_Bednar.ppt Oracle Database Upgrade Assistant
herryheryadi1
 
Symantec Endpoint Protection Presentation Slide
Symantec Endpoint Protection Presentation SlideSymantec Endpoint Protection Presentation Slide
Symantec Endpoint Protection Presentation Slide
VLODI
 
Google Cloud Build - Overview and Examples
Google Cloud Build - Overview and ExamplesGoogle Cloud Build - Overview and Examples
Google Cloud Build - Overview and Examples
Evgenii Studitskikh
 

So You Wanna Go Fast?