Z pohľadu výkonu, aké všeobecne akceptované pravidlá by sa mali uplatniť na takýto schéma databázy?
Golang
Prečo vývojári jazyka Go nezaručujú poradie prechodu mapou pri range?
Čo robiť, ak sme pridali všetky potrebné indexy, ale databáza stále nezvláda záťaž a spomaľuje?
// GetUsersList vrne seznam uporabnikov. (v bazi podatkov shranjujemo približno 1 milijon uporabnikov) // Uporablja se za prikaz seznama uporabnikov v nadzorni plošči. Če je isActive = true, se vrnejo samo aktivni uporabniki. func (u *UsersRepo) GetUsersList(ctx context.Context, isActive bool) ([]User, error) { rows, err := u.DB.Query("SELECT id, name, phone FROM users WHERE is_active = ?", isActive) if err != nil { return nil, errors.New("napaka pri pridobivanju seznama uporabnikov") } var users []User // Izpolnite informacije o uporabnikih. for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Phone) if err != nil { return nil, err } // Pridobite seznam e-poštnih naslovov uporabnika err, err := u.DB.QueryContext(ctx, "SELECT email FROM user_emails WHERE user_id = ?", user.ID) if err != nil { return nil, errors.New("napaka pri pridobivanju seznama uporabnikov") } var emails []string for er.Next() { var email string err := rows.Scan(&email) if err != nil { return nil, err } emails = append(emails, email) } if len(emails) != 0 { for i, e := range emails { e = strings.ToLower(e) emails[i] = e } } user.Emails = emails // Pridobite profilne informacije iz API-ja VKontakte profile, err := getUserProfileFromVkApiByUserPhone(user.Phone) if err != nil { return nil, errors.New("napaka pri pridobivanju seznama uporabnikov") } user.Profile = profile users = append(users, user) } if err = rows.Err(); err != nil { return nil, errors.New("napaka pri pridobivanju seznama uporabnikov") } }
-- vypíšte zoznam kníh zoradený podľa id, -- ale v výstupe zameniť miesta riadkov 2 a 3: -- 1 Majster a Margaréta 100 -- 3 Zlatý Telenok 50 -- 2 Dvanásť stoličiek 200 -- 4 Eugène Onegin 250 -- 5 Belkinove poviedky 90 -- 6 Traja mušketieri 60