前幾天有網友問說能不能將兩個 BigPlanet SQLite (*.sqlitedb) 離線地圖資料庫直接合併,由於 Mobile Atlas Creator 沒有這個功能,所以 Dr. TYT 寫了一個名為 BigPlanetSQLiteMerger 0.1 版的 Java 程式,讓大家可以直接合併兩個資料庫的內容。
[BigPlanetSQLiteMerger 快速上手]
- 下載 BigPlanetSQLiteMerger 0.1.zip 並解壓縮至某目錄下,例如 C:\BigPlanetSQLiteMerger\
- 將欲合併的兩個 BigPlanet SQLite (*.sqlitedb) 離線地圖資料庫移至 C:\BigPlanetSQLiteMerger\ 目錄內,也就是說和 BigPlanetSQLiteMerger.jar 位於同一個目錄。
- 將欲合併的兩個離線地圖資料庫改名為 source.sqlitedb 及 target.sqlitedb
- 點兩下執行 start.bat,將 source.sqlitedb 的內容合併至 target.sqlitedb 內。
- 假如 source.sqlitedb 內有 10,000 個地圖圖檔,target.sqlitedb 內有 20,000 個地圖圖檔,而且這兩個資料庫共有 2000 個地圖圖檔重複,則執行 start.bat 進行合併後,source.sqlitedb 內容不變,還是有 10,000 個地圖圖檔,target.sqlitedb 則會有 20,000+(10,000-2,000) = 28,000 個地圖圖檔。
- 如果您需要保留合併前的 target.sqlitedb (內有 20,000 個地圖圖檔),則請在合併之前先備份 target.sqlitedb
[BigPlanetSQLiteMerger.jar 進階參數說明]
共三個參數,第三個為選擇性參數。
sourceSQLiteDB targetSQLiteDB [BatchSize=1000]
* 一般使用:
----------------------------------------------
java -Djava.library.path=lib -jar BigPlanetSQLiteMerger.jar source.sqlitedb target.sqlitedb
----------------------------------------------
以上指令將 source.sqlitedb 內容合併至 target.sqlitedb,預設每 1000 筆資料合併一次。
* 進階版 (每 10,000 筆資料合併一次):
----------------------------------------------
java -Xms64M -Xmx768M -Djava.library.path=lib -jar BigPlanetSQLiteMerger.jar source.sqlitedb target.sqlitedb 10000
----------------------------------------------
一旦 BatchSize 設越大,理論上合併速度越快,但執行時需要用越多記憶體,所以必須調整此參數 -Xmx768M,此參數表示 JVM 最多使用 768 MB 的記憶體,若這個數字不夠大,就有可能出現 Out Of Memory (記憶體不足) 的錯誤。
[BigPlanetSQLiteMerger.jar 執行過程]