Android Firebase-按城市构建数据库

Android Firebase-按城市构建数据库,android,data-structures,firebase,firebase-realtime-database,Android,Data Structures,Firebase,Firebase Realtime Database,这是我第一个使用Firebase的Android应用,我有点担心数据库的存储 我的问题来了;我正在开发一个分享用户帖子的应用程序,但我希望用户只看到自己国家或城市的帖子。由于Firebase也考虑到了数据库和存储的使用,如果用户必须环游世界各地,只为了找到在他所在城市共享的帖子,他可能会使用大量数据 那么,我如何构建我的数据库,让用户在不过滤世界上所有帖子的情况下,只获得发布在他周围的帖子呢?有没有办法做到这一点?如果他已经遇到了这个问题,有人能分享他的经验吗 提前谢谢 当用户发布帖子时,其中一

这是我第一个使用Firebase的Android应用,我有点担心数据库的存储

我的问题来了;我正在开发一个分享用户帖子的应用程序,但我希望用户只看到自己国家或城市的帖子。由于Firebase也考虑到了数据库和存储的使用,如果用户必须环游世界各地,只为了找到在他所在城市共享的帖子,他可能会使用大量数据

那么,我如何构建我的数据库,让用户在不过滤世界上所有帖子的情况下,只获得发布在他周围的帖子呢?有没有办法做到这一点?如果他已经遇到了这个问题,有人能分享他的经验吗


提前谢谢

当用户发布帖子时,其中一个键值对可能是
“位置”:“纽约”
。如果正在查看帖子的用户位于“纽约州纽约市”,则应用程序可以查询数据库中位于“纽约州纽约市”的帖子。我假设你知道或者能够弄清楚如何从用户那里获取位置数据,并对其进行概括,从而使帖子显示在更概括的“纽约,纽约”下,而不是更具体的“纽约长岛”(除非你希望它更具体)。 在Swift中,代码可能类似于:

FIRDatabase.database().reference().child("posts").queryOrdered(byChild: "location").queryEqual(toValue: "New York, NY")
这在Java(Android)中应该是相同的想法


在本例中,数据库将返回“纽约州纽约市”区域中的所有帖子,因此您的问题更像是需要一个发布-订阅消息系统,如Kafka

如果我正确理解了您的问题,那么在获取应用程序用户的当前位置后,您希望获得最近城市/地区的提要。目前,我们有许多工具和技术可用于此目的(例如Kafka)。但是这个问题是特定于Firebase的,因此不需要服务器端编码。我不确定是否能为您的问题提供解决方案,但让我们想想如何解决这个问题,然后我们可以尝试以Firebase的方式复制解决方案

我们可能会想到一个频道,其中您应用程序的每个用户的帖子都会被转储。每个帖子都有一个标识其位置的密钥。现在让我们将您应用程序的每个用户视为该频道中某个特定主题的订阅者。一旦任何订阅者(即您应用程序的用户)来时,频道会向用户提供他们想要的帖子(即附近城市的帖子)

例如,我们在那个频道上有一些帖子,上面有钥匙,
NY
Dhaka
Khulna
NJ
London
Seoul
Sydney
等等。现在,来自
Jessore
的人刚刚在你的频道订阅了,附近的城市是
Dhaka
Khulna
。因此,订户拥有钥匙
达卡、库尔纳
,当频道看到他们的钥匙时,它会用钥匙
达卡
库尔纳
为包含位置的帖子提供服务

现在,我们如何在Firebase中实现这种行为?这是我们目前面临的挑战。因此,让我们有一个
频道
节点,它拥有来自所有位置的所有帖子(如前面所述的频道)。下面是一个示例数据结构

channel
  - post1
    - content : "this city is beautiful"
    - location: "Khulna"
  - post2
    - content : "This city is okay"
    - location: "Dhaka"
  - post3
    - content : "London, here I come"
    - location: "London"
  - post4
    - content : "leaving the city"
    - location: "NY"
现在,您需要在城市之间建立一个
距离映射
,当您将当前城市传递到该表时,该映射将告诉您最近的城市。您需要为给定的城市找到您自己的距离映射。比如说,您的当前城市是
Jessore
。距离映射表应返回最近的城市(例如
达卡
库尔纳
)。这可能是一个复杂的构建过程。但一旦建立了关系映射,它只需要更新。例如,
距离映射
数据的最终状态如下所示

distance-mapping
  - Dhaka
    - Khulna
    - Jessore
  - Khulna
    - Dhaka
    - Jessore
  - Jessore
    - Dhaka
    - Khulna
  - Vegas 
    - NY
  - NY
    - Boston
    - Vegas
现在,当您获得用户的当前位置时,您将很容易从Firebase中的
距离映射表
中找到最近的城市。将城市传递到
频道
表获取具有这些特定键的帖子

以下是有关Firebase中复杂查询的一些答案。您可能会从中获得传递select查询参数的帮助


希望这能有所帮助!

我不相信这个想法,因为它在美国很容易使用。例如,州有明确的定义。但是想象一下,在其他地方,这可能有点困难。我可以用另一种方式重复我的问题:知道帖子的位置和知道用户的当前位置,有没有过滤帖子的方法没有下载它们来确定与它们的距离?我想你没有完全问我的问题,但我觉得你已经理解了我的问题,你给了我一些有效的提示。我可以接受你的邮件来谈论它吗?此外,答案与问题相符,我想我会检查它是否正确。