【问题标题】:Tips for database design in a web application [closed]Web 应用程序中的数据库设计技巧 [关闭]
【发布时间】:2010-09-08 00:43:06
【问题描述】:

有人对 Web 应用程序的数据库设计有任何提示/建议吗?当/如果我正在开发的应用程序起飞并开始大量使用时,这种东西可以在未来为我节省大量时间/精力。

更具体地说,该应用程序是一个策略游戏(基于浏览器,仅文本),主要涉及玩家发出“命令”,这些“命令”将存储在数据库中并稍后处理,结果也存储在那里(“订单”的历史和相应的结果可能会变得相当大)。

已编辑以添加更多详细信息(根据要求):

平台:Django

数据库引擎:我正在考虑使用 MySQL(除非使用另一个有很大的优势)

架构:我现在只有一些 Django 模型,这里发布的细节太多了。如果我开始发布模式,这会变得过于具体,我正在寻找一般提示。例如,考虑我发出稍后将处理的“订单”并返回我必须存储以显示某种“历史”的结果。在这种情况下,最好为“历史”创建一个单独的表,还是只使用一个聚合“订单”和结果的表?我想我可以缓存“历史”表,但这会占用更多的数据库空间和更多的数据库操作,因为我必须不断地创建新行,而不仅仅是在聚合表中更改它们。

【问题讨论】:

    标签: database-design web-applications


    【解决方案1】:

    如果您发现自己在一个查询中加入 6 个以上的表以检索经常被点击的报告类型网页的数据,您应该非规范化您的表。此外,如果您使用 Hibernate 或 ActiveRecord 等 ORM 库,请确保花一些时间在它们生成的默认映射和最终生成的 sql 上。当您可以通过一次往返数据库来获得相同的结果时,他们往往会与数据库非常闲聊。

    【讨论】:

      【解决方案2】:

      您可能已经触及了一个更大的问题,即为高可扩展性和性能而设计。

      基本上,对于您的数据库设计,我会遵循良好的做法,例如为您希望经常使用的数据添加外键和索引,通过将数据拆分为较小的表来规范化您的数据,并确定哪些数据要经常读取以及哪些就是要经常写和优化。

      对于高性能 Web 应用程序,比数据库设计更重要的是,您可以通过 HTML 页面缓存在客户端级别有效使用缓存,通过缓存数据在服务器级别有效使用缓存,或者提供静态文件代替动态文件。

      缓存的好处在于可以根据需要添加它,这样当您的应用程序真正起飞时,您就会相应地发展。

      就您的历史数据而言,这是一个很好的缓存,因为您不希望它经常更改。如果您希望从您的数据中生成定期且相当密集的报告,那么最好将此数据放入另一个数据库中,以免您的 Web 应用程序在运行时停止。

      当然,除非您认为您的应用程序需要,否则这种优化确实没有必要。

      【讨论】:

        【解决方案3】:

        您为什么不发布您现在拥有的架构?如果没有详细说明您将使用的平台和数据库以及您建议的表结构,这个问题太宽泛了,无法有效地回答......

        【讨论】:

          【解决方案4】:

          Database Normalization 和对索引的良好思考是您不能错过的两件事。尤其是当你考虑一个游戏时,SELECTS 比 UPDATE 更频繁地发生。

          从长远来看,您还应该看看memcached,因为只要您拥有多个用户,数据库查询就会成为瓶颈。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-05-31
            • 2011-10-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多