@ WWDC 19
Better performance and efficiency
- ๊ธด ๋ฐฐํฐ๋ฆฌ ์๋ช
- ๋ ์ข์ ์ฑ๋ฅ
- ๋์คํฌ footprint ๊ฐ์
- ๋ ์ข์ ๋๋ฐ์ด์ค ์ํ
- Efficient image assets
- File system metadata
- Syncing to disk
- Serialized data files
- Core Data
- SQLite
์ด๋ฏธ์ง ์์ ์ ํ๋ฉด ์ฌ์ด์ฆ์ ๋ง๊ฒ ํฌ๊ธฐ๊ฐ ์กฐ์ ๋๋ค.
HEIC๊ณผ Asset Catalog๋ฅผ ์ด์ฉํด์ footprint๋ฅผ ์ค์ฌ๋ผ!
- JPEG๋ฅผ ๋์ฒดํ ์ ์๋ ๋ ํจ์จ์ ์ธ ํฌ๋งท
- ๋์ผ ํ๋ฆฌํฐ ๋๋น ~50% ๋ ์์ ํ์ผ ํฌ๊ธฐ
- ๋ ์์ ๋์คํฌ footprint
- ๋ ๋น ๋ฅธ ๋คํธ์ํฌ ๋ค์ด๋ก๋, ์ ๋ก๋
- ๋ ๋น ๋ฅธ ๋์คํฌ ๋ก๋, ์ธ์ด๋ธ
- auxiliary image๋ฅผ ์ ์ฅํ๋ค. (depth, disparity ๋ฑ์ ์ ๋ณด ์ ์ฅ)
- alpha๋ฅผ ์ง์ํจ
- ๋ฌด์์ค ์์ถ
- ํ๋์ ์ปจํ ์ด๋์ ์ฌ๋ฌ ๊ฐ์ ์ด๋ฏธ์ง
- iOS 11, macOS High Sierra๋ถํฐ ์ง์๋๋ ํฌ๋งท
- ๊ฐ๋จํ๊ฒ ์ฑ์ ๋ฆฌ์์ค๋ฅผ ๊ด๋ฆฌ
- ์ฑ ์์ด์ฝ
- ๋ค์ํ ๋๋ฐ์ด์ค, ์ฌ์ด์ฆ์ ์ ์ฉ๋๋ ์ด๋ฏธ์ง
- On demand resources ์ค์ ์ฌ์ฉํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋จ
- Storage efficiency
- On-disk foot pprint
- App slicing (iOS) - ์ฑ์คํ ์ด์์ ๋ค์ด ๋ฐ์ ๋ ๋ค์ด ๋ฐ๋ ๊ธฐ๊ธฐ์ ํ์ํ ์์ ๋ง ๋ค์ด๋ก๋ ๋ฐ๊ธฐ ๋๋ฌธ์ ๋ ํจ์จ์ ์
- Performance
- ์ด๋ฏธ์ง๋ฅผ ๋ ๋นจ๋ฆฌ ๋ก๋ฉํจ
- ์ฑ ๋ฐ์น ์์ ์ ๋ ํผํฌ๋จผ์ค๊ฐ ์ข๋ค (up to 10% faster!)
- GPU ๋ฒ ์ด์ค๋ผ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฌด์์ค ์์ถ์ ์ง์ํ๋ค.
- ์์ค๋๊ฒ ์์ถ๋ ๊ฐ๋ฅ
- ์์ถํ ๋ ๋ ๋น ๋ฆ
- ๋ฎ์ ๋ฉ๋ชจ๋ฆฌ footprint
-
ํ์ผ ์์คํ ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ๋น์ฉ์ด ๋ ๋ค.
-
APFS๋ฅผ ์ฒดํฌํด๋ณด์ (Apple File System)
-
Efficient non-persistent file
- ํ์ผ ์์ฑ
- ์คํ๋ ์ํ๋ก ๋๊ณ ์ฐ๊ฒฐ์ ํ์ง ์๋๋ค (Keep it open and unlinked)
fsync
๋ฅผ ํธ์ถํ์ง ๋ง๋ผ
User Space - App
Kernel - OS Cache (Logical I/O)
Hardware - Disk Cache, Permanent Storage (Physical I/O)
fsync()
- Flushes cached data to disk
- OS cache์์ disk cache๋ก ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธด๋ค.
- ๋ฐ์ดํฐ๊ฐ permanent storage๋ก ๋ฐ๋ก write ๋์ง ์์ ์ ์๋ค.
- ์์๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค.
- ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
- OS์ ์ํด ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋ค.
- Flushes cached data to disk
F_FULLFSYNC
- cache๋ฅผ disk๋ก ์ฎ๊ธด๋ค.
- disk cache์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธด๋ค.
- ๋น์ฉ์ด ๋ง์ด ๋ ๋ค.
- OS์ ์ํด ์ฃผ๊ธฐ์ ์ผ๋ก ์คํ๋๋ค.
- cache๋ฅผ disk๋ก ์ฎ๊ธด๋ค.
F_BARRIERFSYNC
- I/O ordering์ ๋ง๋ ๋ค.
fsync()
with a barrier
F_FULLFSYNC
๋ณด๋ค ํจ์ฌ ๋น์ฉ์ด ์ ๊ฒ ๋ ๋ค.
- I/O ordering์ ๋ง๋ ๋ค.
์์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด์ F_BARRIERFSYNC
๋ฅผ ์ฌ์ฉํด๋ผ!
์๋ฅผ ๋ค๋ฉด, Plists, XML, JSON
- ์ฅ์
- ํธ๋ฆฌํ๋ค
- ์์ฃผ ์์ ๋๋ ๋ฐ์ดํฐ๊ฐ ์๋ ๋ ํ๋ฅญํ๋ค
- ๋ถ์ํ๊ธฐ ์ฝ๋ค.
- ๋จ์
- ๋ชจ๋ ๋ณ๊ฒฝ์ ๋ง๋ค ํ์ผ ์ ์ฒด๊ฐ ์๋ก ์์ฑ๋๋ค.
- ํ์ฅ์ฑ์ด ์ข์ง ์๋ค.
- ์๋ชป ์ฌ์ฉํ๊ธฐ ์ฝ๋ค.
- ๋ฉํ๋ฐ์ดํฐ์ ์ง์ฝ์ฒด์ด๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก์ ์๋ฏธ๊ฐ ์๋ค.
-
Core Data management
- SQLite ๊ธฐ๋ฐ
- Object graph์ relationship์ ๊ด๋ฆฌํ๋ค.
- ๋ณํ๋ฅผ ๊ฐ์ง(tracking)ํ๊ณ ์๋ฆฐ๋ค(notify).
- ์๋์ ์ผ๋ก ๋ฒ์ ํธ๋ํน์ ํ๊ณ ์ฌ๋ฌ ์์ฑ์๊ฐ ์์์ผ๋ก์จ ์๊ธฐ๋ ์ถฉ๋์ ํด๊ฒฐํ๋ค.
- Automatic connection pooling
- CloudKit๊ณผ์ ํตํฉ (iOS 13๋ถํฐ)
- ์ค์๊ฐ ์ฟผ๋ฆฌ
- Automatic memory management
- Statement aggregation in transactions
- Schema migrations
- Denomalization (iOS 13๋ถํฐ)
- ๊ทธ ์ธ ๊ธฐํ ๋ฑ๋ฑ
Journaling์ ํธ๋์ญ์ ๊ณผ ๊ด๋ จ์ด ์๋ค.
- Connection์ ์ด๊ณ ๋ซ๋ ๊ฒ์ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ ์ ๋ฐํ ์ ์๋ค!
- Consistency checking
- Journal recovery
- Journal checkpointing
- Recommended usage model
- Connection ์ํ๋ฅผ open์ธ ์ฑ๋ก ๊ฐ๋ฅํ ์ค๋ ์ ์งํด๋ผ
- ํ์ํ ๋๋ง connection์ closeํด๋ผ
- Pool connections on multi-threaded processes
- WAL Mode Journaling Reduces Writes (๋๋ถ๋ถ์ ๊ฒฝ์ฐ WAL mode ์ฌ์ฉ์ด ํจ์จ์ ์)
- Write ahead logging
- Combines multiple writes to the same page
- Uses fewer barriers
- Supports multiple readers at the same time as a writer
- Suports snapshots
-
Transactions Help Reduce Writes
-
Multiple
INSERT
,UPDATE
,DELETE
statement์ ์ฐ์ -
Multiple statement์ ์ํ ํ์ด์ง ๋ณ๊ฒฝ์ ํ ๋ฒ๋ง write ๋๋ค.
-
Useful for aggregating changes over time!
-
PRAGMA schema.secure_delete=FAST;
- How do we securely delete sensitive data?
- Automatically zeros deleted data
- No cost for data within the same page as the header
- Default behavior starting with iOS 13
- Don't use
VACUUM
VACUUM
is a slow I/O intensive operation- ์ ๋ ํ์ผ์ ์ผ๋ซ๊ฐ ๋ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๋ ๊ณผ์ ์ cost๊ฐ ๋น์ธ๋ค.
- All valid data gets written at least twice!
PRAGMA schema.auto_vacuum=INCREMENTAL;
PRAGMA schema.incremental_vacuum(N);
- Incremental auto vacuum๊ณผ fast secure delete๋ฅผ ์ด์ฉํด์ file size์ privacy๋ฅผ ๊ด๋ฆฌํด๋ผ.
- Index
- Faster ORDER BY, GROUP BY and WHERE clauses
- Each index adds additional I/O when writing to the database
- Partial Indexes
- Indexes with a WHERE clause
- Partial indexes only store data which matches the WHERE clause
- Queries that do not match the WHERE clause cannot use the index
- Supports all Apple devices
- Support for tracing single process and all processes
- Obtain both logical and physical I/O information
- Offers automated reasoning
- Excessive physical writes
- Failed I/O related calls
- Suboptimal caching
- Apply these lessons
- Profile with File Activity Instrument
- Continue optimizing storage!