2009-11-20 41 views
7

Tôi đã gặp phải sự cố mà tôi cần nhập một XML (> 1Gb) khổng lồ vào SQL Server 2008 hàng ngày. Những gì tôi có bây giờ là một tệp XML mẫu và lược đồ XML của nó. Các lược đồ XML là khá phức tạp, trong đó có nhiều tùy chỉnh được định nghĩa kiểu đơn giản, và phần tử với kiểu phức tạp như:Nhập dữ liệu XML khổng lồ (> 1Gb) vào SQL Server 2008 hàng ngày

<xs:element name="xxxx_url"> 
     <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:anyURI"> 
        <xs:attribute ref="target" use="optional"/> 
        <xs:attribute ref="abc" use="optional"/> 
       </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
</xs:element> 

Sau khi nhập khẩu, một dịch vụ WCF sẽ được thực hiện để lấy các dữ liệu lưu trữ trong SQL Sever, một cái gì đó như tìm kiếm , truy xuất v.v. (hoạt động chỉ đọc).

Các bước thực hiện tôi có thể nghĩ là như:

  1. Xác định một mô hình đối tượng theo XSD cung cấp (bằng tay), mô hình đối tượng sẽ được sử dụng cho dịch vụ WCF để trở về giá trị.
  2. Xác định lược đồ cơ sở dữ liệu từ XSD được cung cấp (thủ công), giản đồ được ước tính có khoảng 20 - 30 bảng.
  3. Tạo gói SSIS để tải XML vào cơ sở dữ liệu hàng ngày.
  4. Tạo dịch vụ WCF đọc từ cơ sở dữ liệu, điền dữ liệu vào mô hình đối tượng được xác định trong bước 1 và trả về đối tượng cho ứng dụng khách.

Vấn đề là các bước này liên quan đến rất nhiều công việc thủ công. Tôi phải nghiên cứu hàng XSD theo hàng và chuyển đổi nó thành mô hình đối tượng và lược đồ cơ sở dữ liệu mannualy.

Tôi đã thực hiện một số nghiên cứu rằng có một số công cụ tự động hóa để chuyển đổi XSD thành các lớp và cũng chuyển đổi XSD thành lược đồ cơ sở dữ liệu. Nhưng các lớp được chuyển đổi từ XSD bằng công cụ này là khá sai, và việc chuyển đổi thành lược đồ không thành công vì nó không phù hợp với định dạng tập dữ liệu MS.

Tôi tự hỏi có giải pháp nào tốt cho vấn đề này không, để tiết kiệm rất nhiều công việc thủ công?

Bất kỳ đề xuất nào được đánh giá cao!

+0

Nếu hiệu suất/sử dụng bộ nhớ là quan trọng, hãy xem vtd-xml. –

Trả lời

3

Tại một thời điểm nào đó, bạn phải thực hiện chuyển đổi. Cho dù bạn làm như vậy đọc XML vào các đối tượng hoặc vào dữ liệu trong bảng. Công việc nên được thực hiện một lần và sau đó bạn chỉ cần chạy tiến trình kết quả. Các vấn đề tôi thấy là:

  • XML rất lớn.

  • Bạn chưa có ánh xạ XSD cho giản đồ mong muốn của mình.

Lập bản đồ hoạt động mà bạn sẽ phải làm. Tôi nghĩ rằng nó sẽ hoạt động tốt nhất nếu bạn có thể nhập khẩu XSD vào bảng và sau đó nhập từ bảng tạm thời đó vào lược đồ mà bạn muốn sử dụng. Làm việc với tệp XML sẽ cung cấp cho bạn các vấn đề do kích thước của nó.

Vì vậy, đề xuất của tôi là buộc/fudge việc nhập XML vào cấu trúc bảng nào sẽ hoạt động. Sau đó viết một thủ tục được lưu trữ để "nhập" dữ liệu từ các bảng đó vào lược đồ "thực" của bạn.

Pat O

0

thử spliting xml nó nhiều hơn sau đó một tập tin vì vấn đề tương lai mà những thứ như ýÿơƝƈï thể xuất hiện trong cơ sở dữ liệu do lỗi tải lên

0

Nói tóm lại, giải pháp của chúng tôi sẽ yêu cầu một số công việc - không có sửa chữa nhanh.

Để có khả năng mở rộng, tôi khuyên bạn nên sử dụng công nghệ cho phép bạn truyền qua XML (a-la SAX) trái ngược với việc cố tải và chuyển tải tất cả trong RAM. Đối với mục đích SSIS, không có nhiều giá trị trong việc chuyển đổi XML thành một biểu đồ đối tượng, vì vậy hãy xem xét bất kỳ cơ hội nào sau đây:

  1. Luồng và đọc tài liệu XML bằng tập lệnh tùy chỉnh với nhiều đầu ra , sau đó sử dụng các thành phần SSIS khác để chuyển đổi dữ liệu kết quả.
  2. Tải hàng loạt (luồng) XML vào một phiên bản dàn dựng của máy chủ SQL, sau đó truy vấn XML từ đó (không phải là giải pháp tuyệt vời, nhưng dễ dàng hơn 1.) hoặc
  3. Bán thành tài liệu thành các đoạn nhỏ hơn, tải khối lượng lớn các đoạn đó vào một khu vực dàn dựng, sau đó làm việc trên chúng một cách riêng biệt bằng cách sử dụng các phép biến đổi XSD, vv Điều này mở ra cánh cửa cho tính song song tốt hơn.
+2

SSIS bao gồm Nguồn XML có thể tạo ra nhiều kết quả đầu ra từ XML khớp với một lược đồ. Nó hoạt động tốt, mặc dù với nhiều XML lồng nhau, nó tạo ra một _lot_ của các đầu ra, với các khóa thay thế. –

+0

@John - nguồn XML được vận chuyển có truyền XML hay không, nó có chuyển đổi toàn bộ tài liệu không? – Mark

+0

Tôi không tin rằng nó áp dụng bất kỳ biến đổi nào. Tôi không biết liệu nó có phân tích toàn bộ tài liệu trước hay không. Tôi đã có một trường hợp mà tôi cần phải đọc một tài liệu được chuyển đổi, và đã viết nguồn tùy chỉnh của riêng tôi để làm cả hai, vì vậy tôi không biết phiên bản OOB làm gì. –

0

Bạn có dữ liệu ví dụ bạn có thể đăng với ít nhất một giá trị dữ liệu bản ghi đầy đủ không?

Ngoài ra, bạn có quyền truy cập vào cơ sở dữ liệu nguồn được sử dụng để tạo dữ liệu XML này không? XML không thực sự được thiết kế cho kích thước truyền dữ liệu này - nhiệm vụ của bạn sẽ dễ dàng hơn nhiều với dữ liệu ở định dạng tệp phẳng cho mỗi bảng.

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