Sobes.tech

Golang

Veiktspējas aspektā, kādas kopīgas pieņemamas prasības būtu piemērojamas šādai datu bāzes shēmai?

140

Kāpēc Go izstrādātāji neparedz kartes apmeklējuma kārtību range laikā?

128

Ko darīt, ja mēs esam pievienojuši visus nepieciešamos indeksus, bet datu bāze joprojām nevar tikt galā ar slodzi un palēninās?

128

// GetUsersList atgriež lietotāju sarakstu. (datu bāzē tiek glabāti aptuveni 1 miljons lietotāju) // Izmanto lietotāju saraksta rādīšanai administrācijas panelī. Ja isActive = true, tiek atgriezti tikai aktīvie lietotāji. 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("kļūda, iegūstot lietotāju sarakstu") } var users []User // Aizpildiet informāciju par lietotājiem. for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Phone) if err != nil { return nil, err } // Iegūstiet lietotāja e-pasta sarakstu err, err := u.DB.QueryContext(ctx, "SELECT email FROM user_emails WHERE user_id = ?", user.ID) if err != nil { return nil, errors.New("kļūda, iegūstot lietotāju sarakstu") } 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 // Iegūstiet profila informāciju no VK API profile, err := getUserProfileFromVkApiByUserPhone(user.Phone) if err != nil { return nil, errors.New("kļūda, iegūstot lietotāju sarakstu") } user.Profile = profile users = append(users, user) } if err = rows.Err(); err != nil { return nil, errors.New("kļūda, iegūstot lietotāju sarakstu") } }

109

-- izvadiet grāmatu sarakstu, sakārtotu pēc id, -- bet izvadē apmainiet vietām 2. un 3. rindu: -- 1 Meistars un Margarita 100 -- 3 Zelta Telenoks 50 -- 2 Divpadsmit krēsli 200 -- 4 Eugēn Onegin 250 -- 5 Belkina stāsti 90 -- 6 Trīs musketeers 60

103
/2