【问题标题】:Implementing matching in database在数据库中实现匹配
【发布时间】:2014-06-29 17:55:53
【问题描述】:

我正在开展一个项目,人们每天都会选择特定的时段。然后我将位于同一位置的人相互匹配。我正在使用一个单独的表来实现这一点。我目前使用的设计是

user_id (FK to user table)
created
updated
slotno (int)

等效的 django 模型

class Slots(models.Model):
    user_id = models.ForeignKey(User, related_name='user_id')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    slotno = models.IntegerField(blank=False, null=False)

问题是

  1. 随着时间的推移,表会变得非常大,导致 增加 sql 查询的复杂性(一种可能的解决方案是 设置一个检查所有行的时间戳的作业和 删除超过 24 小时的行)
  2. 当我将查询数据库中的所有用户时 插槽然后是任何时间在该插槽中的所有用户 过去也会出现(MAJOR FLAW)

这个设计肯定有缺陷,但我无法想出一个好的设计来实现这个功能。我是数据库设计的菜鸟,这是我第一次必须实现非平凡的数据库设计。

PS:我正在使用 django 1.6.5 和 mysql。

【问题讨论】:

  • 极大是多大? MySQL 支持对日期范围进行分区,即使在数亿行上也可以进行非常高效的查询。或者,您总是可以每天、每周、每月归档数据,具体取决于您的使用情况。您能否举一些预期的用例/查询示例。

标签: python mysql sql database django


【解决方案1】:

您的查询是什么样的?

如果你只想要今天创建数据库条目的人,你可以这样做

from datetime import datetime

today = datetime.today()
today = datetime(today.year, today.month, today.day)

然后你可以根据这个过滤,例如

your_query.filter(created__gte = today)

至于数据库的大小——如果这对你来说真的是个问题,你可以实施一个档案系统。也许是一个每天运行一次并将旧条目写入 .csv 文件或单独的数据库或其他东西的 cron 作业。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多