تحليل / تمزيق مجمع ضخم XML إلى قاعدة بيانات SQL Server 2008 (30+ طاولات)

StackOverflow https://stackoverflow.com/questions/1876925

سؤال

قرأت هذا بالفعل: أفضل طريقة لإزالة بيانات XML في أعمدة قاعدة بيانات SQL Server و تبحث عن مثال تمزيق XML إدراج سائبة جيدة ل SQL 2005.

الاختلافات في سبب نشرها هي أنني أستخدم BizTalk 2009 و SQL 2008.

أتلقى بنية XML ضخمة من البائع باستخدام BizTalk. قام العميل بتطبيع هيكل XML إلى حوالي 30 طاولة على قاعدة بيانات MS / SQL Server 2008.

هل هناك أي حل سحري حتى الآن؟

يبدو لي هذه هي الخيارات:

1) محول BizTalk SQL جيد فقط لقواعد بيانات مسطحة بسيطة (وليس الكثير من الأعمال وعلاقات واحدة إلى أخرى).

2) اكتب برنامج WCF أ) استخدم LinQ وفضح كائن LINQ B) استخدام XML DOM التقليدي أو SAX Placing وبناء ADO.NET لتخزينها في قاعدة البيانات

3) اكتب بروك مخزنة معقدة تستخدم فتح / XML.

4) تخزين قاعدة البيانات مؤقتا في عمود SQL / XML، ثم استخدم بعض الأداة الأخرى "تمزيق وتطبيع" البيانات. هل هناك أي شيء في SSIS من شأنه أن يفعل هذا؟

5) اترك البيانات في عمود XML، واستخدم مؤشرات XML ولا تطبيعها أبدا. تضمين بيانات xquery / XPath القبيحة في طريقة عرض. لست متأكدا إذا كان وقت الاستجابة أو الاستعلامات سيكون كافية. قد يستغرق وقتا طويلا لتوليد Xqueries وآراء أثناء قيامه بإجراء أحد الخطوات الأخرى أعلاه.

أعتقد أن # 2 أو # 3 سيستغرق ساعة أو ساعتين على الأقل لكل جدول، وبالتالي إذا كان لدينا 30 طاولة، ما لا يقل عن 30 (إن لم يكن 60 ساعة) من مختلف أعمال مملة ومخدرة على الخطأ.

شكرا،

نيل والترز

تحديث 12/23: بعض البيانات العينة:

 <ns0:ValAgg xmlns:va="http://msbinfo.com/expresslync/rct/valuation" xmlns:ns0="http://TFBIC.RCT.BizTalk.Orchestrations.ValAgg">
- <MainStreetValuation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://msbinfo.com/expresslync/rct/valuation">
<ValuationIdentifier>
  <RecordId>1928876</RecordId> 
  <PolicyNumber>ESTIMATE-1928876</PolicyNumber> 
  <VersionId>6773220</VersionId> 
  </ValuationIdentifier>
  <RecordType>EST</RecordType> 
  <PolicyStatus>Complete</PolicyStatus> 
  <DataSource>WEB</DataSource> 
   <bunch more here/> 
<valuationAggregateFlat xmlns="http://tempuri.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <policyNumber>ESTIMATE-1928876</policyNumber> 
  <recordId>1928876</recordId> 
  <versionId>6773220</versionId> 
  <updateTimeStamp>2009-12-14T14:50:30.743</updateTimeStamp> 
  <replacementCost>166129</replacementCost> 
  <yearBuilt>1999</yearBuilt> 
  <totalLivingAreaSqFt>2000</totalLivingAreaSqFt> 
  <primaryRCTRoofTypeCode>15012</primaryRCTRoofTypeCode> 
  <TOPSRoofType>COPR</TOPSRoofType> 
  <StdFireRoofType>COPR</StdFireRoofType> 
  <primaryRTCConstructionTypeCode>10016</primaryRTCConstructionTypeCode> 
  <constructionType>BV</constructionType> 
  <hailProofIndicator>false</hailProofIndicator> 
  <anyWoodRoofIndicator>false</anyWoodRoofIndicator> 
  <allMetalRoofIndicator>true</allMetalRoofIndicator> 
  </valuationAggregateFlat>
</ns0:ValAgg>

حيث ترى "MainstreetValuation" يمكن أن يكون أيضا بضعة أنواع معقدة أخرى، مثل "Highvaluevaluation" حيث يختلف الهيكل بأكمله عن المنازل التي تحتوي على أشياء يتوهم.

هل كانت مفيدة؟

المحلول

ملاحظة سريعة: لا تمنعك حقيقة أنك تستخدم BizTalk 2009، بمفردها، من استخدام شيء مثل SSIS لتمزيقه ومعالجة XML بطريقة أخرى.


ما يلي طويل جدا للتعليق:

هناك مشكلة يجب أن تكون على دراية بمصدر XML. النظر في بنية XML مثل:

<root>
    <parent attr1="value1" attr2="value2">
        <child attrc1="valuec1" attrc2="valuec2"/>
        <child attrc1="valuec1" attrc2="valuec2"/>
    </parent>
    <parent> ... </parent>
    ...
</root>

ستكون نتيجة معالجة هذا من خلال مصدر XML مخرجين: واحد مع ATTR1 و ATT2، وآخر مع ATTRC1 و ATTRC2. يتم معالجة جميع المخرجات بشكل غير متزامن فيما يتعلق ببعضها البعض. ستحتاج إلى تربية الوالدين والصفوف الأصلية عن طريق العمود الاصطناعي الذي سيقدم SSIS. سيكون لكل من الوالدين عمود معرف، وسيكون لكل طفل نفس قيمة المعرف مثل "مفتاح أجنبي". قد تحتاج إلى القيام ببعض الأعمال القليل في قاعدة البيانات الخاصة بك لتتناسب مع الاثنين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top