gpt4 book ai didi

php - 在应用程序中存储一些记录,在数据库中存储一些记录?

转载 作者:行者123 更新时间:2023-11-29 02:33:51 26 4
gpt4 key购买 nike

我有一个应用程序,似乎在应用程序代码中存储一些硬编码的记录而不是数据库中的条目是有意义的,并且能够在查看时将两者合并为一个公共(public)结果集记录。这种方法有什么缺陷吗?

首先,除了应用程序开发人员想要的情况外,它似乎更容易强制执行永远不会编辑/删除的记录。其次,在某些情况下,例如安装第 3 方模块,可以从其配置中读取记录,而不是在数据库中执行插入(具有相关的维护问题)。

一些常见的例子:

                                       In the application        In the database
----------------------------------- ------------------ ----------------------
customers (none) all customers
HTML templates default templates user-defined templates
'control panel' interface languages default language additional languages
Online shop payment processors all payment processors (none)

所以,我认为我有三种选择,具体取决于场景:

  1. 数据库中的所有记录
  2. 应用中的一些记录,数据库中的一些记录
  3. 申请中的所有记录

似乎有两种实现方式:

  1. 数据库中的所有记录:
    • 可以将列标记为“可编辑”或“锁定”
    • 负 ID 可以表示锁定值,正 ID 可以表示可编辑
    • 奇数代表锁定,偶数代表可编辑...
  2. 一些记录存在于应用程序中(作为变量、数组或对象...)

是否有任何标准方法来处理这种情况?我是否遗漏了一些非常明显的解决方案?

我正在使用 MySQL 和 php,如果这改变了你的答案!

最佳答案

“在应用程序中”是指这些记录存在于文件系统中,可供应用程序访问吗?

这完全取决于您正在构建的应用程序。有几件事需要考虑,尤其是在代码复杂性和性能方面。虽然我没有足够的关于您的项目的信息来建议具体细节,但请记住以下几点:

所有内容都有两个可能的存储库会增加代码的复杂性。这意味着可读性将下降,并且将开始出现难以追踪的奇怪错误。在大多数情况下,采用可能可行的最简单的解决方案符合您的最大利益。如果您查看大型 PHP/MySQL 软件包,您会发现即使代码本身有很多默认值,数据几乎完全来自数据库。当您无法摆脱最简单的解决方案(即将所有内容存储在文件中)时,这可能是一个合理的策略。

大量涉及数据库的最大缺点是性能。您绝对应该跟踪应用程序中任何典型代码路径的所有数据库调用。如果您严重依赖大量查询,则必须使用大量缓存。跟踪发生的一切,并记住计算机必须做什么才能满足请求。让计算机的任务尽可能简单是您的工作。

如果您将模板存储在数据库中,另一大性能损失将是缺乏操作码重用和缓存。普通的网络托管环境会编译一次 PHP 文件,然后将其字节码版本保留一段时间。这节省了后续的重新编译并大大加快了执行速度。但是,如果将 PHP 模板代码填充到 eval() 语句中,则每次调用此代码时,PHP 都必须重新编译该代码。

此外,如果您以这种方式使用 eval() 并允许用户编辑模板,则必须确保这些用户是可信的 - 因为他们将有权访问整个 PHP 环境。如果你走另一条路并使用模板引擎,你可能会遇到更大的性能问题(但不是安全问题)。在任何情况下,尽可能考虑缓存模板输出。

关于锁定机制:您似乎在这里引入了一个大的架构问题,因为您现在必须让每个存储库(文件和数据库)了解哪些记录对另一个存储库是禁止访问的。我建议您完全重新考虑这种方法,但如果您必须这样做,我强烈建议您使用单独的列来标记记录(基于 ID 的东西听起来像是一场噩梦)。

标准方法是在数据库中保留经典的 DB 形内容(这些内容是用户帐户和其他适合表的内容)并在文件系统中保留配置、所有代码和模板内容。

关于php - 在应用程序中存储一些记录,在数据库中存储一些记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369459/

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