gpt4 book ai didi

mysql - 如何在 Web 应用程序中实现一次性(每个用户)消息?

转载 作者:可可西里 更新时间:2023-11-01 07:46:22 26 4
gpt4 key购买 nike

如果您想一次性提醒用户某事(一次关于新功能、即将举行的事件、特别优惠等),最好的方法是什么?

我主要关心数据表示,但如果有更多问题需要考虑,请指出。这是我第一次处理这个特殊问题。

所以到目前为止我的想法......

您可以有一个用户、一条消息和一个已查看/已确认的消息表。当用户确认消息时,我们在看到的表中有一个新条目,其中包含用户 ID 和消息 ID 对。

但是seen表会随着用户数和消息数的增加而快速增长。在某些时候,这将变得笨拙(任何洞察力何时适用于单个服务器上的单个 mysql 数据库?)。

是否只为每条消息创建 1 个可见表并可能以 20-30 个这样的附加表开始?不是真正的问题。它只是带来了额外的麻烦,即每次有新消息时都必须创建一个新表(当然,这将在代码中自动完成 - 仍然需要更多编码)。

这是针对当前拥有 2-3K 用户的项目,但希望在明年将其增加到 10K,当然,我们也在考虑超越这一点......

编辑:我对目前投票最高的方法一点都不热心。 该提案似乎是预填充消息表并删除看到的消息。这似乎是更多的工作。每次添加新消息时,您不仅必须添加整个用户列表。每次添加新用户时,您还必须为新用户添加所有消息 - 单独的逻辑。

最重要的是,消息被“看到”的记录实际上是没有记录。这似乎不对。另外,如果您以后决定使用简单的时间戳来跟踪何时看到消息。您必须重写大量代码,而其他代码变得无法使用。

最后,有人能告诉我为什么向数据库中添加新表如此可怕吗?添加新功能时,这种情况不会一直发生吗?以任何 CMS 为例:Joomla 或 Wordpress。添加新插件时,您是在动态创建表。因此,它必须比“不要做”更细致入微、更符合情境。有哪些陷阱,在什么情况下你不做或者可以做?

我知道您可能会说:在生产服务器上创建新表时要小心。确保它已经过良好测试,但最终,您只是添加了一个空表。

这可能需要和扩展答案,所以如果有人知道任何文章,请发布。

编辑:加布里埃尔·索萨 (Gabriel Sosa) 给出了一个很好的消息表示例,我将简单地创建一个与我最初发布的表类似的已见表,尽管也有时间戳列。谢谢!

最佳答案

您可以将未看到的消息列在一个表中,一旦显示该消息,您就可以从表中删除该行。您还可以在 X 周后删除行,也许,无论用户是否看到这些消息。这将防止表格无限增长。我在想象这样的表格:

messages--------type            PRIMARY KEYtext            TEXTunseenMessages--------------id              PRIMARY KEYmessageType     FOREIGN KEYuser            FOREIGN KEYexpirationDate  DATE

unseenMessages 表将保存您系统中的所有消息,每个用户每条消息一次。当用户加载页面时,您检查他们是否在此表中有任何条目。如果是这样,您将显示这些消息,然后将它们从表中删除。将其视为消息“收件箱”。

此外,我不会做任何涉及动态表创建的事情。你永远不应该* 即时创建表格。曾经。

* 当然,临时表除外。

您的所有消息都应存储在一个 表中,或者至少存储在固定数量的预定义表中。即时创建表是数据库的大忌。动态添加和删除列也是如此。您只是不要动态更改数据库模式。在礼貌的社会你不会那样做。如果您认为必须这样做,则说明您没有正确设计数据库。

编程模拟是 eval() 函数:它只是那些几乎从来都不是好主意的东西之一。平心而论,eval() 在某些情况下是可以的。动态创建表格从来都不是。

关于mysql - 如何在 Web 应用程序中实现一次性(每个用户)消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1072019/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com