Các đối số chống lại hoặc để đưa logic ứng dụng vào lớp cơ sở dữ liệu là gì?


74

LƯU Ý Đối tượng của lập trình viên . trên lập trình viên.

Tôi không thể tìm thấy cuộc thảo luận về dba về điều này rồi, và bài viết gốc đã nói lên tất cả, vì vậy:

Hầu hết các nhà phát triển phần mềm muốn giữ logic ứng dụng trong lớp ứng dụng và có lẽ chúng tôi cảm thấy tự nhiên khi giữ nó ở đây. Các nhà phát triển cơ sở dữ liệu dường như muốn đưa logic ứng dụng vào lớp cơ sở dữ liệu, như các trình kích hoạt và các thủ tục được lưu trữ.

Cá nhân tôi muốn giữ càng nhiều càng tốt trong lớp ứng dụng để dễ gỡ lỗi hơn và giữ cho các trách nhiệm của các lớp riêng biệt.

Suy nghĩ của bạn về điều này là gì và nên làm gì hoặc không nên thực hiện trong lớp cơ sở dữ liệu?

NB Tôi không phải là OP cho câu hỏi đó, nhưng vẫn giữ nguyên từ ngữ ban đầu.


4
So sánh các câu trả lời ở đây và trên SO, khoảng cách là nổi bật. Các nhà phát triển phản đối sự chậm trễ đòi hỏi từ việc tập trung hóa các quy trình trong cơ sở dữ liệu, nhưng với các DBA đó là một điều tốt. Buộc mọi người phải dành nhiều thời gian và nỗ lực hơn để yêu cầu một chế độ xem mới hoặc sproc làm giảm số lượng điểm tiếp xúc với dữ liệu, giúp dễ dàng duy trì tính nhất quán và giảm số điểm tối ưu hóa.
Jon của tất cả các giao dịch

Dường như với tôi rằng các câu trả lời ở đây giả định một cách sử dụng cơ sở dữ liệu nhất định (nhiều ứng dụng, cho phép một số người dùng truy cập cơ sở dữ liệu trực tiếp, v.v.) Tôi nghĩ đó là lý do chính cho sự khác biệt.
JMD hợp nhất

Câu trả lời:


56

Các loại suy nghĩ ...

Mã cơ sở dữ liệu của bạn sẽ tồn tại lâu hơn công nghệ ứng dụng khách của bạn. Hãy nghĩ về ADO.NET -> Linq -> EF cũng như các ORM. Trong khi đó, bạn vẫn có thể chạy mã SQL Server 2000 từ thiên niên kỷ trước đối với tất cả các công nghệ máy khách ở trên.

Bạn cũng có vấn đề nhiều máy khách: Tôi có .net, java và Excel. Đó là 3 bộ logic ứng dụng.

"Logic nghiệp vụ" không nên bị nhầm lẫn với "logic toàn vẹn dữ liệu". Nếu bạn có khách hàng bắt đầu giao dịch và thực hiện kiểm tra các loại, đó là rất nhiều cuộc gọi db và giao dịch dài.

Logic ứng dụng không mở rộng cho khối lượng dữ liệu cao. Chúng tôi có 50k hàng mỗi giây bằng cách sử dụng các procs được lưu trữ. Một nhóm chị em sử dụng Hibernate không thể nhận được một giây mỗi giây


Miễn là bạn ở lại với cơ sở dữ liệu quan hệ
JMD Coalesce

1
@JMDCoalesce: Bạn vẫn cần logic kinh doanh và có trách nhiệm có nhiều ứng dụng khách. Vậy quan điểm của bạn là gì?
gbn

40

Tôi muốn tất cả logic phải áp dụng cho tất cả người dùng và tất cả các ứng dụng trong cơ sở dữ liệu. Đó là nơi duy nhất lành mạnh để đặt nó.

