2012-06-08 61 views
2

我想世界城市存儲在一個列表,因爲Metro應用不能有本地數據庫,但我不知道這是可能的(我發現有超過300萬名的城市的文本文件)。在Metro應用商店海量數據

我不知道他們是如何在天氣應用程序中做的。由於建議的結果(在搜索魅力或「最喜歡的地方」屏幕中)沒有潛力,我不認爲他們使用web服務,並且我希望我的應用程序能夠提出城市列表甚至如果沒有可用的連接。

有什麼想法?

+0

使用Trie。例如見: - http://stackoverflow.com/questions/6416050/how-to-create-a-trie-in-c-sharp - http://stackoverflow.com/questions/3748200 /保存-trie-to-disk –

回答

1

只需將其粘貼在一個文本文件中,按行分隔。這不是一個大量的數據 - 你可能一次把它全部保存在RAM中。

使用數據庫只爲這​​一個列表似乎有點矯枉過正。

有了一些粗略的計算,假設每個大約20個字符的名稱,我在有關城市100MB的數據的區域。這對於記憶中的一個列表來說並不重要,但這並不是很重要的。

您甚至可以使用像一個Linq to Text提供商。


他們如何在魅力中做到這一點只需要擔心幾個城市 - 最喜歡的,以及上次報道的任何位置服務。處理< 10比300萬容易。

1

300萬個城市可能聽起來很多。但是對於你的Metro應用程序有很多嗎?

這些都是非常粗略的估計

讓我們用20個Unicode字符的平均城市名稱的長度。

20 * 300萬= 60萬個unicode字符。每Unicode字符

60000000 * 2個字節= 120個百萬字節。

1.2億字節/ 1024 = 117,187.5千字節

117,187.5千字節/ 1024 = 114兆

〜115MB是不完全的 '小',但根據您的其他要求 - 你大概可以處理裝載到150MB記憶。您可以使用您通常使用的任何.NET對象,例如List,並使用LINQ獲取匹配的城市或其他內容。

這並不是說這是您唯一的選擇。這可能是一個可行的。你可以做很多非常聰明的事情,以避免一次把它全部存入內存;但如果你想消除/最小化滯後 - 這將是你最好的選擇。

+1

輕微的錯字 - 它是114MB。 –

+0

即使這不是你的最終解決方案,這是一個很好的開始。在找出問題後進行優化。另外,我認爲你的數據集可能會少於114MB。 [這裏](http://www.geodatasource.com/world-cities-database/free)是一個免費的城市列表,擁有240萬個未壓縮的35M城市。這些日子,這將是相當小的土豆。根據編碼等等,這可能會更多,但是你需要開始問自己你的目標,目標受衆,以及你願意接受什麼樣的折衷。 –

+0

@亞當 - 你100%正確。謝謝。 –

1

如果你需要數據庫,我會建議看看SQLite。 Metro應用程序顯然無法訪問SQL Server和其他基於Win32的DBMS,但您可以嘗試將SQLite作爲輕量級替代方案。

試試這個:https://github.com/doo/SQLite3-WinRT

相關問題