配置存储设置[文件与数据库]

时间:2011-02-14 21:53:40

标签: php mysql

我看到程序员将大量信息放入数据库中,否则这些数据库可以放在一个包含数组的文件中。而不是数组,他们将使用许多SQL表,我相信这些表更慢。

CitrusDB在数据库中有一个名为“holiday”的表。该表只包含一个名为“holiday_date”的日期列,该日期列包含假日日期。我们的想法是让用户在表格中添加假期。柑橘和我在工作场所工作的程序员更愿意将所有这些信息都放在表格中,因为它是“标准的”。

除非您允许用户通过用户界面添加假期,否则我不明白为什么会这样。我感觉有些东西我不在了。

9 个答案:

答案 0 :(得分:6)

有时您希望为产品设计一点灵活性。如果您的产品在不同的国家/地区发布且假期不同,该怎么办?只需调整表格,一切都会正常工作。如果它被硬编码到应用程序中,或者更糟糕的是,通过应用程序在许多不同的地方进行硬编码,那么您可能会陷入痛苦的世界,试图让它在新的语言环境中运行。

通过使用表格,还有一种访问此信息的方法,这可能使程序更加一致,更易于维护。

有时效率/速度不是设计的唯一动机。可维护性,灵活性等是非常重要的因素。

答案 1 :(得分:2)

某些假期的实际日期每年都会发生变化。使用查询或脚本更新假期的灵活性使得以最简单的方式将其放入数据库中。人们可以轻松实现一个脚本,当脚本存储在数据库中时,每年为其国家或地区更新假期。

答案 2 :(得分:1)

我发现将'配置'存储在数据库中而不是属性文件或数据库中的主要优点是数据库通常是集中存储的,而服务器可能经常被分割成一个几个甚至几百个服务器的农场。

我已经在企业环境中实现了这样的解决方案,并且能够在单一访问点更改配置,知道它将立即传播到所有服务器,而无需考虑部署过程实际上非常强大,而且我们已经非常依赖它了。

答案 3 :(得分:1)

从理论上讲,数据库的设计和调整是为了提供比从文件读取磁盘更快的数据访问速度。在实践中,对于中小型应用,这种差异是微不足道的。然而,最佳实践通常以更大规模为导向。通过在小型应用程序上实施最佳实践,您可以创建一个 能够 扩展的应用程序。

在项目的其他方面,还考虑了数据的可访问性。基于Web的应用程序中的大多数数据在哪里?在数据库中。因此,我们尝试将所有数据保存在数据库中,或尽可能多。这样,将来,如果您决定现在需要再次加入假日日期事件列表(例如),则所有数据都在一个地方。这种不同图层的分割会在您的应用程序中创建层。当每个层可以专门处理其域中的角色(数据库处理数据,HTML处理表示等)时,更改或扩展应用程序也更容易。

最后,在设计应用程序时,必须考虑“按总线原则命中”。因此,开发人员'A'将假期放在PHP文件中。你知道他们在那里,当你处理代码时,它不会产生问题。然后......你被公共汽车撞了。你没有佣金。开发商'B'出现了,现在你的老板希望假期日期改变了 - 我们不再让总统日休息了。嗯。 Johnny Next Guy不知道你的PHP文件,所以他必须挖掘。在这个例子中,它听起来有点琐碎,可能有点傻,但同样,我们总是考虑到可扩展性。即使你知道它不会扩大规模。如果您离开,这些标准可以让其他开发人员更容易从您离开的地方继续前进。

答案 4 :(得分:1)

答案存在于许多领域。我曾经编写自己的软件来读写我自己的平面文件数据库格式。对于具有少量字段的小型系统,看起来似乎是值得的。一旦你学习了SQL,你甚至可以将它用于最小的东西。

  1. 文件解析速度很慢。字符串阅读器,比较字符,查找字符序列,都需要时间。 SQL数据库确实有文件,但它们会被更高效地读取然后缓存。

  2. 更新&保存数组需要您全部读取,重建全部,全部写入,全部保存,然后关闭文件。

  3. 选项:SQL有许多内置功能可以执行许多功能强大的功能,从按顺序排列到仅返回x到y结果。

  4. 安全

  5. 同步 - 假设您同时访问了两次相同的页面。 PHP将同时读取您的flatfile,进程和写入。它们会相互覆盖,导致数据压缩。

  6. SQL提供的功能数量,访问的简易性,代码所需的东西的缺乏以及其他许多因素都会导致硬编码数据不那么好。

答案 5 :(得分:0)

答案是,这取决于您正在处理的列表类型。在这里,您的列表似乎包含一组固定的小值。

出于许多正当理由,数据库管理员喜欢使用枚举值的值表。它有助于数据完整性和ETL处理,作为你想要它的两个例子。

至少在Java中,对于这些简短的固定列表,我通常使用Enums。在PHP中,您可以使用what seems to be a good way of doing enums in PHP

这样做的好处是值是内存中查找,但您仍然可以获得DBA关心的数据完整性。

答案 6 :(得分:0)

如果您需要从10个中查找单个信息,那么读取文件而不是查询数据库可能无论如何都不会带来任何明显的优势。从数百或数千等读取单个数据时,从数据库读取时具有很大的优势。不是加载一些大小的文件并读取所有内容,花费时间和内存,从数据库查询很快,并返回您查询的内容。它类似于将数据写入数据库与文本文件 - 插入数据库仅包括您要添加的内容。写一个文件意味着要读取整个内容并将它们全部写回来。

如果您知道您正在处理非常少量的值,而您知道该要求永远不会改变,请将数据放入文件并阅读它们。如果你不是100%肯定它,不要用脚射击自己。使用数据库,您可能会成为未来的证明。

答案 7 :(得分:0)

这是一个很大的问题。简短的回答是,永远不要将“数据”存储在文件中。

首先,您必须处理读/写文件权限问题,这会带来安全风险。

其次,您应该始终计划应用程序的增长。当'holiday'数组变得非常大,或者需要扩展为包含假日类型时,您希望它在DB中。

我可以看到其他答案滚滚而来,所以我会留下它。

答案 8 :(得分:0)

通常,应用程序数据应存储在某种类型的存储中(而不是平面文件)。 可以将配置/设置存储在KVP存储(例如Redis)中,然后通过REST API进行访问。