Fortune 500 cuối cùng tôi làm việc có các ứng dụng được viết bằng ít nhất 25 ngôn ngữ đánh vào cơ sở dữ liệu OLTP của họ. Một số chương trình đã chuyển sang sản xuất vào những năm 1970.

Cách khác để thực hiện loại yêu cầu này trong cơ sở dữ liệu là cho phép mọi lập trình viên ứng dụng thực hiện lại tất cả hoặc một phần của nó một cách chính xác 100%, mỗi khi họ kích hoạt trình soạn thảo của họ, kể từ ngày đầu tiên họ bước qua cánh cửa cho đến khi công ty rời khỏi kinh doanh.

Tỷ lệ cược là gì?

Đây không phải là " không lặp lại chính mình " lớn nhất trên hành tinh sao?


Điều này chỉ áp dụng nếu nhiều ứng dụng sử dụng một cơ sở dữ liệu
JMD Coalesce

1
@JMDCoalesce vốn phổ biến trong nhiều môi trường. Ứng dụng chính, báo cáo Excel, báo cáo phía máy chủ, trích xuất hàng loạt: nó sẽ sớm bổ sung. Hầu như bất kỳ ứng dụng ngân hàng nào cũng có vô số ứng dụng khách,
gbn

Chắc chắn nhưng không phải tất cả các ứng dụng dành cho ngân hàng.
JMD hợp nhất

29

Tôi đang chuyển câu trả lời cũ của mình qua phần chưa được chỉnh sửa từ các lập trình viên. Vì các câu trả lời dường như khá phân cực giữa các trang web.

Tôi biết tôi đang ở trong một thế giới bị tổn thương ở đây, nhưng đưa logic kinh doanh vào cơ sở dữ liệu vì:

  • Bạn có thể cho phép người dùng quyền lực kinh doanh truy cập trực tiếp vào cơ sở dữ liệu và không phải lo lắng về việc họ làm hỏng nó (hoặc lo lắng ít hơn so với logic dựa trên ứng dụng)
  • Người dùng có quyền có thể tạo báo cáo mới mà không cần chờ phát hành phần mềm mới.
  • Bạn có thể kiểm tra mã SP / TRIGGER trong một bản sao của cơ sở dữ liệu, giống như bạn kiểm tra logic dựa trên ứng dụng
  • Bạn có thể giữ SQL để tạo sp và kích hoạt trong tệp văn bản (dù sao bạn cũng nên làm điều này cho mã bảng / xem)
  • Bạn có thể trộn và kết hợp các ngôn ngữ mà không cần chuyển logic kinh doanh
  • Bạn có thể thay đổi logic nghiệp vụ mà không cần nâng cấp từng bit phần mềm
  • Cấu trúc kiểm toán của bạn thay đổi giống như cách bạn kiểm toán hoạt động cơ sở dữ liệu - thông qua đăng nhập
  • Bảo mật được cải thiện rất nhiều và kiểm soát truy cập chi tiết (hầu hết các triển khai logic dựa trên ứng dụng sử dụng mô hình bảo mật của riêng họ, vì vậy dữ liệu dễ dàng thỏa hiệp hơn. Mã hóa mật khẩu có thể đảo ngược không phải là hiếm)
  • Bảo mật người dùng phía cơ sở dữ liệu giúp giảm đáng kể thiệt hại / trộm cắp mà SQL có thể làm

Nhược điểm là: - Nhà phát triển bị đe dọa khi người dùng trở nên ít phụ thuộc hơn vào nhà phát triển cho báo cáo tùy chỉnh - Nhà phát triển cần học ngôn ngữ lập trình khác

Không ai trong số đó nên quan trọng đối với một nhà phát triển lành nghề.

Điều thú vị cần lưu ý, hầu hết các câu trả lời đều nói về 'logic ứng dụng', chứ không phải 'logic kinh doanh', như thể phần mềm không có ở đó để cung cấp chức năng kinh doanh.


