Ishlash nuqtai nazaridan, bunday ma'lumotlar bazasi sxemasiga qanday umumiy qabul qilingan qoidalar qo'llanilishi kerak?
Golang
Agar barcha kerakli indekslar qo'shilgan bo'lsa ham, ma'lumotlar bazasi yukni boshqarolmayapti va sekinlashayotgan bo'lsa, nima qilish kerak?
Go dasturchilari range vaqtida xarita bo'yicha yurish tartibini kafolatlamaydi?
// GetUsersList foydalanuvchilar ro'yxatini qaytaradi. (ma'lumotlar bazasida taxminan 1 million foydalanuvchi saqlanadi) // Admin panelda foydalanuvchilar ro'yxatini ko'rsatish uchun ishlatiladi. Agar isActive = true bo'lsa, faqat faol foydalanuvchilar qaytariladi. 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("foydalanuvchilar ro'yxatini olishda xato") } var users []User // Foydalanuvchilar haqida ma'lumotlarni to'ldiring. for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Phone) if err != nil { return nil, err } // Foydalanuvchining elektron pochta ro'yxatini oling err, err := u.DB.QueryContext(ctx, "SELECT email FROM user_emails WHERE user_id = ?", user.ID) if err != nil { return nil, errors.New("foydalanuvchilar ro'yxatini olishda xato") } 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 // VK API'dan profil ma'lumotlarini oling profile, err := getUserProfileFromVkApiByUserPhone(user.Phone) if err != nil { return nil, errors.New("foydalanuvchilar ro'yxatini olishda xato") } user.Profile = profile users = append(users, user) } if err = rows.Err(); err != nil { return nil, errors.New("foydalanuvchilar ro'yxatini olishda xato") } }
-- ID bo'yicha tartiblangan kitoblar ro'yxatini chiqarish, -- lekin chiqarishda 2 va 3-qatorlarni o'zaro almashtirish: -- 1 Mistr va Margarita 100 -- 3 Oltin Telenok 50 -- 2 O'n ikki stul 200 -- 4 Yevgeniy Onegin 250 -- 5 Belkin hikoyalari 90 -- 6 Uch musketerlar 60