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

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
 

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
 
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
 
golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)golang.tokyo #6 (in Japanese)
golang.tokyo #6 (in Japanese)
 
What’s New in Amazon Aurora
What’s New in Amazon AuroraWhat’s New in Amazon Aurora
What’s New in Amazon Aurora
 
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
 
AWS X-Rayによるアプリケーションの分析とデバッグ
AWS X-Rayによるアプリケーションの分析とデバッグAWS X-Rayによるアプリケーションの分析とデバッグ
AWS X-Rayによるアプリケーションの分析とデバッグ
 
ScalaからGoへ
ScalaからGoへScalaからGoへ
ScalaからGoへ
 
Blockchain on Go
Blockchain on GoBlockchain on Go
Blockchain on Go
 
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
 
神に近づく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)
 
AndApp開発における全て #denatechcon
AndApp開発における全て #denatechconAndApp開発における全て #denatechcon
AndApp開発における全て #denatechcon
 
SLOのすすめ
SLOのすすめSLOのすすめ
SLOのすすめ
 
Microservices at Mercari
Microservices at MercariMicroservices at Mercari
Microservices at Mercari
 
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
 
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
 
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
 
Solving anything in VCL
Solving anything in VCLSolving anything in VCL
Solving anything in VCL
 
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...
 
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
 
リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例リクルートを支える横断データ基盤と機械学習の適用事例
リクルートを支える横断データ基盤と機械学習の適用事例
 

Similar to So You Wanna Go Fast?

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
 

Similar to So You Wanna Go Fast? (7)

Python basics
Python basicsPython basics
Python basics
 
The Observability Pipeline
The Observability PipelineThe Observability Pipeline
The Observability Pipeline
 
From 0 to Ember
From 0 to EmberFrom 0 to Ember
From 0 to Ember
 
Future of Ruby on the Web
Future of Ruby on the WebFuture of Ruby on the Web
Future of Ruby on the Web
 
"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...
 
Boosting MySQL (for starters)
Boosting MySQL (for starters)Boosting MySQL (for starters)
Boosting MySQL (for starters)
 
Trafaret: monads and python
Trafaret: monads and pythonTrafaret: monads and python
Trafaret: monads and python
 

More from Tyler Treat

Cloud-Native Observability
Cloud-Native ObservabilityCloud-Native Observability
Cloud-Native Observability
Tyler Treat
 
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 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
 

More from Tyler Treat (9)

Cloud-Native Observability
Cloud-Native ObservabilityCloud-Native Observability
Cloud-Native Observability
 
Distributed Systems Are a UX Problem
Distributed Systems Are a UX ProblemDistributed Systems Are a UX Problem
Distributed Systems Are a UX Problem
 
The Future of Ops
The Future of OpsThe Future of Ops
The Future of Ops
 
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
 
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
 
Simple Solutions for Complex Problems
Simple Solutions for Complex ProblemsSimple Solutions for Complex Problems
Simple Solutions for Complex Problems
 
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
 
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
 
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
 

Recently uploaded

Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
Jhone kinadey
 
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
kalichargn70th171
 
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
The Third Creative Media
 
Hands-on with Apache Druid: Installation & Data Ingestion Steps
Hands-on with Apache Druid: Installation & Data Ingestion StepsHands-on with Apache Druid: Installation & Data Ingestion Steps
Hands-on with Apache Druid: Installation & Data Ingestion Steps
servicesNitor
 
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
kgyxske
 
Orca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container OrchestrationOrca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container Orchestration
Pedro J. Molina
 
Folding Cheat Sheet #6 - sixth in a series
Folding Cheat Sheet #6 - sixth in a seriesFolding Cheat Sheet #6 - sixth in a series
Folding Cheat Sheet #6 - sixth in a series
Philip Schwarz
 
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical OperationsEnsuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
OnePlan Solutions
 
The Ultimate Guide to Top 36 DevOps Testing Tools for 2024.pdf
The Ultimate Guide to Top 36 DevOps Testing Tools for 2024.pdfThe Ultimate Guide to Top 36 DevOps Testing Tools for 2024.pdf
The Ultimate Guide to Top 36 DevOps Testing Tools for 2024.pdf
kalichargn70th171
 
What’s new in VictoriaMetrics - Q2 2024 Update
What’s new in VictoriaMetrics - Q2 2024 UpdateWhat’s new in VictoriaMetrics - Q2 2024 Update
What’s new in VictoriaMetrics - Q2 2024 Update
VictoriaMetrics
 
TheFutureIsDynamic-BoxLang-CFCamp2024.pdf
TheFutureIsDynamic-BoxLang-CFCamp2024.pdfTheFutureIsDynamic-BoxLang-CFCamp2024.pdf
TheFutureIsDynamic-BoxLang-CFCamp2024.pdf
Ortus Solutions, Corp
 
What’s New in VictoriaLogs - Q2 2024 Update
What’s New in VictoriaLogs - Q2 2024 UpdateWhat’s New in VictoriaLogs - Q2 2024 Update
What’s New in VictoriaLogs - Q2 2024 Update
VictoriaMetrics
 
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
widenerjobeyrl638
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
campbellclarkson
 
What is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdfWhat is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdf
kalichargn70th171
 
Going AOT: Everything you need to know about GraalVM for Java applications
Going AOT: Everything you need to know about GraalVM for Java applicationsGoing AOT: Everything you need to know about GraalVM for Java applications
Going AOT: Everything you need to know about GraalVM for Java applications
Alina Yurenko
 
Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)
wonyong hwang
 