1
* Các procs / kích hoạt được lưu trữ có thể cung cấp một mức độ trừu tượng cho phép bạn thực hiện các thay đổi cấu trúc trong cơ sở dữ liệu mà không phải thay đổi tất cả các mã ứng dụng. * Không phải mọi người dùng cơ sở dữ liệu sẽ trung thành sử dụng phần mềm trung gian của bạn. * C'mon, khóa ngoại quy tắc kinh doanh !! * Xóa tất cả các kiểm tra / ràng buộc / mã khỏi db có nghĩa là nó không thể tự bảo vệ mình khỏi sự không nhất quán / tham nhũng. * Mọi ứng dụng không yêu cầu các thiết kế giao dịch theo hàng đợi như eBay đã phát triển sau khi chúng thành công và có đủ khả năng để xây dựng nó. * SQL không quá khó, mọi người ạ.
Craig

23

Vấn đề quan trọng nhất là liệu có bất kỳ "lớp" nào bên trên cơ sở dữ liệu nghĩ rằng nó sở hữu dữ liệu hay không. Đồng thời và toàn vẹn dữ liệu là các vấn đề mà giải pháp là RDBMS - một số ứng dụng được phát triển như thể cơ sở dữ liệu chỉ là thùng bit cá nhân của chúng và tất nhiên cuối cùng chúng cũng cố gắng phát minh lại bánh xe theo mọi cách, cũng như bị phá vỡ không thể sửa chữa ngay khi một số ứng dụng khác truy cập vào cùng một cơ sở dữ liệu


1
Tôi nghĩ rằng bất cứ ai tài trợ cho hệ thống đều sở hữu dữ liệu - họ đã trả tiền cho nó. Ngoài ra tôi giải quyết rất nhiều vấn đề tương tranh trước khi chúng vào cơ sở dữ liệu - trong nhiều trường hợp thì dễ hơn nhiều.
AK

4
bạn đang sử dụng 'own' theo một nghĩa khác với tôi: quan điểm của tôi là nếu bạn 'giải quyết' các vấn đề tương tranh trước khi chúng tấn công cơ sở dữ liệu, bạn cũng phải đảm bảo rằng các ứng dụng của bạn là cơ sở dữ liệu duy nhất hoặc chúng phải được giải quyết tất cả hơn một lần nữa ở cấp độ đó. Tôi đồng ý với câu trả lời được bình chọn hàng đầu: "Mã cơ sở dữ liệu của bạn sẽ [có khả năng] tồn tại lâu hơn công nghệ ứng dụng khách của bạn."
Jack Douglas

17

Tôi đã viết lên câu trả lời của tôi cho điều này trong blog của tôi . Kết luận của tôi là, thực hiện nó trong ứng dụng sẽ không mở rộng quy mô một khi bạn xem xét toàn bộ vòng đời của ứng dụng.

Liên kết
3. Thêm các ràng buộc toàn vẹn / kiểm tra vào cơ sở dữ liệu cơ bản,với mã phức tạp hơn được triển khai trong ngôn ngữ thủ tục được lưu trữ của cơ sở dữ liệu. Từ đó, chúng tôi có một vị trí trung tâm để duy trì và chúng tôi thực thi tuyệt đối các quy tắc ngay cả đối với các ứng dụng mà chúng tôi không biết! Chúng tôi có một ngôn ngữ để thể hiện các quy tắc kinh doanh, trong toàn bộ danh mục ứng dụng và vòng đời của ứng dụng, vì ngôn ngữ du jour thay đổi thường xuyên hơn nhiều so với cơ sở dữ liệu. Và nó chạy trên một hệ thống vốn đã rất quan trọng như các ứng dụng quan trọng nhất. Lỗi được xử lý bởi mã hiện có xử lý lỗi cơ sở dữ liệu trong các ứng dụng đó. Tất nhiên vẫn có nguy cơ ứng dụng có thể bị hỏng, nhưng trong ba trường hợp, đây là trường hợp ít nhất và chỉ có ứng dụng bị hỏng cần bất kỳ sửa đổi nào, không phải tất cả trong số họ (và hầu hết các cơ chế SP / cơ sở dữ liệu sẽ cho phép tạo một ngoại lệ cho một ứng dụng nếu điều đó thực sự, thực sự cần thiết). Hãy nghĩ rằng điều này không quan trọng trong trang web của bạn hoặc công ty nhỏ? Chà, nếu công việc kinh doanh của bạn thành công, trong 30 năm nữa bạn sẽ ước mình được chú ý đến sự khôn ngoan của tôi!

Một số [phản đối] tôi thường nghe:

  • Thật khó để kiểm soát phiên bản mã SP được triển khai trong DB. Tôi không nghĩ đó là bất kỳ sự xác thực nào ngoài việc nói rằng việc kiểm soát phiên bản mã Java được triển khai trong một máy chủ ứng dụng rất khó, có nghĩa là, điều đó không khó chút nào, đó là chuyện thường. Và ở vùng đất Ruby, toàn bộ các cuốn sách được viết về cách đưa mã của bạn từ môi trường phát triển vào sản xuất, điều mà không một cộng đồng ngôn ngữ nào khác dường như phải vật lộn với. Tuy nhiên, phiên bản kiểm soát một thủ tục được lưu trữ dường như quá khó khăn.
  • Thủ tục lưu trữ là khó để kiểm tra. Đây là một thứ kì lạ. Để bắt đầu, SP được gõ mạnh; trình biên dịch sẽ cho bạn biết nếu có một đường dẫn mã vào hoặc ra không có ý nghĩa, và ít nhất trong Oracle, sẽ tính toán tất cả các phụ thuộc cho bạn. Vì vậy, đó là một bộ các bài kiểm tra đơn vị phổ biến mà bạn có thể cần trong Ruby đã loại bỏ con dơi. Để kiểm tra mã OO yêu cầu chế nhạo để ép đối tượng vào trạng thái bên trong được yêu cầu để thể hiện kịch bản thử nghiệm - cách thiết lập dữ liệu thử nghiệm khác nhau như thế nào? Có một nhà sản xuất TAP cho PL / SQL và các công cụ khác bên cạnh đó. Có trình gỡ lỗi và trình biên dịch quá.
  • Một ngôn ngữ thủ tục được lưu trữ không phải là một ngôn ngữ đầy đủ tính năng. Chà, chúng tôi không cố viết toàn bộ ứng dụng chỉ trong các thủ tục được lưu trữ! Hầu hết các ngôn ngữ SP chuyên dụng đều có tất cả các cấu trúc hiện đại mà bạn mong đợi và ít nhất trong Oracle, bạn có thể sử dụng Quy trình lưu trữ Java với tất cả các tính năng ngôn ngữ mà các nhà phát triển OO quen thuộc hoặc các thủ tục bên ngoài bằng bất kỳ ngôn ngữ nào. Điều quan trọng là nơi logic được triển khai - ở một nơi, gần với dữ liệu - ngôn ngữ thực tế chỉ là một chi tiết. PL / SQL biên dịch thành mã gốc và chạy trong quá trình với cơ sở dữ liệu; không có kiến ​​trúc hiệu suất cao hơn thế.
  • Tôi không muốn phải học một ngôn ngữ khác. Nhìn qua một giây, đây là một lá cờ đỏ khổng lồ trong bất kỳ nhà phát triển nào (đặc biệt là một đề xuất sửa đổi các ứng dụng sản xuất có thể bằng các ngôn ngữ khác!) Có rất nhiều điều để học để làm việc trong bất kỳ môi trường hiện đại nào: một cửa hàng Java điển hình có thể có Eclipse , WebLogic, Maven, Hudson, Anthill, Subversion và rất nhiều người khác, mà bạn cần tìm hiểu trước khi viết một dòng mã ứng dụng. Một kiến ​​thức làm việc về ngôn ngữ SP rất cao rất đơn giản khi so sánh, và nhiều khả năng sẽ có một chuyên gia hoặc một DBA xung quanh để giúp bạn. Chưa kể rằng Hibernate yêu thích của nhà phát triển đi kèm với ngôn ngữ truy vấn của riêng mình

Giáo dục


12

SQL có làm những việc như thiết lập bộ lọc kết quả theo định hướng ứng dụng và logic không? SQL là một ngôn ngữ thao tác thiết lập tuyệt vời.

Ngoài ra, như GBN đã chỉ ra ở trên, mã SQL sẽ gần như vượt xa mã ứng dụng.

Mặc dù đúng là EF hoặc NHibernate hoặc LinqToSql hoặc bất cứ điều gì sẽ cho phép bạn tạo mã nhanh hơn, mọi lập trình viên có giá trị hiệu suất của họ đều biết rằng chỉ tối ưu hóa SQL sẽ tối ưu hóa việc truy xuất dữ liệu. RDBMS chỉ hiểu SQL, vì vậy bạn phải biến mọi thứ thành SQL trước khi hoàn thành và nói. (giả sử rằng chúng ta có thể đồng ý rằng TSQL và PLQuery vẫn là SQL)


11

Một điều mà mọi người không nhất thiết phải thảo luận - những ưu điểm đã cạn kiệt ở đây - là chi phí.

Các CPU trên máy chủ cơ sở dữ liệu thường là các CPU đắt nhất trong mọi tổ chức khi nướng chi phí cấp phép phần mềm. Vì vậy, việc chuyển logic kinh doanh sang tầng dữ liệu là điều cần được thực hiện một cách thận trọng, không nhất thiết phải thống nhất.


7

Đây là nơi mà cuộc họp của các bộ óc, có nghĩa là, tâm trí của Nhà phát triển (DV) và DBA, chắc chắn phải xảy ra. Làm việc với Business Logic (BL) và lưu trữ như vậy trong cơ sở dữ liệu có thể có tác động có thể tôn vinh hoặc làm kinh hoàng việc thực hiện nó.

Đối với một số sản phẩm RDBMS, tồn tại các thư viện / công cụ / API ưu việt cho Cơ sở hạ tầng đối tượng và logic nghiệp vụ, người ta có thể nhanh chóng tìm hiểu và sử dụng trong các ứng dụng của mình. Đối với RDBMS khác, không có thư viện / công cụ / API nào tồn tại.

Trước đây, các ứng dụng máy chủ của khách hàng đã biến cầu nối thành BL thông qua Thủ tục lưu trữ (SP). Đối với các sản phẩm như Oracle và SQL Server, việc này đã được thực hiện sớm. Khi các cơ sở dữ liệu nguồn mở như PostgreSQL và MySQL ra đời, những người sử dụng chúng có nguy cơ phá vỡ nền tảng mới với các thủ tục được lưu trữ trong BL. PostgreSQL trưởng thành rất nhanh trong việc này, vì không chỉ các thủ tục lưu trữ được thực hiện mà cả khả năng tạo ngôn ngữ của khách hàng cũng xuất hiện. MySQL về cơ bản đã ngừng phát triển trong thế giới của các thủ tục được lưu trữ và xuất hiện dưới dạng một ngôn ngữ bị loại bỏ với nhiều hạn chế. Do đó, khi nói đến BL, bạn hoàn toàn chịu trách nhiệm về MySQL và ngôn ngữ Thủ tục lưu trữ của nó.

Thực sự chỉ còn một câu hỏi: Bất kể RDBMS, BL nên cư trú toàn bộ hay một phần trong cơ sở dữ liệu?

