Các lập trình viên có nên sử dụng SSIS không, và nếu có thì tại sao? [đóng cửa]


94

Là một nhà phát triển .NET, vì những lý do nào tôi nên thích các gói SSIS hơn là viết mã? Chúng tôi có rất nhiều gói hàng đang được sản xuất ở nơi tôi hiện đang làm việc và chúng là một cơn ác mộng khi phải "viết" (có lẽ là vẽ?) Và bảo trì. Mỗi gói trông giống như một bát mì Ý nhiều màu với các tập lệnh C # và VB.NET được trộn lẫn ở những điểm mà sự trừu tượng bị phá vỡ. Để tìm ra những gì mỗi "Thực thi SQL Task" hoặc "Foreach Loop" làm, tôi phải nhấp đúp vào thứ chết tiệt đó và duyệt qua một cây các giá trị và biểu thức theo nghĩa đen, nằm rải rác trên nhiều tab.

Tôi cởi mở, vì vậy tôi muốn biết liệu có bất kỳ nhà phát triển giỏi nào khác thấy SSIS hiệu quả hơn việc chỉ viết một số mã hay không. Nếu bạn thấy SSIS hiệu quả hơn, vui lòng cho tôi biết lý do.


4
không biết nó hoạt động như thế nào, nhưng SSIS nhanh hơn rất nhiều so với bất kỳ mã thủ công nào tôi đã viết để tạo kho dữ liệu. đó là một công cụ được thiết kế cho công việc - cố gắng phá vỡ các nhiệm vụ thành các gói đứa trẻ đó thực hiện từ một gói tổng thể
Ông Shoubs

1
Liên kết đến một câu hỏi tương tự: stackoverflow.com/q/690123/327165
Ilya Berdichevsky

5
Chỉ cần xem qua điều này. Tôi đang làm việc để duy trì một số gói SSIS có vấn đề và đã viết một trình dịch ngược để trích xuất công việc hữu ích từ chúng vào một chương trình C #. code.google.com/p/csharp-dessist
Ted Spence,

5
Theo kinh nghiệm của tôi, SSIS có thể gây khó khăn nếu bạn có các đoạn mã "dài" và / hoặc "phức tạp" hoặc nhiều đoạn mã. Gỡ lỗi ứng dụng bảng điều khiển dễ dàng hơn. Trong SSIS, bạn không thể tự gỡ lỗi tập lệnh của mình. Các thông báo lỗi được tạo ra do một tập lệnh khó hiểu và bạn không thể nhìn thấy chính xác dòng gây ra lỗi. IMO, nếu nhu cầu của dự án có thể được đáp ứng với các thành phần SSIS tiêu chuẩn, thì SSIS có thể là cách để đi. Tuy nhiên, bạn cần biết những hạn chế của các thành phần SSIS. Ví dụ: Video này cho bạn biết tại sao "nhiệm vụ gửi thư" gần như vô dụng - youtube.com/watch?v=IlUzkMPYDSk
Steam

3
câu hỏi này có 7 câu trả lời, vì vậy nó không gây tranh luận, tranh luận, thăm dò ý kiến ​​hoặc thảo luận mở rộng. Tại sao không giữ nó mở?
Michael Freidgeim

Câu trả lời:


94

Tôi sử dụng SSIS hàng ngày để duy trì và quản lý một kho dữ liệu lớn và khối lập phương. Tôi đã kinh doanh 100% trí tuệ và lưu trữ dữ liệu trong hai năm. Trước đó, tôi là nhà phát triển ứng dụng .NET cho 10.

