2017-11-11 151 views
0

我每天都會收到一個平面文件(CSV),其內容會被導入到我的數據庫中(而不是通過Web表單,POS等的數據輸入)。有一個記錄中有40個字段,我有600,000個獨特的記錄。平面文件作爲輸入 - MySQL最佳實踐

到目前爲止,我還沒有看到有必要將這個關係數據庫作爲關係數據庫,儘管肯定會有一些規範化使它更有效;重複的產品,商店,客戶,經銷商等

如果我從一開始就開始並以某種方式逐步輸入數據,我會知道如何做到這一切(我經歷的每一個資源都涵蓋了但是當你有大量的數據並且需要使它成爲關係時,沒有一種方法可以覆蓋它)。並且隨着CVS每天到來,我不太清楚在數據庫建立後如何導入數據。如果我將這40個字段分成5個表格,那麼我必須以同樣的方式拆分每日文件並一次導入它們一個嗎?外鍵會以這種方式更新嗎?

如果有人能把我推向正確的方向,我會去做更多的自己挖掘。

如果您遇到同一個項目,您將如何創建這樣的數據庫並執行每日更新?

謝謝!

回答

0

獨立於您現在所擁有的(CSV結構和數據)創建數據庫結構。例如。組織你的桌子以適應你未來的需求,思考和定義好他們之間的關係,運用適當的指標。

作爲第二步 - 在我看來是不可避免的,用你自己的編程語言編寫一個小程序。它應該能夠

  • 主要是讀從(CSV)文件中的記錄/行,
  • 驗證/消毒獲取的數據
  • 進口/根據需要保存在數據庫中對應表中的數據。 「根據需要」,我的意思是說,隨着時間的推移,可能會出現許多因素,這些因素可能會意外地影響您的第一個數據庫結構決策。例如,需要一些時態表。另外,您應該從觸發器和存儲過程給您帶來的好處中受益。
  • 正確處理導入過程中引發的錯誤和異常。例如,由於最終的「重複密鑰」問題 - 因爲文件中的數據可能容易出錯,所以某些記錄無法在某一天導入。這並不意味着進口應該打破。閱讀一條記錄,嘗試保存它。如果出現問題,處理它(複製另一個文件中的行,或將它保存在一個特殊的表中,以供以後編輯/修訂並重新導入),並讓程序按照其過程中的下一個記錄。
  • 正確記錄所有(主要)操作並維護讀取計數器和有問題的記錄。
  • 自動將每個日常文件 - 導入後 - 複製到備份目錄中,直到它不再需要爲止。
  • 最終會通過電子郵件向您發出有關操作狀態的信號。

第三步是找到一個自動化整個循環的解決方案。例如,要找到一個任務/ cron-jobs管理器來每天啓動一次或每天兩次的程序,而無需手動進行此操作。

關於根據您的數據庫結構將文件拆分爲不同的文件:這不是必要的,例如,這將是一個多餘的步驟,因爲您的程序應該設法讀取文件並相應地處理數據導入。

至於程序的類型:它應該是一個Web解決方案,以便您可以隨時訪問和修改它。

祝你好運。

+0

偉大的輪廓和我正在尋找的方向。謝謝aendeerei! –