Hãy nghĩ về Nhà phát triển. Khi mọi thứ trở nên tồi tệ trong một ứng dụng, quá trình gỡ lỗi sẽ có Nhà phát triển nhảy vào và ra khỏi cơ sở dữ liệu để theo dõi các dữ liệu có thể có hoặc không chính xác không liên tục. Nó giống như mã hóa một ứng dụng C ++ và gọi mã Trình biên dịch ở giữa. Bạn phải chuyển từ mã nguồn, các lớp và cấu trúc sang các ngắt, thanh ghi và offset và TRỞ LẠI !!! Điều này lấy gỡ lỗi đến mức đó.

Các nhà phát triển có thể tạo ra một phương thức tốc độ cao để thực thi BL kết hợp với các cấu hình ngôn ngữ (cờ trình biên dịch cho C ++, các cài đặt khác nhau cho PHP / Python, v.v.) thông qua các đối tượng kinh doanh ngồi trong bộ nhớ thay vì trong cơ sở dữ liệu. Một số người đã cố gắng kết nối hệ tư tưởng này để mã runnng nhanh hơn vào cơ sở dữ liệu bằng cách viết các thư viện trong đó gỡ lỗi Thủ tục lưu trữ và Triggers được tích hợp tốt trong Cơ sở dữ liệu và dường như có thể sử dụng được.

Do đó, Nhà phát triển được thử thách phát triển, gỡ lỗi và duy trì mã nguồn và BL trong hai ngôn ngữ.

Bây giờ nghĩ về DBA. DBA muốn giữ Cơ sở dữ liệu tinh gọn và có nghĩa là càng nhiều càng tốt trong lĩnh vực thủ tục được lưu trữ. DBA có thể xem BL như một cái gì đó bên ngoài Cơ sở dữ liệu. Tuy nhiên, khi SQL gọi dữ liệu cần thiết cho BL, thì SQL cần phải gọn và có nghĩa.

Bây giờ, cho cuộc họp của tâm trí !!!

Mã nhà phát triển SP và sử dụng các phương thức lặp. DBA nhìn vào SP. DBA xác định rằng một câu lệnh SQL có thể thay thế các phương thức lặp được viết bởi Nhà phát triển. Nhà phát triển thấy rằng câu lệnh SQL được DBA đề xuất yêu cầu gọi mã hoặc SQL liên quan đến BL khác không tuân theo các kế hoạch thực hiện thông thường của câu lệnh SQL.

Theo cách này, cấu hình, điều chỉnh hiệu suất và mã hóa SP trở thành một chức năng về độ sâu và cường độ dữ liệu của BL để truy xuất dữ liệu. BL càng chuyên sâu và tăng cường dữ liệu, càng nhiều Nhà phát triển và DBA phải ở trên cùng một trang về lượng dữ liệu và sức mạnh xử lý được cung cấp cho Cơ sở dữ liệu.

PHẦN KẾT LUẬN

Cách thức truy xuất dữ liệu phải luôn liên quan đến cả hai trại Nhà phát triển và DBA. Phải luôn luôn phải nhượng bộ về phương thức mã hóa và mô hình truy xuất dữ liệu nào có thể làm việc cùng nhau, cho cả tốc độ và hiệu quả. Nếu việc chuẩn bị dữ liệu cho mã nguồn để xử lý chỉ được thực hiện một lần trước khi mã nhận được dữ liệu, DBA sẽ ra lệnh sử dụng SQL nạc và trung bình. Nếu BL là thứ mà DBA không đồng điệu, thì dây cương sẽ nằm trong tay Nhà phát triển. Đây là lý do tại sao DBA nên nhìn thấy bản thân và một phần của nhóm dự án chứ không phải là một hòn đảo cho chính mình, trong khi Nhà phát triển phải để DBA thực hiện tinh chỉnh SQL nếu điều đó đảm bảo.


4

