2009-11-01 53 views
1

我打算開發一個小型的J2ME實用程序來查看使用移動電話的本地公共交通時間表。這些數據部分主要是大量的數字,代表公交車到達或離開的時間。J2ME中的隨機訪問數據對象

我想弄清楚什麼是存儲該數據的最佳方式。表示需要

  1. 是相當小(因爲手機的持久存儲限制)
  2. 放入一個文件(爲了便於通過HTTP之後更新進度數據庫) 配入不變的文件,即(routes.dattimes.dat,...,agencies.dat)和schedule_111.datschedule_112.dat ...)
  3. 有隨機存取能力(反序列化整個數據對象到內存將只是太多了手機:))
  4. 如果有一些庫,用於訪問數據格式,Java實現應該存在

換句話說,如果你有擠的GTFS般的數據的重要組成部分成移動設備,你會怎麼做?

Google Protocol Buffers似乎是定義數據的好候選,但它沒有隨機訪問。

你會建議什麼?

+0

究竟有多少數據呢? – 2009-11-01 21:09:12

+0

還不確定,但我的近似值是它可以增長到5 MB。也取決於數據存儲格式。 – Linas 2009-11-01 22:08:28

+0

從我最初的計算結果來看,它甚至達到了10 MB,但這裏有一個捕獲 - 典型的公民在白天和黑夜的每個小時都不「使用」所有生產線 - 他/她最多使用10行。數據量急劇下降。 – kubal5003 2009-11-02 01:45:53

回答

1

我做了這樣的應用程序,我用PHP生成的XML-S。這使我們有一個針對人3表示層單一供應商:

  • J2ME應用
  • 網站手機
  • 通常網站

我們使用XSLT轉換XML到HTML的網站和kXML - 非常輕鬆的解析器在j2me應用上做到這一點。即使在具有黑白屏幕和少量內存的非常舊的手機上,這種方法也能很好地工作。

除了j2me之外,沒有文件的概念。你有可以存儲信息的數據庫。 這是「手機」網站的鏈接。 http://mobi.krakow.pl/rozklady/

這裏到應用程序: http://www.mobi.krakow.pl/rozklady/j2me/rjk.jar

這是波蘭語,但我認爲這不是很難搞清楚什麼這個那個的。

如果你願意,我可以爲您提供更多的幫助和建議,或者如果這是一個商業產品,那麼我認爲,我們可以計算出東西太多;)

+0

嗨。據我瞭解,您的應用程序在需要數據時會執行HTTP請求,因此實際數據存儲在服務器中。 請參閱我的想法是,應用程序可以將存儲在位於JAR中的「離線」資源文件中的數據存儲在相同的位置,從而使整個過程更快,更便宜。 – Linas 2009-11-01 22:30:34

+0

應用程序存儲它下載的數據,然後您可以選擇刷新它。我再次看到你對J2ME瞭解不多 - 你不能將數據存儲在jar文件中(除非在創建時存儲數據 - jar實際上是zip)。由於安全原因,手機上無法修改罐子。 在開發應用程序時,我們也希望儘可能便宜,因爲波蘭移動互聯網的價格相當高(至少它們是)。這是我們考慮的最便宜的選擇。 – kubal5003 2009-11-01 23:35:43

1

我覺得你的問題是要求2

僅僅因爲4位數字在文件中間的某處發生更改而更新了10MB的數據似乎非常低效。

將數據分割爲多個文件允許更好的更新粒度,這將非常值得添加代碼複雜度。

實時公共交通時刻表通常一次修改一個公共汽車/火車/有軌電車線路。

+0

嗨, 我沒有想'實時',至少對於J2ME應用程序。在我住的地方,時間表每年改變三次,*所有*數字得到更新:) 其實,我試圖實現的是與數據不變的文件數量。我更新了原有的問題描述,以便更好地反映這一點。 – Linas 2009-11-02 18:19:18

2

J2ME上的持久存儲是一項棘手的業務;看到這個相關的問題的更一般的背景:Best practice for storing large amounts of data with J2ME

根據我的經驗,J2ME持久性存儲往往最好/最可靠的工作與許多小記錄,而不是一些單片機。考慮程序要如何訪問數據,然後嘗試在J2ME持久性存儲中以這些增量進行存儲。

我通常會建議解耦您的客戶端 - 服務器協議,以便從設備上的存儲格式下載更新。您可以在每次代碼更新時更改後者,但您幾乎永遠支持客戶端 - 服務器協議,除非您希望在現場中分出較舊的客戶端。

最後,我知道有一些人在Transit Developers group上在J2ME中構建了離線轉運應用程序,因此值得在那裏尋求提示。

+0

謝謝,這很有幫助! – Linas 2009-11-10 14:21:59