Nguyễn Nam Long Bác cập nhật ảnh thì cứ đưa ảnh vào cuối danh sách thôi, ảnh 1001 thì đâu ảnh hưởng đến một ngàn bức đầu, sau khi gửi hết một vòng lặp 1k ảnh thì getlistID lại rồi random tiếp thôi
Nguyễn Nam Long Vậy thì anh phải cho biết lượng truy cập như thế nào, với tần xuất như nào, Nguồn ảnh có khả năng tăng nhiều không, lượng người dùng là cố định hay ngẫu nhiên,... thì sẽ có giải pháp tối ưu hơn đó
(over-engineering) biến mỗi ảnh thành một chuỗi (có thể mỗi ký tự một bit hoặc mỗi ký tự một pixel) rồi dựng trie rồi mỗi lần muốn random thì random từng nhánh cho tới khi đụng trúng một ảnh (và nếu node đó còn đi xuống được tiếp thì có thể random đi tiếp) tiết kiệm được bộ nhớ )
Nếu không sợ lộ dữ liệu thì lưu id 1000 ảnh phía người dùng, mỗi lần gọi lên thì lấy ngẫu nhiên id trong đó rồi bỏ đi, server chỉ cần lấy ảnh theo id gửi lên thôi, không cần quan tâm người nào, không cần lưu id người dùng luôn
Cái đó thì em nghĩ là random trước n lần thành 1 list n phần tử, lấy ra phần tử i bất kì seed = (i + vị trí bắt đầu + bước nhảy) sau đó có thể mã hoá hoặc không. Người dùng mới sẽ được cấp seed và giữ luôn cái i (hoặc chỉ 1 phần) trên client Nếu có ảnh mới đủ 1 số lượng thì random tiếp chỉ những ảnh mới đó rồi gắn vào i hoặc đưa thành 1 list mới. .. một cách khác em nghĩ là 1000+ ảnh đó chia làm nhiều bộ (ví dụ mỗi bộ 100 ảnh). seed = random của từng bộ + random thứ tự bộ + bước + vị trí .. chắc sẽ có nhiều các chọn seed nữa, ý tưởng chung là anh random trước kho ảnh, rồi dựa vào seed của người dùng mà lấy ảnh thôi
Trước e có làm cái chương trình để lấy dãy ngẫu nhiên ko lặp, e lưu số vào 1 mảng từ 0->n-1, 1 biến ngẫu nhiên lấy vị trí , sau khi lấy số nào thì xóa phần tử có vị trí ngẫu nhiên đó khỏi mảng
e nghĩ đơn giản nhất thì cứ random thứ tự 1000 ảnh đó ngay từ đầu sau đó thì ảnh sẽ xuất hiện theo thứ tự bên trên người nào cũng như người nào, ko nhất thiết thứ tự xuất hiện ảnh của mỗi user là khác nhau cỡ 1-2 tháng lại đổi thứ tự random bên trên là được