๐พ Kawa Storage - ้ซๆง่ฝใคใใณใในใใฌใผใธใจใณใธใณ
kawa-storageใฏใKawaใใญใธใงใฏใใฎๆ ธใจใชใ้ซๆง่ฝในใใฌใผใธใจใณใธใณใงใใWrite-Ahead Log๏ผWAL๏ผใจใปใฐใกใณใๅใซใใๆฐธ็ถๅใใคใใณใใฝใผใทใณใฐใใฟใผใณใๅฎ่ฃ ใใฆใใพใใ
๐ฏ ่จญ่จ็ฎๆจ
- โก ้ซๆง่ฝ: 274K+ writes/sec, 1.2M+ reads/sec
- ๐ ๆดๅๆง: CRC32ใใงใใฏใตใ ใซใใใใผใฟๆดๅๆงไฟ่จผ
- ๐ ในใฑใผใฉใใชใใฃ: ใปใฐใกใณใๅใซใใๅน็็ใชใใผใฟ็ฎก็
- ๐ก๏ธ ไฟก้ ผๆง: ้ๅฎณ่ๆงใจใใผใฟๅพฉๆงๆฉ่ฝ
๐๏ธ ใขใผใญใใฏใใฃ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Kawa Storage Engine โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ค Public API โ
โ โโโ StorageEngine โ
โ โโโ append_event() / read_events() โ
โ โโโ get_latest_offset() โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ Write-Ahead Log (WAL) โ
โ โโโ ใใผใใฃใทใงใณๅฅใชใใปใใ็ฎก็ โ
โ โโโ ใปใฐใกใณใ่ชๅใญใผใใผใทใงใณ โ
โ โโโ ้ๅๆๆธใ่พผใฟใป่ชญใฟๅใ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ฆ Segment Management โ
โ โโโ ๅบๅฎใตใคใบใปใฐใกใณใ๏ผ1GB default๏ผ โ
โ โโโ ใกใขใชใใใใI/O โ
โ โโโ CRC32ๆดๅๆงใใงใใฏ โ
โ โโโ ไธฆ่กใขใฏใปในๅถๅพก โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ ๐ Event Management โ
โ โโโ EventId๏ผUUID v4๏ผ โ
โ โโโ ใคใใณใใกใฟใใผใฟ โ
โ โโโ JSONใปใใคใใชใใผใฟใตใใผใ โ
โ โโโ ใฟใคใ ในใฟใณใ็ฎก็ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
๐ ใฏใคใใฏในใฟใผใ
ๅบๆฌ็ใชไฝฟ็จๆนๆณ
use ;
async
ใใใฉใผใใณในๆ้ฉๅ
// ๅคง้ใใผใฟใฎๅน็็ใชๆธใ่พผใฟ
for i in 0..10000
// ใใใ่ชญใฟๅใ
let events = storage.read_events.await?;
๐ ๆง่ฝ็นๆง
ใใณใใใผใฏ็ตๆ
| ๆไฝ | ๆง่ฝ | ๆกไปถ |
|---|---|---|
| ๆธใ่พผใฟ | 274,816 events/sec | Release build, 1000 events |
| ่ชญใฟๅใ | 1,190,890 events/sec | Release build, 1000 events |
| ่ตทๅๆ้ | < 100ms | ็ฉบใฎใใผใฟใใฃใฌใฏใใช |
| ใกใขใชไฝฟ็จ้ | < 50MB | ๅบๆฌๆไฝๆ |
ในใฑใผใฉใใชใใฃ
- ๆๅคงใปใฐใกใณใใตใคใบ: ๅถ้ใชใ๏ผๆจๅฅจ1GB๏ผ
- ๆๅคงใใผใใฃใทใงใณๆฐ: ๅถ้ใชใ
- ๆๅคงใใใใฏๆฐ: ๅถ้ใชใ
- ไธฆ่กใขใฏใปใน: ๅฎๅ จๅฏพๅฟ
๐ง ่จญๅฎใชใใทใงใณ
use StorageConfig;
let config = StorageConfig ;
๐๏ธ ใใผใฟๆง้
Event
EventData
// ไฝฟ็จไพ
let json_data = from_json;
let binary_data = from_bytes;
let text_data = from_text;
๐งช ใในใ
ใในใๅฎ่ก
# ๅ
จใในใๅฎ่ก
# ็ตฑๅใในใ
# ใใณใใใผใฏ
# ใซใใฌใใธ
ใในใๆงๆ
- Unit Tests: ๅใขใธใฅใผใซใฎๅบๆฌๆฉ่ฝ
- Integration Tests: ใจใณใใใผใจใณใใทใใชใช
- Benchmark Tests: ๆง่ฝๆธฌๅฎ
- Property Tests: ใฉใณใใ ใใผใฟใงใฎๆค่จผ
๐ง ๅฐๆฅใฎๆฉ่ฝ
v0.2.0
- ๅง็ธฎใตใใผใ: LZ4/Snappyๅง็ธฎ
- ใคใณใใใฏในๆง็ฏ: ้ซ้ๆค็ดขๆฉ่ฝ
- ใกใขใชใใผใซ: ใขใญใฑใผใทใงใณๆ้ฉๅ
- ใใใAPI: ่คๆฐใคใใณใไธๆฌๅฆ็
v0.3.0
- ใฌใใชใฑใผใทใงใณ: ๅคใใผใๅฏพๅฟ
- ๆๅทๅ: ไฟๅญๆๆๅทๅ
- ในใญใผใๆค่จผ: ใคใใณใๆง้ ๆค่จผ
- ่ชๅๅง็ธฎ: ๅคใใปใฐใกใณใๆด็
โ ๏ธ ๅถ้ไบ้
- ใใฉใณใถใฏใทใงใณ: ็พๅจๆชๅฏพๅฟ
- ๅ้คๆไฝ: ใคใใณใใฎๅ้คใฏๆชๅฏพๅฟ
- ๅๆฃในใใฌใผใธ: ๅไธใใผใใฎใฟ
- ในใญใผใ้ฒๅ: ็พๅจๆชๅฏพๅฟ
๐ ้ข้ฃใใญใฅใกใณใ
๐ ใจใฉใผใใณใใชใณใฐ
use ;
match storage.append_event.await
kawa-storage - Rustใงๅฎ่ฃ ใใใ้ซๆง่ฝใคใใณใในใใฌใผใธ ๐