Configuration storage setup
我看到程序员将大量信息放入数据库中,否则这些信息可能被放入保存数组的文件中。而不是数组,它们将使用许多SQL表,我相信,这些表速度较慢。
柑橘数据库中有一个名为"Holiday"的表。此表只包含一个日期列,称为"假日日期",用于保存属于假日的日期。其想法是让用户向表中添加假日。柑橘和我在工作场所工作的程序员更喜欢将所有这些信息放在表格中,因为它是"标准"的。
我不明白为什么会这样,除非你允许用户通过用户界面添加假日。我有种感觉,我错过了什么。
有时候你想设计一个有点灵活性的产品。如果你的产品是在不同的国家和不同的假期发布的呢?调整一下桌子,一切都会好起来的。如果它是硬编码到应用程序中的,或者更糟的是,通过应用程序在许多不同的地方进行硬编码,那么在尝试让它在新的区域工作时,您可能会感到非常痛苦。
通过使用表,还有一种访问这些信息的单一方法,这可能使程序更一致,更容易维护。
有时效率/速度不是设计的唯一动机。可维护性、灵活性等是非常重要的因素。
有些节日的实际日期每年都在变化。使用查询或脚本更新假日的灵活性使将其放入数据库成为最简单的方法。可以很容易地实现一个脚本,当它存储在数据库中时,该脚本可以为其国家或地区每年更新假日。
答案存在于许多领域。我曾经编写自己的软件来读写自己的平面文件数据库格式。对于小系统,很少有字段,这似乎是值得的。一旦您学习了SQL,您可能会将它用于最小的事情。
文件分析速度慢。字符串阅读器、比较字符、查找字符序列都需要时间。SQL数据库确实有文件,但它们是先读取后缓存的,这两种方法都更有效。
更新和保存数组需要您读取全部、全部重建、全部写入、全部保存,然后关闭文件。
选项:SQL有许多内置的功能,可以做很多功能强大的事情,从把事情安排到只返回x到y的结果。
安全性
同步-假设同一页面同时访问两次。PHP将同时从平面文件、进程和写入中读取数据。它们将互相覆盖,从而导致数据丢失。
SQL提供的功能数量多、访问方便、缺少编码所需的东西,以及其他许多东西都有助于解释为什么硬编码数组没有那么好。
理论上,数据库的设计和调优是为了提供比从文件中读取磁盘更快的数据访问。在实践中,对于中小型应用程序,这种差异非常小。然而,最佳实践通常面向更大的范围。通过在您的小应用程序上实现最佳实践,您可以创建一个能够向上扩展的应用程序。
在项目的其他方面,还考虑了数据的可访问性。基于Web的应用程序中的大部分数据在哪里?在数据库中。因此,我们试图将所有数据保存在数据库中,或者尽可能多地保存在可行的数据库中。这样,将来,如果您决定现在需要再次加入假日日期一个事件列表(例如),那么所有数据都在一个地方。这种对不同层的分段在应用程序中创建了层。当每一层都可以专门处理其域中的角色(数据库处理数据、HTML处理表示等)时,更改或扩展应用程序就更容易了。
最后,在设计应用程序时,必须考虑"被总线原则击中"。所以,开发人员"a"将假日放在一个PHP文件中。你知道它们在那里,当你处理代码的时候,它不会产生问题。然后…你被公共汽车撞了。你已经失去工作了。开发人员"B"来了,现在您的老板希望更改假日日期-我们不再休假总统日。嗯。约翰尼下一个家伙不知道你的PHP文件,所以他必须挖掘。在这个例子中,它听起来有点琐碎,也许有点愚蠢,但同样,我们总是在设计时考虑可伸缩性。即使你知道它不会扩大。这些标准使其他开发人员更容易从你离开的地方找到你离开的地方。
我发现将"配置"存储在数据库中而不是属性文件或充满数组的文件中的主要优点是,数据库通常集中存储,而服务器通常可以跨几个服务器场(甚至数百个服务器场)进行拆分。
我已经在公司环境中实现了这样的解决方案,并且能够在单个访问点更改配置,知道它将立即传播到所有服务器,而不需要考虑部署过程,这实际上是非常强大的,而且我们已经非常依赖它。
这是个大问题。简而言之,永远不要将"数据"存储在文件中。
首先,您必须处理读/写文件权限问题,这会带来安全风险。
第二,您应该始终计划一个不断增长的应用程序。当"holiday"数组变得非常大,或者需要扩展以包含holiday类型时,您希望它在db中。
我可以看到其他答案,所以我就不提了。
如果您需要从10中找出一条信息,那么读取一个文件和查询一个数据库都不会给您带来很大的好处。从成百上千的数据等中读取单个数据,在从数据库中读取数据时具有很大的优势。与加载某个大小的文件并读取所有内容(占用时间和内存)不同,从数据库中进行查询是快速的,并且可以准确返回所查询的内容。它类似于将数据写入数据库与文本文件的比较——插入数据库只包括您要添加的内容。写一个文件意味着读取整个内容,然后再把它们全部写出来。
如果您知道您处理的是非常少的值,并且您知道需求永远不会改变,那么就将数据放入文件并读取它们。如果你不能百分之百地确定,就不要开枪打自己的脚。使用数据库,你可能会成为未来的证明。
答案是,这取决于你要处理的是哪种列表。在这里,您的列表似乎由一组固定的小值组成。
由于许多有效的原因,数据库管理员喜欢为枚举值设置值表。它有助于数据完整性和处理wtih etl,作为两个示例说明您为什么需要它。
至少在Java中,对于这些简短的固定列表,我通常使用Enums。在PHP中,您可以使用似乎是在PHP中执行枚举的好方法。
这样做的好处是,值是内存中的查找,但您仍然可以获得DBA关心的数据完整性。