Din punct de vedere al performanței, ce reguli acceptate în mod general trebuie aplicate unui astfel de schemă de bază de date?
Golang
De ce dezvoltatorii Go nu garantează ordinea parcurgerii mapelor în timpul range?
Ce trebuie să facem dacă am adăugat toate indexurile necesare, dar baza de date tot nu face față încărcăturii și încetinește?
// GetUsersList returnează o listă de utilizatori. (în baza de date stocăm aproximativ 1 milion de utilizatori) // Este folosit pentru afișarea listei de utilizatori în panoul de administrare. Dacă isActive = true, se returnează doar utilizatorii activi. 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("eroare la obținerea listei de utilizatori") } var users []User // Completați informațiile despre utilizatori. for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Phone) if err != nil { return nil, err } // Obțineți lista de e-mailuri ale utilizatorului err, err := u.DB.QueryContext(ctx, "SELECT email FROM user_emails WHERE user_id = ?", user.ID) if err != nil { return nil, errors.New("eroare la obținerea listei de utilizatori") } 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 // Obțineți informațiile despre profil din API-ul VKontakte profile, err := getUserProfileFromVkApiByUserPhone(user.Phone) if err != nil { return nil, errors.New("eroare la obținerea listei de utilizatori") } user.Profile = profile users = append(users, user) } if err = rows.Err(); err != nil { return nil, errors.New("eroare la obținerea listei de utilizatori") } }
-- afișează lista de cărți sortată după id, -- dar în afișare schimbă locurile între linia 2 și 3: -- 1 Maestrul și Margarita 100 -- 3 Telenocul de aur 50 -- 2 Cele douăsprezece scaune 200 -- 4 Eugen Onegin 250 -- 5 Povestirile Belkin 90 -- 6 Cei trei muschetari 60