繁体   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