Trailhead Talks_ Journey of an All-Star Ranger .pptx
Trailhead Talks_ Journey of an All-Star Ranger .pptxTrailhead Talks_ Journey of an All-Star Ranger .pptx
Trailhead Talks_ Journey of an All-Star Ranger .pptx
ImtiazBinMohiuddin
 
The Comprehensive Guide to Validating Audio-Visual Performances.pdf
The Comprehensive Guide to Validating Audio-Visual Performances.pdfThe Comprehensive Guide to Validating Audio-Visual Performances.pdf
The Comprehensive Guide to Validating Audio-Visual Performances.pdf
kalichargn70th171
 
Call Girls Bangalore🔥7023059433🔥Best Profile Escorts in Bangalore Available 24/7
Call Girls Bangalore🔥7023059433🔥Best Profile Escorts in Bangalore Available 24/7Call Girls Bangalore🔥7023059433🔥Best Profile Escorts in Bangalore Available 24/7
Call Girls Bangalore🔥7023059433🔥Best Profile Escorts in Bangalore Available 24/7
manji sharman06
 

Recently uploaded (20)

Boost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management AppsBoost Your Savings with These Money Management Apps
Boost Your Savings with These Money Management Apps
 
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
The Power of Visual Regression Testing_ Why It Is Critical for Enterprise App...
 
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
Unlock the Secrets to Effortless Video Creation with Invideo: Your Ultimate G...
 
Hands-on with Apache Druid: Installation & Data Ingestion Steps
Hands-on with Apache Druid: Installation & Data Ingestion StepsHands-on with Apache Druid: Installation & Data Ingestion Steps
Hands-on with Apache Druid: Installation & Data Ingestion Steps
 
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
一比一原版(sdsu毕业证书)圣地亚哥州立大学毕业证如何办理
 
Orca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container OrchestrationOrca: Nocode Graphical Editor for Container Orchestration
Orca: Nocode Graphical Editor for Container Orchestration
 
Folding Cheat Sheet #6 - sixth in a series
Folding Cheat Sheet #6 - sixth in a seriesFolding Cheat Sheet #6 - sixth in a series
Folding Cheat Sheet #6 - sixth in a series
 
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical OperationsEnsuring Efficiency and Speed with Practical Solutions for Clinical Operations
Ensuring Efficiency and Speed with Practical Solutions for Clinical Operations
 
The Ultimate Guide to Top 36 DevOps Testing Tools for 2024.pdf
The Ultimate Guide to Top 36 DevOps Testing Tools for 2024.pdfThe Ultimate Guide to Top 36 DevOps Testing Tools for 2024.pdf
The Ultimate Guide to Top 36 DevOps Testing Tools for 2024.pdf
 
What’s new in VictoriaMetrics - Q2 2024 Update
What’s new in VictoriaMetrics - Q2 2024 UpdateWhat’s new in VictoriaMetrics - Q2 2024 Update
What’s new in VictoriaMetrics - Q2 2024 Update
 
TheFutureIsDynamic-BoxLang-CFCamp2024.pdf
TheFutureIsDynamic-BoxLang-CFCamp2024.pdfTheFutureIsDynamic-BoxLang-CFCamp2024.pdf
TheFutureIsDynamic-BoxLang-CFCamp2024.pdf
 
What’s New in VictoriaLogs - Q2 2024 Update
What’s New in VictoriaLogs - Q2 2024 UpdateWhat’s New in VictoriaLogs - Q2 2024 Update
What’s New in VictoriaLogs - Q2 2024 Update
 
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
美洲杯赔率投注网【​网址​🎉3977·EE​🎉】
 
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
🏎️Tech Transformation: DevOps Insights from the Experts 👩‍💻
 
What is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdfWhat is Continuous Testing in DevOps - A Definitive Guide.pdf
What is Continuous Testing in DevOps - A Definitive Guide.pdf
 
Going AOT: Everything you need to know about GraalVM for Java applications
Going AOT: Everything you need to know about GraalVM for Java applicationsGoing AOT: Everything you need to know about GraalVM for Java applications
Going AOT: Everything you need to know about GraalVM for Java applications
 
Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)Hyperledger Besu 빨리 따라하기 (Private Networks)
Hyperledger Besu 빨리 따라하기 (Private Networks)
 
Trailhead Talks_ Journey of an All-Star Ranger .pptx
Trailhead Talks_ Journey of an All-Star Ranger .pptxTrailhead Talks_ Journey of an All-Star Ranger .pptx
Trailhead Talks_ Journey of an All-Star Ranger .pptx
 
The Comprehensive Guide to Validating Audio-Visual Performances.pdf
The Comprehensive Guide to Validating Audio-Visual Performances.pdfThe Comprehensive Guide to Validating Audio-Visual Performances.pdf
The Comprehensive Guide to Validating Audio-Visual Performances.pdf
 
Call Girls Bangalore🔥7023059433🔥Best Profile Escorts in Bangalore Available 24/7
Call Girls Bangalore🔥7023059433🔥Best Profile Escorts in Bangalore Available 24/7Call Girls Bangalore🔥7023059433🔥Best Profile Escorts in Bangalore Available 24/7
Call Girls Bangalore🔥7023059433🔥Best Profile Escorts in Bangalore Available 24/7
 

So You Wanna Go Fast?