Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
GORM головноголовного головномозга Булатова головноМария
Slide 2
Slide 2 text
ORM Object Relational Mapping
Slide 3
Slide 3 text
GORM
Slide 4
Slide 4 text
Benchmarks - Insert https://github.com/nashtsai/orm-benchmark https://github.com/kihamo/orm-benchmark 2000 times — Insert raw: 3.67s 1835258 ns/op 624 B/op 17 allocs/op orm: 3.97s 1986971 ns/op 1592 B/op 43 allocs/op qbs: 4.03s 2013782 ns/op 5575 B/op 111 allocs/op raw_np: 4.51s 2256832 ns/op 1051 B/op 20 allocs/op gorp: 5.14s 2569561 ns/op 1459 B/op 34 allocs/op xorm: 5.42s 2709375 ns/op 2743 B/op 88 allocs/op modl: 5.59s 2793891 ns/op 1387 B/op 33 allocs/op hood: 5.85s 2926226 ns/op 12228 B/op 209 allocs/op upper.io: 6.95s 3475133 ns/op 12481 B/op 454 allocs/op gorm: 7.31s 3652659 ns/op 7869 B/op 155 allocs/op 1.5x головноslower
Slide 5
Slide 5 text
Benchmarks - Update https://github.com/nashtsai/orm-benchmark https://github.com/kihamo/orm-benchmark 2000 times — Update upper.io: 2.38s 1191920 ns/op 13619 B/op 457 allocs/op qbs: 3.51s 1753295 ns/op 5571 B/op 111 allocs/op raw: 4.21s 2105541 ns/op 688 B/op 19 allocs/op orm: 4.28s 2142098 ns/op 1536 B/op 43 allocs/op gorp: 5.00s 2499496 ns/op 1608 B/op 40 allocs/op raw_nop: 5.55s 2774600 ns/op 1168 B/op 23 allocs/op xorm: 5.73s 2866950 ns/op 2953 B/op 109 allocs/op hood: 5.79s 2893514 ns/op 12226 B/op 209 allocs/op modl: 6.70s 3349130 ns/op 1560 B/op 41 allocs/op gorm: 12.72s 6358747 ns/op 20293 B/op 412 allocs/op 2.5x головноslower
Slide 6
Slide 6 text
Benchmarks - Read https://github.com/nashtsai/orm-benchmark https://github.com/kihamo/orm-benchmark 2000 times — Read orm: 0.59s 146428 ns/op 2746 B/op 99 allocs/op qbs: 0.61s 152806 ns/op 8033 B/op 182 allocs/op gorp: 1.47s 366656 ns/op 1945 B/op 57 allocs/op raw_nop: 1.47s 367865 ns/op 1641 B/op 46 allocs/op raw: 2.50s 624899 ns/op 1497 B/op 42 allocs/op hood: 2.95s 736492 ns/op 4386 B/op 65 allocs/op gorm: 3.70s 924227 ns/op 12224 B/op 244 allocs/op upper.io: 3.92s 980828 ns/op 31257 B/op 773 allocs/op modl: 5.40s 1348838 ns/op 1946 B/op 50 allocs/op xorm: 6.98s 1745925 ns/op 9476 B/op 266 allocs/op ~2x головноslower
Slide 7
Slide 7 text
Benchmarks https://github.com/nashtsai/orm-benchmark https://github.com/kihamo/orm-benchmark 2000 times - MultiRead limit 100 modl: 1.64s 817910 ns/op 49920 B/op 1726 allocs/op gorp: 1.86s 930041 ns/op 64452 B/op 2042 allocs/op raw_nop: 1.97s 982513 ns/op 44344 B/op 1514 allocs/op raw: 2.19s 1096484 ns/op 34776 B/op 1325 allocs/op orm: 2.52s 1262212 ns/op 85176 B/op 4289 allocs/op qbs: 2.96s 1480821 ns/op 205325 B/op 6434 allocs/op hood: 3.62s 1808326 ns/op 232498 B/op 8775 allocs/op gorm: 4.32s 2161877 ns/op 254838 B/op 6232 allocs/op xorm: 5.95s 2975603 ns/op 180200 B/op 8097 allocs/op upper.io: 27.12s 13562345 ns/op 2859532 B/op 71068 allocs/op ~2x головноslower
Slide 8
Slide 8 text
Start with GORM
Slide 9
Slide 9 text
gorm.Model
Slide 10
Slide 10 text
gorm.Model
Slide 11
Slide 11 text
Create Table CREATE TABLE `users` (`id` int AUTO_INCREMENT, `name` varchar(255), `created` timestamp NULL, `age` int , PRIMARY KEY (`id`)) db.CreateTable(User{}) db.Debug().CreateTable(User{})
Slide 12
Slide 12 text
CRUD Create INSERT INTO `users` (`name`,`created`,`age`) VALUES ('',NULL,0) {ID:1 Name: Created: Age:0}
Slide 13
Slide 13 text
CRUD Query
Slide 14
Slide 14 text
CRUD Query
Slide 15
Slide 15 text
SELECT
Slide 16
Slide 16 text
SELECT
Slide 17
Slide 17 text
SELECT 123
Slide 18
Slide 18 text
Нет compile-time проверок
Slide 19
Slide 19 text
Save()
Slide 20
Slide 20 text
Save()
Slide 21
Slide 21 text
Save(string) Результат - ?
Slide 22
Slide 22 text
Save(string) Ок {ID:876876795 Name: Created: Age:0}
Slide 23
Slide 23 text
Save(nil) Результат - ?
Slide 24
Slide 24 text
Save(nil) Ок {ID:876876796 Name: Created: Age:0}
Slide 25
Slide 25 text
Save(empty struct) Результат - ?
Slide 26
Slide 26 text
Save(empty struct) Ок {ID:876876797 Name: Created: Age:0}
Slide 27
Slide 27 text
Save(usr) Результат - ?
Slide 28
Slide 28 text
Save(usr) Ок! головно=> если случился UPDATE 1 запрос:
Slide 29
Slide 29 text
Save(usr) Panic! => если поля не изменились 2 запроса: ●
Slide 30
Slide 30 text
Save(usr) Panic! => если поля не изменились 2 запроса: ●
Slide 31
Slide 31 text
Save(&usr)
Slide 32
Slide 32 text
Что делать 1) typesafe методы 2) go-queryset https://github.com/jirfag/go-queryset
Slide 33
Slide 33 text
Typesafe методы
Slide 34
Slide 34 text
Typesafe методы
Slide 35
Slide 35 text
go-queryset
Slide 36
Slide 36 text
Спасибо!
Slide 37
Slide 37 text
Транзакции в GORM