【问题标题】:Creating "Badges" for my site, best way to store user badges? Using PHP为我的网站创建“徽章”,存储用户徽章的最佳方式?使用 PHP
【发布时间】:2011-12-02 23:56:45
【问题描述】:

我正在向我的网站添加“徽章”,我想知道存储数据的最佳方式是什么。每个徽章都有一个存储在 MySQL 数据库中的 ID。每个用户在 MySQL 数据库中都有自己的行,并且每个用户都有一个 XML 格式的“userdata”文件。所以我可以将它保存在那个 XML 文件中,或者我可以在“用户”行中创建一个新列并将它们保存为“0;5;6;4;” (徽章 ID)。

【问题讨论】:

标签: php mysql xml save


【解决方案1】:

我正在与一个网站做类似的事情。我还没有找到一个确凿的答案。但是不要存储像 0;5;6;4 这样的徽章

取而代之的是一个名为 user_badges 的表

Table user_badges
     user_id
     badge_id

并为徽章准备一张桌子

 Table badges
    badge_id
    badge_name
    ..
    etc

【讨论】:

    【解决方案2】:

    这是一个相当宽泛的问题,我们真的无法明确说明哪种方法最适合您的特定网站配置和目标。无论哪种方式都可能很好地工作。或者,您可以添加一个名为 badges_users 的新 mysql skinny/relational 表,它将用户 ID 与获得的徽章 ID 相关联(如果我正确理解您的目标,我会建议您如何完成它)。

    【讨论】:

      【解决方案3】:

      取决于任意数量的变量,例如项目时间表、资源和流量。如果您想合并一个 nosql 解决方案来存储在文件系统上,那么您将不可避免地获得更好的性能提升,因为您不会创建数据库连接来检索徽章信息。但是很可能您已经建立了数据库连接以首先获取其他用户信息,因此您最终可能会获得微不足道的收益。 SQL 解决方案实施起来会更快,除非您处理大量流量,否则不会出现明显的性能下降。

      我认为在这种情况下,最大的好处是为您的用户信息实现一个缓存层,这样您就不需要为每个用户信息请求都访问持久存储。

      如果您选择数据库解决方案,您可能需要考虑为徽章创建单独的表,而不是在用户表中添加另一列。用户和徽章之间的 1:M 关系将允许您在未来添加更多徽章,并且您可以扩展徽章而不必弄乱用户架构。

      【讨论】:

        【解决方案4】:

        对于这种数据,我建议使用数据库,它会比读取和写入 XML 文件更快。

        【讨论】:

        • 我没有投反对票,但要小心这个声明。有几种可用的 nosql 解决方案,它们比使用传统的 RDBMS 快得多。 nosql-database.org
        • 欣赏评论,但如果他已经在进行查询以调用用户数据,添加徽章不会有什么坏处——因此在这种情况下,这种数据是有意义的。
        • 同意,我在回答中就这方面说了几乎相同的话。
        • 是的,你做到了,我只是无缘无故地回应了你的评论 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-21
        相关资源
        最近更新 更多