簡體   English   中英

Java服務器-存儲和檢索大量基於位置和時間的數據

[英]Java server- Storing and retrieving large amounts of location- and time-based data

我是服務器編程(和一般編程)的新手,並且當前正在開發一個應用程序。 該應用程序將允許用戶創建具有經緯度位置,時間和日期以及其他數據的游戲,這些數據將存儲在服務器上。 他們還可以根據他們的位置查找其他用戶創建的游戲。 在給定時間之后,將游戲存檔(因此只能通過游戲ID而不是位置來檢索游戲)。

此外,每個游戲都將具有唯一的數字ID,每個新創建的游戲將具有比前一個更大的ID號(因此,數據將按ID順序排列,而無需進行排序),用戶可以找到一個游戲使用此ID(例如,如果他們的朋友通過發送ID來邀請他們)。

總之,用戶可以通過接近度或唯一ID查找數據,並且在給定的日期和時間(每個游戲都有單獨的到期日期)之后將數據存檔(以便只能通過ID檢索)。

我的問題是:服務器應如何存儲這些數據? 我考慮過要做的是,這似乎效率很低-

  • 使用游戲ID作為鍵,將所有游戲數據存儲在鍵值數據庫中。
  • 保留所有尚未到期的游戲的ID的列表,並按照到期時間的順序進行排列。 (這樣,我經常可以檢查列表中的第一項,以查看是否已過期,如果已過期,則將其從列表中刪除並采取其他適當的措施)
  • 以某種方式根據其位置將這些相同的ID存儲在四叉樹中。

是否有某種數據結構可以更有效地做到這一點? 就此而言,我什至應該擔心哪種類型的用戶更高效?

我已經解決了。 (如果您將此作為參考,請警告我不是專業人士,這很可能是一個糟糕的主意。)

-我將為每個游戲對象存儲一個單獨的數據文件。 它們的存儲方式使得同一文件夾中的文件/文件夾永遠不會超過100個,並且可以使用簡單的過程式生成文件路徑來進行檢索。 (無需在目錄中進行昂貴的搜索,因為可以根據文件的唯一ID知道每個文件的確切位置)-游戲ID(或某種地圖)的內存數組(或ArrayList)已過期,以它們何時過期為順序。 我永遠不可能一次擁有超過一百萬個這樣的內存,即使有這種荒唐的高估,它仍然只使用8字節* 1百萬個條目= 8兆字節的內存,遠遠超過了可用的1兆字節。 ,因此即使考慮到存儲它們的對象的開銷,這也不是問題。 -Ditto用於QuadTree-存儲在內存中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM