【问题标题】:How to store Users' Location in a Django/Postgres Application如何在 Django/Postgres 应用程序中存储用户的位置
【发布时间】:2018-03-13 01:02:45
【问题描述】:

我正在开发一个电话应用程序,每次打开应用程序时都会将用户的位置发送到后端。

我的目标是为用户存储尽可能多的位置数据,以便我可以进行一些机器学习来计算他们每天正常活动区域中的哪些帖子与他们最相关。

我使用 GeoDjango 和 PostGis 使应用程序具有位置感知能力,并且正在努力确定数据库中的哪种数据结构最适合这种情况。

问题归结为我应该给每个用户一个location = pg_fields.ArrayField() 属性,该属性最终会非常大,还是使用location=models.ManyToManyField(UserLocation)。我知道 Toast 表在具有大型数组的 Postgres 中是一个问题,但它们是否是一个足够大的问题,在运行机器学习算法时尝试为用户提取数据时不值得压力?

【问题讨论】:

  • 如果您使用 PostGis,那么您可以轻松存储位置信息。如果它只是一个位置,那么您可以使用 postgis 的 point 数据类型。使用 point 作为数据类型创建或更新您的列之一,并将您的位置数据存储到其中。
  • ManyToMany 或 ArrayField....
  • 我不知道您的要求,也不知道您到目前为止尝试了什么。

标签: python sql django postgis geodjango


【解决方案1】:

将您的位置数据保存在自己的模型中:

class UserLocation(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, ...)
    recorded_at = models.DateTimeField()  # time recoreded on phone
    created_at = models.DateTimeField(auto_now_add=True)  # time saved on db
    location =  models.PointField()
    accuracy = models.IntegerField() # meters, rounded up
    altitude = models.IntegerField(null=True, blank=True) # meters, rounded
    # more info... IP, phone type, phone id, session id, app version etc.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 2015-08-08
    • 2011-06-02
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多