Tôi có vòng lặp for mà trải qua hàng triệu đối tượng. Cách đề xuất để cam kết điều này là gì? Dưới đây là một vài ví dụ mà tôi đã nghĩ đến:Cập nhật hàng triệu hàng trong MySQL - khi nào cam kết
# after each
for item in items:
cursor.execute()
conn.commit()
# at the end
for item in items:
cursor.execute()
conn.commit()
# after N items
for n, item in enumerate(items):
cursor.execute()
if n % N == 0:
conn.commit()
conn.commit()
Điều nào ở trên sẽ hiệu quả nhất?
IMO nếu bạn không sử dụng giao dịch thì tốt nhất nên bật trực tiếp [autocommit] (http://stackoverflow.com/a/384452/2629998) trên đối tượng DB. Nếu không, hãy cam kết cuối cùng nếu bạn hài lòng với kết quả hoặc quay lại nếu có điều gì đó xấu xảy ra trong thời gian chờ đợi. –
Tại sao không thử và tìm hiểu, trên bản sao của tập dữ liệu thực tế của bạn? Tôi sẽ nói một trong hai cái sau. Tất nhiên, nếu chương trình bị loại ra, bạn không muốn phải chạy quá nhiều lần cập nhật nữa - vì vậy điều cuối cùng có vẻ hợp lý với tôi. – halfer
Tôi muốn có khuynh hướng gợi ý ở cuối. – hd1