Tôi đã có một ứng dụng tạo ra một cuộc thảo luận khá sôi nổi giữa một vài nhà phát triển.
Về cơ bản, nó được chia thành một lớp web và một lớp phụ trợ. Lớp web thu thập thông tin bằng một hình thức web đơn giản, đưa dữ liệu này dưới dạng tài liệu JSON (nghĩa là tệp .json) vào thư mục theo dõi được sử dụng bởi mặt sau. Mặt sau sẽ thăm dò thư mục này cứ sau vài giây, chọn tệp và thực hiện các chức năng của nó.
Bản thân các tệp rất đơn giản (tức là tất cả dữ liệu chuỗi, không lồng nhau) và lớn nhất khoảng 1-2k, với hệ thống dành phần lớn thời gian nhàn rỗi (nhưng bùng nổ tới 100 tin nhắn tại bất kỳ thời điểm nào). Bước xử lý phụ trợ mất khoảng 10 phút cho mỗi tin nhắn.
Đối số xuất hiện khi một nhà phát triển đề xuất rằng sử dụng hệ thống tệp làm lớp nhắn tin là một giải pháp tồi, khi sử dụng một cơ sở dữ liệu quan hệ (MySQL), cơ sở dữ liệu noQuery (Redis) hoặc thậm chí là một lệnh gọi API REST đơn giản.
Cần lưu ý rằng Redis được sử dụng ở nơi khác trong tổ chức để xử lý tin nhắn xếp hàng.
Các đối số tôi đã nghe bị phá vỡ như sau
Có lợi cho các tập tin phẳng:
Các tệp phẳng đáng tin cậy hơn bất kỳ giải pháp nào khác, vì tệp chỉ được chuyển từ thư mục "xem", sang thư mục "xử lý" sau khi được chọn và cuối cùng đến thư mục "đã hoàn tất" khi hoàn tất. Không có nguy cơ tin nhắn biến mất, ngăn chặn các lỗi ở mức độ rất thấp, điều này sẽ phá vỡ mọi thứ khác.
Các tập tin phẳng đòi hỏi ít tinh tế kỹ thuật để hiểu - chỉ cần
cat
nó. Không có truy vấn để viết, không có nguy cơ vô tình bật một tin nhắn ra khỏi hàng đợi và nó sẽ biến mất mãi mãi.Mã quản lý tệp đơn giản hơn API cơ sở dữ liệu theo quan điểm lập trình, vì đó là một phần của thư viện chuẩn của mọi ngôn ngữ. Điều này làm giảm độ phức tạp chung của cơ sở mã và số lượng mã bên thứ ba phải được đưa vào.
Các nguyên tắc YAGNI tiểu bang mà các tập tin phẳng chỉ làm việc tốt ngay bây giờ, không có chứng minh nhu cầu thay đổi đến một giải pháp phức tạp hơn, do đó rời khỏi nó.
Có lợi cho cơ sở dữ liệu:
Dễ dàng mở rộng cơ sở dữ liệu hơn một thư mục chứa đầy các tệp
Các tệp phẳng có nguy cơ ai đó sao chép tệp "đã hoàn thành" trở lại thư mục "xem". Do tính chất của ứng dụng này (quản lý máy ảo), điều này có thể dẫn đến mất dữ liệu thảm khốc.
Yêu cầu sự tinh tế kỹ thuật hơn đối với T / S, ứng dụng có nghĩa là các nhân viên ít học ít có khả năng làm hỏng việc gì đó bằng cách chỉ chọc vào mọi thứ.
Mã kết nối DB, đặc biệt đối với một cái gì đó như Redis, ít nhất là mạnh mẽ như các chức năng quản lý tệp thư viện tiêu chuẩn.
Mã kết nối DB rõ ràng (nếu không hoạt động) đơn giản hơn từ quan điểm của nhà phát triển, vì mức độ cao hơn so với thao tác tệp.
Từ những gì tôi có thể thấy, cả hai nhà phát triển đều có rất nhiều điểm hợp lệ.
Vì vậy, trong hai người này, nhà phát triển tệp pro hoặc nhà phát triển cơ sở dữ liệu chuyên nghiệp, người nào phù hợp hơn với thực tiễn tốt nhất về kỹ thuật phần mềm, và tại sao?