Java服务器—存储和检索大量基于位置和时间的数据

Java服务器—存储和检索大量基于位置和时间的数据,java,database,location,Java,Database,Location,我不熟悉服务器编程(以及一般编程),目前正在开发一个应用程序。该应用程序将允许用户创建具有经纬度位置、时间和日期等数据的游戏,这些数据将存储在服务器上。他们还可以根据自己的位置查找其他用户创建的游戏。在给定的时间后,游戏将被存档(因此只能通过游戏ID而不是位置检索) 此外,每个游戏都有一个唯一的数字ID,每个新创建的游戏都有一个比前一个更大的ID号(因此数据将按ID排序,无需任何排序),用户可以使用此ID查找游戏(例如,如果他们的朋友通过发送ID邀请他们) 总之,用户可以通过邻近性或唯一ID查找

我不熟悉服务器编程(以及一般编程),目前正在开发一个应用程序。该应用程序将允许用户创建具有经纬度位置、时间和日期等数据的游戏,这些数据将存储在服务器上。他们还可以根据自己的位置查找其他用户创建的游戏。在给定的时间后,游戏将被存档(因此只能通过游戏ID而不是位置检索)

此外,每个游戏都有一个唯一的数字ID,每个新创建的游戏都有一个比前一个更大的ID号(因此数据将按ID排序,无需任何排序),用户可以使用此ID查找游戏(例如,如果他们的朋友通过发送ID邀请他们)

总之,用户可以通过邻近性或唯一ID查找数据,并且在给定的日期和时间(每个游戏都有一个单独的过期日期)后,数据会被归档(因此只能通过ID检索)

我的问题是:服务器应该如何存储这些数据?我考虑的是这样做,这似乎效率很低-

  • 使用游戏ID作为密钥,将所有游戏数据存储在键值数据库中
  • 保留所有未过期游戏的ID列表,按过期时间顺序排列。(这样,我可以经常检查列表中的第一项是否过期,如果过期,则从列表中删除并采取其他适当的措施)
  • 基于它们的位置,以某种方式将这些相同的ID存储在四叉树中

有没有哪种数据结构可以更有效地实现这一点?就这一点而言,在什么样的用户量下,我甚至应该为提高效率而担忧呢?

我已经确定了一个解决方案。(如果您将此作为参考,请注意我不是专业人士,这可能是一个糟糕的想法。)

-我将为每个游戏对象存储一个单独的数据文件。它们的存储方式确保同一文件夹中的文件/文件夹不会超过100个,并且可以使用简单的程序生成的文件路径检索它们。(无需通过目录进行昂贵的搜索,因为可以根据每个文件的唯一ID知道其确切位置) -尚未过期的游戏ID(或某种映射)的内存数组(或ArrayList),按过期时间顺序排列。我不可能一次在内存中存储超过100万个这样的数据,即使这种荒谬的高估,它仍然只使用8字节*100万个条目=8兆字节的内存,而可用的内存远远超过1千兆字节,因此即使考虑到存储它们的对象的开销,这也不会是一个问题。 -四叉树也一样-存储在内存中