Giá trị của SSIS là một công cụ quy trình làm việc để di chuyển dữ liệu từ vị trí này sang vị trí khác với một số biến đổi hạn chế và phân nhánh có điều kiện trên đường đi. Nếu các gói của bạn chứa nhiều tập lệnh thì nhóm của bạn đang sử dụng SSIS cho các nhiệm vụ sai hoặc không thích SQL hoặc đã mua phải sự cường điệu. Các gói SSIS rất khó gỡ lỗi. Các thành phần tập lệnh là một cơn ác mộng tuyệt đối và chỉ nên được sử dụng để định dạng, lặp lại hoặc là phương sách cuối cùng.

  1. Giữ cho các gói của bạn đơn giản, các tác vụ sql và các tác vụ luồng dữ liệu.
  2. Làm càng nhiều việc càng tốt bên ngoài SSIS, tốt nhất là trong SQL
  3. Giữ các biến của bạn trong một phạm vi toàn cầu duy nhất
  4. Giữ SQL của bạn trong các biến hoặc thủ tục lưu trữ, không bao giờ nằm ​​trong dòng
  5. Giữ các giá trị biến của bạn trong kho cấu hình, tốt nhất là cơ sở dữ liệu SQL

1
Với những rắc rối mà tôi đã gặp phải với SSIS, tôi sẽ đưa ra một câu trả lời thiên vị hơn (như thể bạn không thể biết được âm điệu của câu hỏi của tôi :)). Câu trả lời hay đấy, Kevin.
Charles

6
Bạn đã làm việc với .NET trong 10 năm như thế nào nếu nó được phát hành vào năm 2002?
Brady Holt

7
[quote] Microsoft bắt đầu phát triển .NET Framework vào cuối những năm 1990, ban đầu dưới tên Dịch vụ Windows Thế hệ Tiếp theo (NGWS). Vào cuối năm 2000, phiên bản beta đầu tiên của .NET 1.0 đã được phát hành [/ quote] Đó là cách, có lẽ anh ấy đang làm việc với bản beta.
nitefrog

Câu hỏi đã được trả lời vào năm 2010, vì vậy hãy lấy hai năm BI, và sau đó là 10 năm nữa, cho năm 1998, hai năm trước khi phát hành bản beta mà bạn đề cập. Nếu không, câu trả lời tốt! :)
finoutlook

Vâng, phạm vi toàn cầu có ý nghĩa. Nếu bạn làm cho nó cục bộ và muốn truy cập nó ở nơi khác, thì bạn có vấn đề. Bạn không thể chỉ đơn giản là thay đổi phạm vi cục bộ thành toàn cầu. Thay vào đó, bạn phải nhấp nhiều và xóa. Nếu bạn có thậm chí 10-15 người dân địa phương, điều này sẽ trở thành một nỗi đau.
Steam

52

Tôi đã thử sử dụng SSIS vài lần và từ bỏ nó. IMO dễ dàng hơn nhiều khi chỉ làm tất cả những gì tôi cần trong C #. SSIS quá phức tạp, nó có quá nhiều vấn đề và nó không đáng. Sẽ tốt hơn nhiều nếu dành nhiều thời gian cho việc cải thiện các kỹ năng C # hơn là dành cùng một thời gian cho việc học SSIS - bạn sẽ nhận được nhiều lợi nhuận hơn sau quá trình đào tạo của mình.

Ngoài ra, việc tìm kiếm và duy trì chức năng trong một giải pháp VS dễ dàng hơn rất nhiều. Kiểm tra đơn vị với VS rất dễ dàng. Tất cả những gì tôi cần làm là kiểm tra nguồn trong Subversion và xác minh cách nó tải. Các gói SSIS kiểm tra đơn vị có liên quan rất nhiều để nói một cách nhẹ nhàng.

Bên cạnh đó, có những tình huống khi SSIS âm thầm không điền vào một số cột trong một số hàng, chỉ bỏ qua chúng mà không đặt ra ngoại lệ. Chúng tôi đã dành rất nhiều thời gian để khắc phục sự cố và tìm hiểu điều gì đang xảy ra. Việc phát triển một giải pháp thay thế trong C # chỉ mất chưa đầy một giờ và hoạt động mà không gặp bất kỳ sự cố nào trong hai năm.


Cảm ơn cho điểm của bạn Alex. Đây là một ví dụ về những gì tôi nghĩ có thể là một gotcha - stackoverflow.com/questions/21616435/… .
Steam

