2008-09-13 36 views

Trả lời

7

Nhiều người hỏi - tôi có cần giao dịch không? Tại sao tôi cần chúng? Khi nào thì sử dụng chúng?

Câu trả lời rất đơn giản: sử dụng chúng mọi lúc, trừ khi bạn có lý do chính đáng không (ví dụ: không sử dụng giao dịch nguyên tử cho "hoạt động dài" giữa các doanh nghiệp). Mặc định phải luôn là có. Bạn đang nghi ngờ? - sử dụng giao dịch.

Tại sao các giao dịch lại có lợi? Chúng giúp bạn đối phó với các sự cố, lỗi, dữ liệu nhất quán, xử lý lỗi, chúng giúp bạn viết mã đơn giản hơn. Và danh sách các lợi ích sẽ tiếp tục tăng theo thời gian.

Dưới đây là một số thông tin khác từ http://blogs.msdn.com/florinlazar/

+3

"sử dụng tất cả thời gian, trừ khi bạn có lý do chính đáng không" điều này giống như bảo mọi người đội mũ bảo hiểm mọi lúc, trừ khi họ có lý do chính đáng. –

+0

Đó là giả định rằng việc sử dụng các giao dịch là gây phiền nhiễu hoặc vô lý theo bất kỳ cách nào, mà tôi không nghĩ là như vậy. –

+0

Tôi nghĩ @Jeff Atwood đã không đọc đoạn văn đầy đủ trước khi đi đến kết thúc mũ bảo hiểm. – Codeslayer

1

Câu trả lời là tùy thuộc. Bạn không phải lúc nào cũng cần an toàn giao dịch. Đôi khi nó quá mức cần thiết. Đôi khi nó không phải.

Tôi có thể thấy rằng, ví dụ, khi bạn triển khai quy trình thanh toán, bạn chỉ muốn hoàn tất quy trình khi bạn thu thập tất cả dữ liệu, v.v. Hãy nghĩ về một khoản thanh toán, bạn có thể quay ngược lại - đó là ví dụ khi bạn cần một giao dịch. Hoặc có thể khi sử dụng chúng một cách khôn ngoan.

Bạn có cần giao dịch khi tạo tài khoản người dùng mới không? Có lẽ, nếu nó trên 10 bảng (vì lý do gì), nếu nó chỉ là một bảng duy nhất thì có lẽ không.

Nó cũng phụ thuộc vào những gì bạn bán cho khách hàng của bạn và họ là ai, và nếu họ yêu cầu, vv .. Nhưng nếu đưa ra quyết định tùy thuộc vào bạn, thì tôi muốn nói, chọn một cách khôn ngoan.

Điểm mấu chốt của tôi là, tránh tối ưu hóa sớm. Xây dựng ứng dụng của bạn, hãy nhớ rằng bạn có thể muốn quay lại và refactor/tối ưu hóa sau này khi bạn cần nó. Nhìn vào một vài dự án mã nguồn mở và xem cách chúng triển khai các phần khác nhau của ứng dụng của chúng, hãy học hỏi từ đó. Bạn sẽ thấy rằng hầu hết trong số họ không sử dụng giao dịch ở tất cả, nhưng có những cửa hàng trực tuyến khổng lồ sử dụng chúng.

1

Tất nhiên, điều đó tùy thuộc.

Tùy thuộc vào công việc mà quy trình được lưu trữ cụ thể thực hiện và, có lẽ, không quá nhiều "tỷ lệ đọc/ghi" mà bạn đề xuất. Nói chung, bạn nên xem xét kèm theo một đơn vị công việc trong một giao dịch nếu đó là truy vấn có thể bị ảnh hưởng bởi một số truy vấn chạy đồng thời khác. Nếu điều này nghe không xác định, nó là. Thường khó dự đoán trong hoàn cảnh nào một đơn vị công việc cụ thể đủ tiêu chuẩn làm ứng cử viên cho điều này.

Một nơi tốt để bắt đầu là xem xét chính xác CRUD đang được thực hiện trong đơn vị công việc, trong trường hợp này trong quy trình được lưu trữ của bạn và quyết định xem nó có bị ảnh hưởng hay không. công việc khác quan trọng đối với kết quả cuối cùng của công việc này đang được thực hiện (hoặc thậm chí, ngược lại). Nếu câu trả lời là "Có" cho cả hai thì hãy xem xét gói đơn vị công việc trong một giao dịch.

Điều này cho thấy rằng bạn không phải lúc nào cũng quyết định hoặc là sử dụng hoặc không sử dụng giao dịch s, thay vào đó bạn nên áp dụng chúng khi có ý nghĩa.Sử dụng các thuộc tính được xác định bởi ACID (Tính nguyên tử, nhất quán, Cách ly và Độ bền) để giúp quyết định thời điểm có thể xảy ra trường hợp này. Một điều khác cần xem xét là trong một số trường hợp, đặc biệt nếu hệ thống phải thực hiện nhiều thao tác liên tiếp nhanh, ví dụ: ứng dụng xử lý giao dịch khối lượng lớn, bạn có thể cần phải cân nhắc chi phí hiệu suất tương đối của giao dịch. Tùy thuộc vào kích thước của đơn vị công việc, một cam kết (hoặc rollback) của một giao dịch có thể tốn kém tài nguyên, có thể tác động tiêu cực đến hiệu suất của hệ thống của bạn một cách không cần thiết hoặc ít nhất, với lợi ích hạn chế.

Thật không may, đây không phải là câu hỏi dễ dàng để trả lời chính xác: "Nó phụ thuộc".

3

Hãy nhớ trong SQL Server tất cả các lệnh CRUD hoạt động trong giao dịch ngầm định theo mặc định. Bạn chỉ cần bật các giao dịch explict (BEGIN TRAN) nếu bạn cần thực hiện nhiều câu lệnh hoạt động như một đơn vị nguyên tử.

0

Sử dụng chúng nếu:

  1. Có một số lỗi mà bạn có thể muốn kiểm tra và đánh bắt mà sẽ không bị bắt ngoại trừ bạn đi ra ngoài và thực hiện công việc (nhìn mọi thứ lên, kiểm tra các giá trị, vv), thường từ bên trong một giao dịch để bạn có thể cuộn lại toàn bộ hoạt động.
  2. Có nhiều hoạt động đa cấp theo bất kỳ loại nào, trong đó, về mặt logic, được cuộn lại dưới dạng nhóm nếu chúng không thành công.
Các vấn đề liên quan