2008-11-01 31 views
12

Thường tốt hơn để chạy các chức năng trên máy chủ web, hoặc trong cơ sở dữ liệu?Các chức năng trong mysql hoặc php

ví dụ: INSERT INTO dụ (băm) GIÁ TRỊ (MD5 ('hello'))
hoặc
INSERT INTO dụ (băm) GIÁ TRỊ ('5d41402abc4b2a76b9719d911017c592')

Ok vì vậy đó là một thực sự ví dụ tầm thường, nhưng đối với khả năng mở rộng khi một trang web phát triển đến nhiều trang web hoặc máy chủ cơ sở dữ liệu, tốt nhất là nên "làm công việc" ở đâu?

Trả lời

12

Tôi cố gắng nghĩ về cơ sở dữ liệu là nơi duy trì nội dung chỉ và đặt tất cả mã trừu tượng ở nơi khác. Các biểu thức cơ sở dữ liệu đủ phức tạp mà không cần thêm các hàm vào chúng.

Ngoài ra, tôi ưu truy vấn sẽ đi qua bất kỳ biểu hiện với các chức năng nếu bạn đã bao giờ nên kết thúc muốn làm một cái gì đó giống như "SELECT .... Ở ĐÂU MD5 (xxx) = ..."

Và cơ sở dữ liệu chức năng không phải là rất di động nói chung.

2

Cá nhân, tôi cố giữ cơ sở dữ liệu đơn giản (ở mức tối thiểu) bằng Chèn, Cập nhật, Xóa mà không có quá nhiều hàm có thể được sử dụng trong mã. Lưu trữ Proc là như nhau, chỉ chứa nhiệm vụ rất gần với dữ liệu kiên trì và không liên quan đến logic kinh doanh.

Tôi sẽ đặt MD5 ra ngoài. Điều này sẽ cho phép đáp ứng có "thao tác dữ liệu" bên ngoài phạm vi lưu trữ của cơ sở dữ liệu.

Nhưng, ví dụ của bạn là khá "dễ dàng" và tôi không nghĩ rằng nó xấu để có nó bên trong ...

0

Tôi nghĩ rằng hầu hết thời gian, bạn sẽ muốn rời khỏi thao tác dữ liệu để máy chủ web nhưng, nếu bạn muốn xử lý cơ sở dữ liệu liên quan đến các bảng, quan hệ, vv, sau đó đi cho DB.

Tôi đang vận động hành lang công ty của mình để nâng cấp máy chủ MySQL lên 5.0 để tôi có thể bắt đầu tận dụng các thủ tục (đang giết chết một vài trang web mà chúng tôi quản trị).

3

Tôi cố gắng sử dụng các hàm trong ngôn ngữ kịch bản của mình bất cứ khi nào các tính toán như thế được yêu cầu. Tôi giữ cho hàm SQL của tôi giảm xuống mức tối thiểu, vì một số lý do.

Lý do chính là cơ sở dữ liệu SQL của tôi chịu trách nhiệm lưu trữ nhiều trang web. Nếu máy chủ SQL bị sa lầy với các yêu cầu từ một trang web, nó sẽ ảnh hưởng xấu đến phần còn lại. Điều này thậm chí còn quan trọng hơn nếu bạn xem xét nếu bạn đang làm việc trên một máy chủ chia sẻ chẳng hạn, mặc dù trong trường hợp này bạn có ít quyền kiểm soát những gì người dùng khác đang làm.

Lý do thứ hai là tôi thích mã SQL của mình càng đơn giản càng tốt. Tôi thậm chí không muốn thử để đếm các hương vị khác nhau của SQL tồn tại, vì vậy tôi cố gắng giữ các chức năng (đặc biệt là các phần mở rộng không chuẩn) ra khỏi mã SQL của tôi, ngoại trừ những thứ như SUM hoặc MIN/MAX.

Tôi đoán những gì tôi đang nói là, SQL được thiết kế để lưu trữ và truy xuất dữ liệu và cần được giữ cho mục đích đó. Sử dụng ngôn ngữ phục vụ của bạn lựa chọn để thực hiện bất kỳ tính toán trước, và giữ cho mã SQL của bạn di động.

2

Sử dụng cơ sở dữ liệu của bạn làm phương tiện bền bỉ và duy trì tính toàn vẹn dữ liệu. Và để logic kinh doanh bên ngoài nó.

Nếu bạn đặt logic nghiệp vụ, bất kỳ thứ gì trong cơ sở dữ liệu của bạn, bạn sẽ làm cho việc quản lý và bảo trì phức tạp trở nên phức tạp hơn trong tương lai.

0

Giống như các câu trả lời khác cho đến nay, tôi muốn giữ tất cả logic kinh doanh ở một nơi. Cụ thể là ngôn ngữ ứng dụng của tôi. (Cụ thể hơn, trong mô hình đối tượng, nếu có, nhưng không phải tất cả mã là OO.)

Tuy nhiên, nếu bạn nhìn xung quanh StackOverflow cho (my) câu hỏi được gắn thẻ sql về việc có sử dụng SQL nội tuyến hay các thủ tục được lưu trữ , bạn sẽ thấy rằng hầu hết mọi người phản hồi những người đó đều ủng hộ việc sử dụng procs được lưu trữ bất cứ khi nào và bất cứ nơi nào có thể, ngay cả đối với các truy vấn tầm thường nhất. Bạn có thể muốn xem một số câu hỏi đó để xem một số lập luận ủng hộ cách tiếp cận khác.

Các vấn đề liên quan