Một trong những điều mọi người dường như không nhận ra là việc thực hiện tất cả quá trình xử lý của bạn trên máy chủ SQL không nhất thiết phải tốt, bất kể ảnh hưởng đến chất lượng mã.
Ví dụ, nếu bạn cần lấy một số dữ liệu và sau đó tính toán một cái gì đó từ dữ liệu và sau đó lưu trữ dữ liệu đó trong cơ sở dữ liệu. Có hai sự lựa chọn:
- Lấy dữ liệu vào ứng dụng của bạn, tính toán trong ứng dụng của bạn và sau đó gửi dữ liệu trở lại cơ sở dữ liệu
- Tạo một thủ tục được lưu trữ hoặc tương tự để lấy dữ liệu, tính toán trên nó và sau đó lưu trữ tất cả từ một cuộc gọi đến máy chủ SQL.
Bạn có thể nghĩ rằng giải pháp thứ hai luôn nhanh nhất, nhưng điều này chắc chắn không đúng. Tôi bỏ qua ngay cả khi SQL không phù hợp với vấn đề (ví dụ như thao tác regex và chuỗi). Hãy giả vờ rằng bạn có SQL CLR hoặc một cái gì đó tương tự để có một ngôn ngữ mạnh mẽ trong cơ sở dữ liệu. Nếu bạn mất 1 giây để thực hiện một chuyến đi khứ hồi và lấy dữ liệu và 1 giây để lưu trữ dữ liệu đó, và sau đó 10 giây để thực hiện tính toán trên đó. Bạn đang làm sai nếu bạn đang làm tất cả trong cơ sở dữ liệu.
Chắc chắn, bạn cạo đi 2 giây. Tuy nhiên, bạn đã lãng phí 100% (ít nhất) một lõi CPU trên máy chủ cơ sở dữ liệu của mình trong 10 giây hay bạn đã lãng phí thời gian đó trên máy chủ web của mình?
Máy chủ web rất dễ mở rộng quy mô, mặt khác cơ sở dữ liệu cực kỳ tốn kém, đặc biệt là cơ sở dữ liệu SQL. Hầu hết thời gian, các máy chủ web cũng "không trạng thái" và có thể được thêm và xóa ngay lập tức mà không cần cấu hình bổ sung cho bất cứ thứ gì ngoại trừ bộ cân bằng tải.
Vì vậy, hãy suy nghĩ không chỉ về việc cạo 2 giây khỏi một thao tác, mà còn nghĩ về khả năng mở rộng. Tại sao lại lãng phí một tài nguyên đắt tiền như tài nguyên máy chủ cơ sở dữ liệu khi bạn có thể sử dụng tài nguyên máy chủ web rẻ hơn nhiều với tác động hiệu suất tương đối nhỏ