MapDB的spring整合使用

2021-09-02 13:13:48 字數 1745 閱讀 7650

朋友公司需要根據座標,在200m的位址庫中尋找離該座標最近的經緯度座標,難點主要有以下兩個:

1.快速把座標落點到二維的平面上區域,假設(-1,-1),應該落點到xy二維的左下方,這裡我採用kdtree的方式

2.因為考慮到tree構建成功後,不想每次都重新構建樹,那就需要把樹快取起來,但是通過redis等分布式的cache覺得網路頻寬是瓶頸,而且我們的位址庫可能會頻繁更新,如果用jvm等map的快取,記憶體馬上就被爆倉了,後來轉用mapdb發現它提供多種快取方式,而且對比後,不管速率以及占用空間都相對較小

3.計算點點之間的距離,在二維平面上其實並不難,通過向量,計算sin、cos等常用手段,馬上計算所得結果

spring中但配置

spring應用啟動時載入

public class startuplistener implements servletcontextlistener 

}@override

public void contextdestroyed(servletcontextevent sce)

}

service中使用

// injected database the map are obtained from it.

private db database;

private btreemapmonitordatamap;

public void setdatabase(db database)

@postconstruct

public void init() throws exception

kdtree構建

public class kdtree 

private kdtreenode root;

public static kdtree build(list<? extends point> points)

private static kdtreenode build(list<? extends point> points, int depth)

});int index = points.size() / 2;

kdtreenode leftchild = build(points.sublist(0, index), depth + 1);

kdtreenode rightchild = build(points.sublist(index + 1, points.size()), depth + 1);

point point = points.get(index);

return new kdtreenode(point, axis, leftchild, rightchild);

}@suppresswarnings()

public t findnearest(point point)

public list<? extends point> findnearest(point point, int amount)

@suppresswarnings()

public t getrootpoint()

}

在使用mapdb的使用後,本人並未去深入了解mapdb的底層原理,只是應急使用,後續肯定會有很多bug顯現,但是在使用其框架後,確實效能不少,3-5ms內就能夠很容易的找到點之間最近關聯的,記憶體損耗40多m左右。

Android AutoLayout整合使用

由於android螢幕尺寸眾多的情況,android適配一直是個問題,谷歌推出了百分比布局,本人有使用,但是百分比布局在部分時候適配並不是那麼完美,偶然機會看到鴻洋大神推出的autolayout,在公司也開始廣泛使用,本人也由百分比布局轉為autolayout,大神寫的帖子太深奧,使用時候本菜鳥覺得...

spring 整合Junit,整合web

l 匯入jar包 基本 4 1 測試 spring test.jar 1.讓junit通知spring載入配置檔案 2.讓spring容器自動進行注入 l 修改測試類 package com.hcx import org.junit.test import org.junit.runner.runw...

Spring 整合測試

spring 中的包 spring mock.jar 為整合測試提供了一流的支援。所有相關的api在包 org.springframework.test 中,它們不依賴於任何應用伺服器或者其他部署環境。test包裡的各種抽象類提供了如下的功能 test包對載入的context提供快取,快取功能是通過...