在我的應用程式中,我的資料庫中有近 100 萬個條目。這些資料被轉換成一個/幾個 XML 檔案,這些檔案最終通過 xsd 進行驗證。如果出現錯誤,則無法將 xml 檔案發送到其目的地。
我不喜歡這種全有或全無的方法,經過長時間的處理后失敗。當資料在一天內輸入(到資料庫)時:有沒有辦法單獨驗證每個條目?由于性能問題,我不想為每個條目創建一個檔案,所以我想知道是否有辦法將 xsd 提取到一個 java 物件中,然后在代碼中對其進行部分驗證?
你能幫我嗎?
uj5u.com熱心網友回復:
與其說是開發問題,不如說是架構問題。這里有一些想法:
當資料進入資料時,您可以將其發布到 Kafka 主題中,訂閱者將接收進入主題的資料,對其進行驗證,然后寫入最終檔案或對不良記錄發出警報。如果資料庫支持,您可以在資料庫上添加觸發器。
您沒有描述如何將資料從資料庫提取到 XML 檔案,也許您可??以在那里使用分頁并創建更小的檔案。
您可以使用 Apache Spark 之類的東西從資料庫中讀取資料,使用 JDBC 連接,修改資料幀中的內部表示,然后直接輸出檔案。1m 條目(取決于您的記錄有多寬)對 Spark 來說不算什么。
某些資料庫支持 Java 中的用戶定義函式,因此您可以直接在資料庫級別進行 XSD 驗證(這確實不是我最喜歡的,但仍然是一個選項)。
筆記:
- 您可能知道這一點,但要小心創建數百萬個小檔案,這會殺死您的系統(因此推薦 Kafka)。
- 無論您是在本地還是在云中,建議都會有所不同,因為您可以利用一些 PaaS 服務。
uj5u.com熱心網友回復:
您可以將資料輸入到流模式感知 XSLT 3.0 轉換中,其邏輯為
<xsl:mode streamable="yes">
<xsl:template match="record">
<xsl:try>
<xsl:copy-of select="." validation="strict"/>
<xsl:catch errors="*"/>
</xsl:try>
</xsl:template>
并且(如果使用 Saxon)您可以通過提供InvalidityHandler每次遇到無效資料時通知的來捕獲驗證錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/346488.html