Đó là một câu hỏi hay để hỏi tại một trang web đầy DBA. Hy vọng rằng hầu hết các câu trả lời sẽ là "pro" đối với việc giữ cơ sở dữ liệu ở trạng thái ACID và do đó giữ logic kinh doanh trong cơ sở dữ liệu. :-)

Theo ý kiến ​​của tôi, tôi nghĩ bạn nên triển khai logic nghiệp vụ trong cả ứng dụng và cơ sở dữ liệu của mình. Cách tiếp cận này sẽ tốn nhiều thời gian và tiền bạc hơn nhưng tôi nghĩ nó sẽ có một giải pháp kinh doanh tốt hơn về chất lượng.


1
Logic giống nhau ở hai lớp?
dezso

Nếu bạn muốn tạo một khách hàng mới và bạn phải lưu tên của anh ấy / cô ấy và số khách hàng (luôn chứa 4 số) Tôi muốn ứng dụng kiểm tra xem số khách hàng có hợp lệ không, trước khi gửi câu lệnh SQL tới tôi cơ sở dữ liệu (biết câu lệnh sẽ không vượt qua logic businness của tôi trong cơ sở dữ liệu).
Ruud van de Beeten

2
Tất cả logic businness nên được triển khai trong cơ sở dữ liệu (vì vậy đừng phân chia 'logic'). Mọi thứ bạn có thể dễ dàng kiểm tra trong các ứng dụng (Ví dụ với các biểu thức thông thường trong Javascript) sẽ ít hoạt động hơn đối với cơ sở dữ liệu (trong trường hợp đầu vào không hợp lệ).
Ruud van de Beeten

2
+1 đây là những gì tôi làm trên mạng Tôi chỉ gọi nó là "đưa thông tin đăng nhập doanh nghiệp vào cơ sở dữ liệu và đặt kiểm tra tiện lợi trong ứng dụng"
Jack Douglas

1
Bạn cần có một cách tiếp cận có hệ thống để thực hiện công việc này. Logic toàn vẹn cốt lõi làm cho dữ liệu luôn phù hợp với mong đợi cần được thực hiện trong cơ sở dữ liệu trước tiên. Duy trì giao tiếp tốt trở lại ứng dụng từ cơ sở dữ liệu về các điều kiện đặc biệt và khách hàng có thể giao tiếp chúng đầy đủ cho người dùng tiếp theo. Sau đó, dự đoán những điều đó trước khi thực hiện một chuyến đi đến cơ sở dữ liệu sẽ là phần trùng lặp nhất và nhất thiết phải được giữ đồng bộ - nếu bạn có thể giảm thiểu nhu cầu giữ những thứ này đồng bộ, bạn sẽ tốt nhất.
Cade Roux

2

Như Adam Musch đã nói ở trên, có nhiều điều cần xem xét ở đây cho hiệu suất. Sử dụng CPU. Sử dụng bộ nhớ.

Chặn những thứ rõ ràng sai từ việc vào cơ sở dữ liệu.

  • Loại bỏ các địa chỉ email không tuân thủ theo một số cách cơ bản.
  • Kiểm tra độ dài

Khi bạn nhận được sâu hơn đó là khi quyết định cần phải được đưa ra. Máy chủ DB là một nơi rất tốn kém để làm những việc mà khách hàng có thể làm dễ dàng. ví dụ: định dạng dữ liệu, định dạng ngày, chuỗi lắp ráp, vv phía máy khách.

Bạn có làm toán / xử lý tại máy khách hoặc trên máy chủ DB không? Đối với tôi điều đó phụ thuộc vào sự phức tạp và số lượng hồ sơ liên quan. Logic nghiệp vụ nên thực sự được thực hiện trong chính DB để mọi thứ được xử lý theo cùng một cách.
Bạn thực sự nên tạo một API các khung nhìn để đọc và lưu trữ các procs để ghi dữ liệu vào DB để tự cứu mình khỏi đau đầu trong tương lai.

Sử dụng điểm mạnh của mỗi đầu để lợi ích của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.