Trong bản ghi hoptoad tôi kỳ sẽ thấyMysql thoáng qua :: Lỗi: Nhập trùng lặp trên trang web có lưu lượng truy cập cao - bất kỳ ý tưởng nào?
Mysql::Error: Duplicate entry 'XXXX' for key 'YYY'
Điều này xảy ra đối với hầu hết các mô hình của tôi, khoảng 6 trong tất cả, và tôi sẽ thấy lỗi này một lần mỗi vài giờ trên một trang web làm về các yêu cầu 5k/phút theo đến newrelic.
Tôi đang thực hiện ActiveRecord.find_or_initialize_by trong mỗi trường hợp này. Có thể, nhưng không chắc, điều này là từ một khách hàng trong lĩnh vực thực hiện hai bài viết cùng một lúc của cùng một dữ liệu, bởi vì đây là những khách hàng di động và codepath không thực sự cho chính nó (tức là, đây không phải là khách hàng nhấp chuột một nút gửi nhanh gấp hai lần).
Có sự cố đã biết với find_or_initialize_by không? Là nó có thể mysql dụ của tôi (Amazon RDS) là tất cả vì vậy thường chỉ bong ra (mặc dù tôi sẽ mong đợi nó để nâng cao một ngoại lệ trong trường hợp đó so với trở về không có dữ liệu) ...
Hơn nữa, là có một cách tốt hơn để chèn hồ sơ? Nếu hồ sơ tồn tại, tôi thường chỉ cập nhật trường updated_at của nó.
Cảm ơn!
Cảm ơn thông tin .... bạn có lẽ đúng, tôi đoán rằng về lý thuyết có thể là nếu có bất kỳ độ trễ nào trong một trong các hoạt động DB của tôi và người dùng lặp lại một hành động nào đó, tôi có thể kích hoạt hành vi này. Tôi không nhìn thấy nó thường xuyên ít nhất (một lần mỗi vài giờ nó có vẻ làm hàng ngàn yêu cầu/phút). Tôi đọc bài đăng trên blog Rails Warts, tôi đang làm những gì anh ấy và bạn đề xuất (sao lưu nó bằng kiểm tra tính hợp lệ của DB), vì vậy tôi cho rằng điều đó tốt như bây giờ .... – esilver