2015-07-30 21 views
5

Thiết kế cho các giao dịch Big ..MySQL giao dịch: Một giao dịch lớn chống lại Nhiều giao dịch nhỏ

START TRANSACTION; 
    /* 
     INERT for login detail 
    */ 
    /* 
     INSERT for personal information 
    */ 
    /* 
     INSERT for user's transaction account 
    */ 
COMMIT; 

và thiết kế cho các giao dịch nhỏ ..

START TRANSACTION; 
    /* 
     INSERT for login detail 
    */ 
COMMIT; 

START TRANSACTION; 
    /* 
     INSERT for personal information 
    */ 
COMMIT; 

START TRANSACTION; 
    /* 
     INSERT for user's transaction account 
    */ 
COMMIT; 

kết quả hiện tại

  • Tôi đã thử cả trong đơn đăng ký của chúng tôi ation, và bằng cách sử dụng giao dịch 'Big', chúng ta đã trải qua bế tắc trong một bảng nào đó.

  • Bằng cách sử dụng các giao dịch nhỏ, có khả năng một hoặc hai trong số ba giao dịch đó không thể chạy và gây ra sự khác biệt.

Kinh nghiệm của tôi trong việc xử lý các trường hợp này không đủ để cung cấp giải pháp tốt nhất trong loại kịch bản này. Những loại giải pháp có thể được thực hiện ở đây?

Trả lời

0

Sau một số năm kinh nghiệm trong công việc của tôi , Tôi đã đưa ra giải pháp này .. bởi vì dữ liệu cho các mô-đun bị ảnh hưởng là tất cả nguyên vẹn thông qua thành công hay thất bại. Cảm ơn mọi người đã giúp đỡ

START TRANSACTION; 
    /* 
     INSERT for login detail 
    */ 
    /* 
     INSERT for personal information 
    */ 
    /* 
     INSERT for user's transaction account 
    */ 
COMMIT; 
2

Điểm sử dụng giao dịch là đảm bảo tính nhất quán của dữ liệu được lưu trữ. Khi bạn thực hiện giao dịch, tất cả các chèn, cập nhật và xóa không được lưu trữ trên cơ sở dữ liệu ngay lập tức, DB khóa các bảng (hoặc các hàng tùy thuộc vào cấu hình) với dữ liệu dự kiến ​​cho đến khi nó đạt đến lệnh cam kết. Tại thời điểm đó dữ liệu được viết và các khóa được giải phóng.

Nếu bạn thực hiện các giao dịch "nhỏ" thì giao dịch đó cũng giống như không thực hiện giao dịch.

Nếu giao dịch "lớn" của bạn bị kẹt, hãy tìm bàn nào đang gây ra bế tắc và tại sao nó làm việc đó. Có nhiều lý do bao gồm chèn/cập nhật đồng thời/xóa trên bảng, khóa không được phát hành đúng thời gian, giao dịch trước đó vẫn "sống" (tức là không đạt lệnh cam kết), DB mất quá nhiều thời gian để lưu trữ dữ liệu trên bảng , quá nhiều thời gian giữa chèn, vi phạm chính nước ngoài vv

bạn có thể đọc bài viết này sẽ giải thích cách giao dịch làm việc và làm thế nào bạn có thể xác định và tránh deadlocks http://flylib.com/books/en/1.142.1.79/1/

+0

Có sử dụng Giao dịch thực hiện 'A' trong 'ACID' là Atomicity, mọi thứ được thực thi hoặc không có gì xảy ra. Cảm ơn bạn đã cung cấp thông tin có sẵn trong tài liệu MySQL;) – Avidos

+0

Tôi đang cố gắng hữu ích cho thông tin giới hạn về vụ việc và câu hỏi không cụ thể đang được thực hiện lol –