php - 什么时候在源代码中硬编码数据,什么时候使用数据库,什么时候使用网络服务?

标签 php database web-services storage data-storage

考虑下面的类,其中一些与产品及其组件相关的数据被硬编码到源代码中。

class ProductCharacteristics
{
    private $model;

    function __construct($model)
    {
        $this->model = $model;

        //Since there are several product models, 
        //we hardcode each model separately.
        //models are 50, 100, 200  

        //length
        $this->length[ 50] = array(5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5);
        $this->length[100] = array(5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5);
        $this->length[200] = array(5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5, 5.5);

        //weights
        $this->weight[ 50] = array(20, 114, 50);
        $this->weight[100] = array(68, 192, 68);
        $this->weight[200] = array(68, 192, 68);    

        //descriptions
        $this->description[ 50] = array('3"', '3"', 6.50);
        $this->description[100] = array('6"', '6"', 6.50);
        $this->description[200] = array('6"', '6"', 6.50);

    }

    public function getLengths()
    {
        return $this->length[$this->modelNumber];
    }

    public function getWeights()
    {
        return $this->weight[$this->modelNumber];
    }

    public function getDescriptions()
    {
        return $this->description[$this->modelNumber];
    }
}

//instantiate:
$pc = new ProductCharacteristics(50);
$weight = $pc->getWeight();
print 'weight of component 1 is ' . $weight[0];
print 'weight of component 2 is ' . $weight[1];

问题一:

是否应该将这种类型的数据(小的、很少更改的)编码(放置)到数据库中。为什么或者为什么不?我要寻找的不仅仅是一个是/否。寻找一点解释/历史/基本原理。

问题 2:

我选择硬编码而不是将其放入数据库的原因是因为我的印象是“为这么小的数据集调用数据库是昂贵的,而且令人望而却步”。如果我有 2MiB 的此类数据,我当然不会将其放入源代码中。但由于该集合很小,我将其放入源代码中还有一个额外的好处,即如果任何数据发生变化,我的源代码控制存储库中会跟踪该变化。如果它发生在数据库级别,我将无法知道更改

因此,我认为将其硬编码到代码中“没什么大不了的”。我已经运行了代码,因此可以轻松访问一个仅包含数据的额外文件。

问题:如果改为在数据库中对该数据进行编码,这是“大事”还是相对“没什么大事”?也就是说,如果源代码中的硬编码数据是 O(1),那么将它放入数据库中有什么大不了的呢?

它在{访问时间、开销}方面是否与源代码中的硬编码数据相似? 我至少将使用数据库视为 O(2),因为我们必须使用外部程序,即数据库系统来获取数据。

我可以证明我也可以使用 Web 服务获取数据,但将它放在 O(3) 中,因为它是一个外部系统,我们必须调用外部系统并且还需要网络权重延迟。

最佳答案

答案 1

显然,可以对永不更改的数据进行硬编码。

偶尔/很少更改的数据是在某些时候仍需要可配置的数据。因此,不应对其进行硬编码,因为重新配置软件比更新源代码/编译/重新部署要容易得多。

答案 2

对于 99% 的情况,将数据存储在数据库中并不是什么大问题。否则,它们为什么会存在?对于数据库访问,它是关于延迟/开销的。如果您的数据库服务器与您的程序驻留在同一操作系统实例上,则没有网络延迟,并且开销将取决于您的数据库设计和底层存储架构(RAM/HDD/SSD)的组合。对于大多数不涉及数百万/数十亿规模的项目,使用任何通用数据库部署都可以。

关于php - 什么时候在源代码中硬编码数据,什么时候使用数据库,什么时候使用网络服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33576980/

相关文章:

php - 将产品名称添加到 WooCommerce 中的电子邮件主题

mysql查询结果的php if语句(检查查询是否返回任何内容)

web-services - 使用 SharePoint 的 lists.asmx 和 UpdateListItems 按 Guid 或 UniqueId 删除项目

php - when in 从句与 mysql pdo

php - 超出内存大小?

database - Haskell 打印错误

web-services - 使用不同版本的 Web 服务的设计模式?

javascript - 如何使用javascript调用webservice

database - 历史数据建模文献、方法和技术

database - 如何使用 Delphi FireDAC 对数据库应用具有 UNIQUE 约束的缓存更新 FDQuery