2009-12-18 49 views
1

我有一個存儲的地理位置爲以下結構的臨時數據庫:
國家
地區
城市
郵編
東經
緯度
GEO位置數據庫更新歧義

我從供應商處獲取數據。名字不相關。這些數據是在一個CSV文件中,列
開始IP
結束IP
國家
地區

郵編
東經
緯度

的數據來源的事實在CSV文件中會發生變化,例如郵政編碼,城市名稱,地區名稱或IP範圍。

處理數據導入工作的應用程序部分如下: 刪除國家,地區,城市,郵政編碼等 然後重新填充數據到數據庫中。

我需要一個更好的方法來做到這一點。因爲當應用程序正在運行時,我將丟失數據庫中這些條目的密鑰。但這次導入需要大約2分鐘,這意味着應用程序將無法使用GEO Location db。所以我不能真正使用刪除和插入。

我需要實現這種方式,我將所有的數據加載到內存中,並完全按照從列表中讀取數據的結構進行匹配。即:國家詞典,地區詞典從DB和CSV文件。並檢測更改並在一個事務中更新數據庫。

問題是:如何映射它們,以便我可以檢測到更改。換句話說,例如:如果國家名稱更改爲:),則需要使用CSV文件中的任何國家/地區名稱進行更新。好。但是,如何更改一個以上的國家名稱呢?地區,城市和郵政編碼的想法也一樣。

是的,我將此廣告存儲爲樹結構。國家是根節點,地區是一級孩子,城市是秒級,郵政編碼是櫻桃。

任何想法?

對不起。這是很長的解釋。感謝您花時間閱讀本文的時間。

回答

1

對CSV文件執行差異化並使用該差異來創建將更新數據庫的SQL。

+0

嗯。我會考慮這一點。謝謝。 – DarthVader 2009-12-18 02:13:51

+0

這不是一個簡單的解決方案,但它會產生最好的結果。如果您可以找到自動讀取哪些列已更新以及哪些行是新的或已刪除的方法,那麼生成SQL將非常簡單。 – 2009-12-18 02:16:24

+0

我可以從經度和緯度中檢測到它,當然如果它們永不改變。我們不使用SQL和ORM。它是別的:) – DarthVader 2009-12-18 02:18:41

0

如果你想做更新,你可以使用RedGate SQL Comparer(MS SQL)。這是非常好的,會給你的腳本。還有其他的工具可以做這種比較。具體的步驟是

  1. 設置數據庫爲單用戶模式,運行更新,從單用戶模式下釋放

備選: 上傳到這個新的表名,刪除舊錶和將這個新表重命名爲原始表名。當然,你將不得不處理任何關鍵的外鍵關係以及

+0

我很抱歉,但我不問這個MS SQL或任何其他數據庫。 – DarthVader 2009-12-18 02:23:11

+0

那麼你的數據庫是什麼? – ram 2009-12-18 02:49:26

+0

哦,我明白了,你想從你的應用程序中做到這一點? – ram 2009-12-18 02:50:37