2
Có danh sách tất cả các chủ đề lập trình C # / mà một nhà phát triển ETL PHẢI biết không? Ví dụ. LINQ, SqlDataReader, DataTable, v.v. Tôi cũng cảm thấy rằng SSIS không tốt cho các tác vụ phức tạp. Nếu bạn có một dự án / nhiệm vụ "sao chép-dán" dễ dàng, thì SSIS có thể là công cụ tốt nhất.
Steam

@blasto bạn đã dùng thử Rhino ETL chưa: ayende.com/blog/3102/rhino-etl-2-0
AK

Alex, câu trả lời của Jerome cũng gợi ý Rhino ETL. Nó có vẻ mù mờ đối với tôi. Vì vậy, tôi sẽ do dự khi sử dụng nó vì thiếu tài liệu, hỗ trợ và hướng dẫn. Ngoài ra, có vẻ như chỉ có một nhà phát triển đang làm việc trên nó. Điều đó làm giảm niềm tin của tôi vào công cụ. Tôi sẽ thử cái này vì vui hoặc vì tò mò, nhưng tôi không thể sử dụng nó cho một dự án thực sự. Cảm ơn.
Steam

Nếu ai đó muốn có hướng dẫn về Rhino ETL (với C # thuần túy) thì đây là một - codeproject.com/Articles/34556/Write-ETL-jobs-in-pure-C
Steam

14

Theo ý kiến ​​của tôi - SSIS chỉ dành cho các hoạt động ETL và không được chứa logic nào ngoài phạm vi đó.


8
ETL = Trích xuất tải biến đổi
Christoph

3
Đó là khá nhiều cảm giác của tôi. Trong trường hợp của chúng tôi, chúng tôi đang sử dụng SSIS để thực hiện những thứ như CSV email (hoặc SFTP) chứa thông tin giá cả. Phân nhánh, tập lệnh nhúng, v.v. khá kinh khủng. Nếu chỉ di chuyển một số dữ liệu xung quanh bằng SSIS, có lẽ nó sẽ không tệ như vậy.
Charles

1
Tôi nghĩ rằng câu trả lời của bạn có thể có một số chiều sâu hơn.
Steam

3
Chữ T trong ETL có thể không liên quan đến một số logic không? Chỉ cần một ý nghĩ ...
cs0815

Nếu nó chỉ liên quan đến định hình / định tuyến dữ liệu, chắc chắn. Nhưng tôi sẽ tránh mọi logic kinh doanh.
Christoph

11

Tôi đã có trải nghiệm đáng tiếc khi làm việc trong một dự án mà chúng tôi nghĩ rằng SSIS sẽ là một giải pháp đủ tốt để tổng hợp và kết hợp dữ liệu từ một số nguồn. Điều đáng tiếc là ban đầu nó hoạt động rất tốt nhưng sau đó các yêu cầu thay đổi và chúng tôi (cuối cùng) nhận ra rằng đó là công cụ sai.

có thể chúng tôi đã sử dụng nó không đúng cách nhưng chúng tôi đã gặp rất nhiều khó khăn nếu chúng tôi đã từng thay đổi lược đồ của mình và cuối cùng chúng tôi chỉ sử dụng lại các định nghĩa ORM của mình từ giao diện người dùng để viết một công cụ tùy chỉnh trong C # để thực hiện việc này. Bởi vì chúng tôi đã có datamodel, điều này thật dễ dàng. rõ ràng là YMMV và tôi không phải là chuyên gia SSIS, nhưng trong một trường hợp này, SSIS đã gây ra rất nhiều công việc trùng lặp và đau đầu khi chỉ cần xắn tay áo lên và 'viết mã tay' nó dễ dàng hơn mong đợi.

Vì vậy, tôi sẽ nghĩ đến tính linh hoạt rất nhiều khi xem xét SSIS.


7
Tôi chia sẻ một số cảm xúc tương tự. Thật dễ dàng để cấu trúc lại mã ... không quá nhiều với DSL trực quan.
Charles

Luke, bạn có thể vui lòng cho chúng tôi biết sơ lược về các yêu cầu dự án của bạn không? Cảm ơn.
Steam

@blasto, chúng tôi đang cố gắng tích hợp dữ liệu từ một số cơ sở dữ liệu và sử dụng một số tiện ích so khớp chuỗi xác suất được tích hợp sẵn để hợp nhất dữ liệu từ các hệ thống khác nhau (về cơ bản là cơ sở dữ liệu CRM). Đã hơn 5 năm trước nên tôi không nhớ tất cả các chi tiết.
luke

Nếu bạn là một cửa hàng .net và đang tham gia vào việc di chuyển dữ liệu cho mục đích lưu trữ dữ liệu, SSIS sẽ chỉ giúp bạn nếu bạn hiểu rõ về nó. Tôi đã thấy nhiều người là chuyên gia về .net nhưng không hiểu hoàn toàn về SSIS (và tôi không đổ lỗi cho họ). SSIS chắc chắn yêu cầu một người hiểu rõ về nó, nếu không, bạn sẽ phải viết các gói không hiệu quả và không thể làm đúng.
rvphx

6

SSIS có vị trí của nó, và vị trí đó không phải là chương trình chung hoặc thay thế cho các thủ tục được lưu trữ. Nó đến từ trường ETL (Trích xuất, Biến đổi và Tải) và đó là vị trí thứ n của nó.

Tên cũ (DTS, Dịch vụ chuyển đổi dữ liệu) và tên mới (SSIS, Dịch vụ tích hợp máy chủ Sql) đều cho thấy rõ ràng đó là một dịch vụ (hoặc tập hợp các dịch vụ) được thiết kế để thao tác dữ liệu nhằm tích hợp cơ sở dữ liệu SQL Server vào các quy trình lớn hơn.


Tôi không hiểu làm thế nào câu trả lời này sẽ nhận được nhiều ủng hộ như vậy. Nó không đề cập đến lý do tại sao SSIS không thể cung cấp cho bạn sức mạnh của một ngôn ngữ lập trình. Nó làm cho không có ý nghĩa với tôi. Một ví dụ về trường hợp SSIS không khớp với ngôn ngữ lập trình là gỡ lỗi. Rõ ràng, SSIS 2012 thay đổi điều đó. Vì vậy, có thể là, chỉ có thể là, công cụ này đang trên đường trở nên thân thiện hơn với lập trình viên.
Steam

>> Một ví dụ về trường hợp SSIS không khớp với ngôn ngữ lập trình ... Tôi đồng ý - nó không phải là ngôn ngữ lập trình. Nó là một công cụ ETL tốt.
DaveE

4

Nếu bạn muốn di chuyển dữ liệu của mình theo lập trình, bạn có thể muốn xem xét Rhino ETL.

Tôi cũng đang làm việc trên khuôn khổ của riêng mình, Fluent ETL , vì tôi thấy SSIS hơi quá tham gia vào các tác vụ dữ liệu đơn giản liên quan đến phát triển, chẳng hạn như tải dữ liệu kiểm tra đơn vị từ tệp CSV.


Rhino ETL rất khó hiểu và chỉ có 24 câu hỏi trên SO tính đến thời điểm hiện tại - stackoverflow.com/questions/tagged/rhino-etl . Tôi nghĩ rằng C # sẽ đủ tốt cho ETL, nếu bạn có kiến ​​thức và kinh nghiệm.
Steam

1
Có bất kỳ lựa chọn thay thế phổ biến nào cho Rhino ETL không?
Steam

3

SSIS không phải là một chương trình. Rất nhiều phần mềm được thực hiện nhanh hơn trong SSIS và bạn nhận được tiến trình và thông tin lỗi rất chi tiết với tư cách là quản trị viên - điều này có thể rất tốt trong các tình huống SSIS được sử dụng để giải quyết, bởi vì đôi khi mọi thứ xảy ra sai và quản trị viên cần rất nhiều thông tin.

Điều đó đang được nói, SSIS không thực sự hữu ích nếu bạn không có nội dung tự học - chúng được thiết kế cho một cái gì đó, việc tham gia quá nhiều vào lập trình chung khiến chúng trở nên tệ hại.


2
Bạn có thể cho chúng tôi một ví dụ về cách SSIS có thể đẩy nhanh sự phát triển trong một tình huống và làm chậm lại những tình huống khác không?
Steam
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.