Some numbers for back-of-the-envelope usage calculations

Some quick numbers:

  • Read sequentially from main memory: 4 GB/s (1Mb needs 0.25 ms)
  • Read sequentially from SSD: 1 GB/s (1Mb needs 1 ms)
  • Read sequentially from 1 Gbps Ethernet: 100 MB/s (1Mb needs 10 ms)
  • Read sequentially from disk: 30 MB/s (1Mb needs 30 ms)

main memory 4x > SSD
SSD 10x > 1 Gbps Ethernet
1 Gbps Ethernet 3 > disk

more statistics:

  • 6-7 world-wide round trips per second
  • 2,000 round trips per second within a data center
  • 1 RPS = 2.5 million requests per month
  • 40 RPS = 100 million requests per month
  • 400 RPS = 1 billion requests per month

Here is a detailed table:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Latency Comparison Numbers
----------------------------------------------------------------------------------------
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns 14x L1 cache
Mutex lock/unlock 100 ns
Main memory reference 100 ns 20x L2 cache, 200x L1 cache
Compress 1K bytes with Zippy 10,000 ns 10 us
Send 1 KB bytes over 1 Gbps network 10,000 ns 10 us
Read 4 KB randomly from SSD* 150,000 ns 150 us ~1GB/sec SSD
Read 1 MB sequentially from memory 250,000 ns 250 us
Round trip within same datacenter 500,000 ns 500 us
Read 1 MB sequentially from SSD* 1,000,000 ns 1,000 us 1 ms ~1GB/sec SSD, 4X memory
Disk seek 10,000,000 ns 10,000 us 10 ms 20x datacenter roundtrip
Read 1 MB sequentially from 1 Gbps 10,000,000 ns 10,000 us 10 ms 40x memory, 10X SSD
Read 1 MB sequentially from disk 30,000,000 ns 30,000 us 30 ms 120x memory, 30X SSD
Send packet CA->Netherlands->CA 150,000,000 ns 150,000 us 150 ms

Notes
-----
1 ns = 10^-9 seconds
1 us = 10^-6 seconds = 1,000 ns
1 ms = 10^-3 seconds = 1,000 us = 1,000,000 ns

Powers of two table

1
2
3
4
5
6
7
8
9
10
Power           Exact Value         Approx Value        Bytes
---------------------------------------------------------------
7 128
8 256
10 1024 1 thousand 1 KB
16 65,536 64 KB
20 1,048,576 1 million 1 MB
30 1,073,741,824 1 billion 1 GB
32 4,294,967,296 4 GB
40 1,099,511,627,776 1 trillion 1 TB

Example Calculations

For example, if we are designing a financial transaction system, we need to calculate the data size of transactions:

Size per transaction:

  • user_id - 8 bytes
  • created_at - 5 bytes
  • seller - 32 bytes
  • amount - 5 bytes
    Total: ~50 bytes/transaction

If the system has 5 billion transactions each month, the new transaction data size will be:
250 GB/month = 50 bytes * 5 billion /month, which will be
9 TB of new transaction content in 3 years

Assume most are new transactions instead of updates to existing ones, then we have:
2,000 transactions per second on average
200 read requests per second on average

References

https://github.com/donnemartin/system-design-primer