2013-04-22 23 views
0

我有一組複雜的XML對象即店鋪位置數據和屬性爲一系列高性能過濾從在存儲器中的數據

有些商店50個商店地點,一些存儲有1500個商店地點,部分20000個商店地點。

我想創建一個Java對象列表的店,讓我對店面位置

最重要的過濾器是緯度/長,緯度/長等數據過濾的商店位置;在所有情況下,我需要通過最大和最小緯度以及最大和最小長度示例找到所有商店:介於(40.146364,-75.406188)和(40.228694,-75.491295)之間

重複的緯度/經度值爲允許

我想我會創建一個對象與我用來篩選幾個關鍵的明確性(如緯度,經度,存儲類型代碼),並與完整的XML字符串

我的想法是,對象進入像ArrayList或其他類型的集合,並且關鍵字是Lat/long的String。

快速過濾收集很重要;它會每天發生數百萬次。創建集合發生在啓動時,如果過濾器速度很快,可能會降低性能。

lat/long過濾器具有很高的特異性;具有1500個商店位置的一個示例通常返回50個或更少的商店位置。

我想我會迭代集合,並解析經緯度的關鍵。如果lat/long在期望的範圍內,我會得到該對象並過濾其他不太具體的搜索條件。

由於查詢的數量和相同的查詢幾乎不會重複,直接查詢數據庫不是一個好主意。數據庫緩存不會發生,因爲每個查詢的參數將會不同(經緯度經常有5個小數位)。通過收集隆隆意味着我從DB轉移負載到應用服務器,但Oracle許可證和集羣是很多更昂貴/複雜比負載平衡一堆AWS或Tomcat實例的

選自對這些實現的任何想法要求和限制?

回答

0

你談論的數字並不可怕,我期望從內存實現中獲得合適的性能。如果無法將完整的對象樹存儲在內存中,至少應存儲顯着信息(lat/long + ids)並對其進行過濾。

和以往一樣,在決定性能是一個問題之前,我會先實施一些解決方案。

+0

我打算做你所描述的事情;我想知道的是有沒有人有建議,將改善什麼和我打算如何存儲信息,以及我打算如何篩選結果集以符合搜索條件 – 2013-04-22 17:36:10

0

由於緯度經度查詢,您可能希望將數據存儲在interval tree中。 Here is a Java implementation I found。簡而言之,間隔樹可讓您在一段時間間隔內進行查詢,並快速找到所有對象。緯度介於x1和x2之間;然後將這與經度在y1和y2之間的物體相交。

+0

看過執行後我不確定這將是速度更快,它使用的TreeMap不是很好的B/C它允許有兩個位置具有相同的緯度/經度 – 2013-04-22 17:13:40

+0

您可以將TreeMap交換爲[TreeMultiMap](http://google-collections.googlecode.com/ SVN /主幹/ javadoc中/ COM /谷歌/普通/收集/ TreeMultimap.html) – 2013-04-22 18:44:34

相關問題