Django,报废:报废时检测“变化”的最佳方法是什么?

2024-10-02 08:15:53 发布

您现在位置:Python中文网/ 问答频道 /正文

这不是典型的代码问题,而是我现在面临的设计问题。你知道吗


假设我有一个网页(不是我的),我想把一些信息删掉。对我来说,最重要的信息是(datetime)character登录时,以及当他注销时,但我也收集其他信息。登录是从2点知道的(见下文),但是注销我必须计算 我可以访问2页:

  1. http://x/在线.php-它为我提供了在线昵称列表(200-500个条目)
  2. http://x/character.php?name=昵称-它提供了每个昵称的详细信息,如:角色名称、行会、性别、级别、职业、状态(离线/在线)、上次登录。你知道吗

我只做了两次手术任务.py它们是:

  • A-使用点“2”的信息更新或创建
  • B-获取联机列表-使用点“1”中的信息

所以,它现在的工作原理是(每一分钟,感谢芹菜,我这样做):

  • 将事务自动提交设置为False
  • 对具有登录注册表,但没有注销的字符(从数据库的角度来看,这些字符仍处于“联机状态”)
  • 如果此时角色的状态为“脱机”,请将数据库条目添加到注销日期时间.now你知道吗
  • 对列表B中的字符执行A
  • 提交&将事务自动提交设置为True

问题是,我不确定这是不是个好主意。 我的型号.py:(评论只是为了澄清我在做什么)

class Guild:
     name = models.CharField(max_length=100)

class Player(models.Model):
    #FK:
    guild =  models.CharField(max_length=50, null=True, blank=True) # Does he have guild?
    name = models.CharField(max_length=100, unique=True) 
    sex = models.CharField(choices=SEX_CHOICES, max_length=7) # Male / Female
    level = models.PositiveSmallIntegerField() 
    vocation = models.CharField(choices=VOCATION_CHOICES, max_length=50) # His class
    status = models.CharField(choices=ONLINE_CHOICES, max_length=10) # Offline / Online
    lastlogin = models.DateTimeField() 

    def __str__(self):
        return self.name


class Deaths(models.Model):
    text = models.CharField(max_length=500)
    killed = models.ForeignKey(Player, null=True, on_delete=models.CASCADE, related_name='killed') # Who got killed
    killer = models.ForeignKey(Player, null=True, on_delete=models.CASCADE, related_name='killer') # Who killed him

    date = models.DateTimeField() # When he died?
    level = models.PositiveSmallIntegerField() # On which level player died
    pvp = models.BooleanField() # Death was due to PvP or PvE?

    class Meta:
        ordering = ('date',)


class OnlineDetails(models.Model):
    player = models.ForeignKey(Player, on_delete=models.CASCADE)

    login = models.DateTimeField() # When he logged in
    logout = models.DateTimeField(null=True, blank=True) # When he logged off

    def __str__(self):
        return self.player.name + " " + str(self.logout) if self.logout else self.player.name

    class Meta:
        ordering = ('logout', 'login')

它是有效的,但我想知道这是否是最好的方法。实际上,我认为这样做很糟糕,因为我必须在一分钟内扫描超过500个字符,这使得使用“antyddos”盾很困难。你知道吗

你有什么更好的解决方案或技术我应该拿起? 我在python和django方面都不是最好的,还在学习。你知道吗


Tags: nameself信息truemodelsnulllengthmax
1条回答
网友
1楼 · 发布于 2024-10-02 08:15:53

当然你可以测量整个过程,需要多长时间等等,但是我认为更新500个条目只需要几毫秒。更大的问题可能是每分钟取消500个条目,这意味着每秒必须向它们发送约8个请求(基于第2点)。不是第1点)。我认为你在放弃第一点。每一分钟,每一次改变,你都会丢弃掉那些丢失的字符。第一点根本不是问题。解析如此多的页面可能很困难,但并非不可能。此外,我建议您下载页面并将其存储一段时间,如果在此过程中出现任何问题,那么下载页面和在其他线程中并行解析页面也会更快,因为最困难的时间是发送请求和下载响应。到事务自动提交。。。这可能是多线程环境中的问题。如果值得冒不知道发生了什么的风险的话,你应该试着衡量有没有这个过程。你知道吗

相关问题 更多 >

    热门问题