6

Tôi không yêu cầu ý kiến ​​mà về các tài liệu.Thủ tục được lưu trữ hoặc mã số

Chúng tôi có rất nhiều tệp dữ liệu (XML, CSV, Plantext, v.v ...) và cần xử lý chúng, dữ liệu khai thác chúng.

Người cơ sở dữ liệu khách hàng tiềm năng đề xuất sử dụng quy trình được lưu trữ để thực hiện tác vụ. Về cơ bản, chúng tôi có một bảng dàn dựng nơi tệp được đăng theo thứ tự và được lưu vào một cột hoặc cột XML. Sau đó, từ đó ông đề xuất để tiếp tục sử dụng thủ tục lưu trữ để xử lý các tập tin.

Tôi là nhà phát triển ứng dụng có nền tảng db, phát triển ứng dụng nhiều hơn và tôi có thể thiên vị, nhưng việc sử dụng logic này trong DB có vẻ như một ý tưởng tồi và tôi không thể tìm thấy bất kỳ tài liệu nào để chứng minh hoặc không chấp thuận những gì tôi gọi là đặt một chiếc xe trên một đường ray xe lửa để kéo một tải trọng của hàng hóa. Vì vậy, các câu hỏi của tôi là: DB (Oracle, DB2, MySQL, SqlServer) hoạt động tốt như thế nào khi chúng ta nói về tìm kiếm biểu thức chính quy, tìm kiếm và thay thế dữ liệu trong một clob, dom traversal, đệ quy? So với một ngôn ngữ lập trình như Java, PHP, hoặc C# trên cùng một vấn đề.

Sửa

Vì vậy, những gì tôi đang tìm tài liệu về phân tích so sánh/thời gian chạy của một ngôn ngữ lập trình cụ thể so sánh với một DBMS, đặc biệt là cho tìm kiếm chuỗi và thay thế, tìm kiếm biểu hiện thường xuyên và thay thế. XML Dom traversal. Sử dụng bộ nhớ trên các cuộc gọi phương thức đệ quy. Và cụ thể là họ mở rộng như thế nào khi gặp phải 10 - 100 GB dữ liệu.

+1

SP: s rất phù hợp cho việc lựa chọn và tập hợp. Họ dễ dàng trở thành một mớ hỗn độn không thể duy trì khi xử lý khác (chuỗi, phân tích cú pháp, toán học, vv) có liên quan. Hiệu suất thực sự là một vấn đề? – adrianm

+0

Bảo trì không phải là một trong những mối quan tâm của tôi bởi vì nếu chúng tôi đã làm theo các tuyến đường của việc sử dụng SP, sau đó tôi không duy trì hệ thống, DBA là. Nhưng tôi không muốn đứng yên khi tôi thấy điều gì đó ngu xuẩn đang được thực hiện, vì vậy chỉ tranh luận với tôi hợp lệ với anh ấy là tôi có thể làm điều này tốt hơn và hiệu quả hơn vì biến bảo trì đã được lấy ra khỏi phương trình của tôi. – Churk

+1

"khai thác dữ liệu" là một thuật ngữ quá tải. Nó có thể có nghĩa là bất cứ điều gì từ tính toán trung bình đến phương pháp thống kê phức tạp của $ O (n^3) $ hoặc thời gian chạy tồi tệ hơn. Xin hãy chính xác hơn. Bởi vì một số điều rõ ràng sẽ được dễ dàng để làm bằng cách sử dụng thủ tục được lưu trữ. Những người khác sẽ là một nỗi đau để làm theo cách này! –

Trả lời

1

Có vẻ như bạn sắp ném logic nghiệp vụ vào lớp lưu trữ. Đối với các hoạt động như bạn mô tả, bạn không nên sử dụng cơ sở dữ liệu. Bạn có thể sẽ tìm cách tìm cách giải quyết cho người trình diễn hoặc tạo ra các giải pháp kỳ quặc vì tính không linh hoạt.

Cũng nên lưu ý đến tính bảo trì. Có bao nhiêu người sau này sẽ có thể duy trì giải pháp?

Nói về tốc độ, chọn đúng ngôn ngữ lập trình bạn sẽ có thể xử lý dữ liệu theo nhiều chủ đề. Cuối cùng, cảm giác của bạn với chiếc xe n tàu là đúng;)

+0

Tôi hiểu tất cả những điều đó. Nhưng những gì tôi cần là tài liệu về những gì thông thường sẽ giải thích. Nếu không có một số tài liệu, lập luận của tôi là hợp lệ như tôi tin rằng điều này nhưng tôi không phải là một chuyên gia. Giống như tôi nói rằng tôi là một nhà phát triển ứng dụng và tôi chắc chắn không tin vào việc đưa bất kỳ logic nào vào một lớp lưu trữ. Vì vậy, tôi hy vọng một người nào đó trong cộng đồng có thể đã đọc một cái gì đó có thể biện minh cho những gì tôi nghĩ là sự thật. – Churk

+0

Sẽ không có ý nghĩa gì khi trả lời câu trả lời. Các đối số bạn đang tìm kiếm là tiên đề trong phát triển phần mềm. Bạn sẽ tìm thấy nhiều tài liệu về điều đó. Không có suy nghĩ xấu về quan điểm của bạn, chúng tôi chỉ có thể cung cấp cho bạn nhiều điểm tranh luận hơn như khả năng bảo trì và khả năng song song hóa thuật toán bằng cách lập trình nó. –

+0

Theo chỉnh sửa của bạn, bạn nên thực hiện nó bên ngoài lớp DB. Bạn linh hoạt hơn nhiều, đặc biệt là trong "XML Dom traversal" và "các cuộc gọi phương thức đệ quy", không phải là một phần của lớp lưu trữ. Nếu DBA của bạn sẽ làm tất cả điều này, điều này sẽ chỉ là một chứng minh-khái niệm, sẽ mất nhiều thời gian và chi phí đáng kinh ngạc. Tôi chỉ có thể lặp lại tôi và các câu trả lời khác: Lớp lưu trữ không được thực hiện cho việc này, nó sẽ tự nhiên tồi tệ hơn nhiều. –

1

Tốt hơn là kéo logic xử lý ra khỏi lớp dữ liệu. Việc triển khai việc triển khai trong cơ sở dữ liệu của bạn sẽ khó khăn.

Bạn nhận được sự tự do và tùy chọn để lựa chọn giữa các thư viện và so sánh hiệu suất của chúng nếu việc thực hiện được thực hiện với bất kỳ ngôn ngữ nào. Hơn nữa, bạn có thể chọn các khung công tác như (Spring-Batch for Java) để xử lý khối lượng lớn dữ liệu dưới dạng tiến trình hàng loạt.

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