php - 难道 PHP 中的 OOD 双重存储 MySQL 中的内容是一种资源浪费吗?

标签 php mysql

<分区>

我的问题是:如果我根据 MySQL 中的数据在 PHP 中创建对象,我是否会双重存储数据并因此浪费资源并减慢我的应用程序?

  1. 人们这样做只是为了将 MySQL 数据缓存为对象以便更快地访问,因为用户不会在每次切换到新产品时都查询数据库吗?
  2. 他们只为不太复杂的代码这样做吗?
  3. 在小型 MVC 中处理此问题的合适方法是什么?即在 session 开始时,模型是否应该创建所有产品的数组?永远不应该有一个包含所有产品的数组,而只是每次询问数据库并将这些数据每次都转换成一个新的 Product 对象吗?

如果你愿意,你可以继续阅读我为什么要问...

我知道这对我的应用程序的大小并不重要,但我想正确地开始它。 我有一个我制作的基本的小 MVC 和一个我们称之为产品的项目数据库。为了方便起见,我只是想决定是否/何时/何地从 MySQL 数据到 PHP 对象。

这是我的文件树的样子:

root
    controller
        Controller.php
    model
        Model.php
        Product.php
    view
        Products.php
        Product.php
    index.php

相关代码如下:

// Controller.php
if (!isset($_GET['product'])) {
    - getProducts() && include view/Products
} else {
    - getProduct('product') && include view/Product
}

// Model.php
getProducts() {
    while($row = $stmt->fetch_assoc()) {
        $array[$i] = new Product($row["id"], $row["name"], $row["price"]);
        $i++;
    }
    return $array;
}
getProduct($id) {
    $allProducts = $this->getProducts();
    return $allProducts[$id];
}

// Products view
<?php foreach ($products as $product): ?>
    display $product->id and $product->name
<?php endforeach; ?>

// Product view
display $product->name and $product->description and $product->price ...

最佳答案

它确实在技术上将数据库中的数据复制到内存中,但就像在餐厅阅读菜单会将菜单项复制到您自己的内存中一样。没有办法利用或处理来自数据库的数据, 不将数据读入内存,以便使用数据的脚本执行操作,就像没有办法从菜单中点菜而不短暂地保存它一样你自己的内存。而且,就像您可能在用餐结束时不记得大部分菜单一样 - 在您不再需要它之后忘记了 - 在脚本完成执行后,PHP 不会在内存中保留任何内容,因为整个 VM 在脚本结束。

最好不要将不需要的数据读入内存 - 例如,查找您需要的一条用户记录,而不是整个用户表。你必须自己做基准测试来评估你自己的特定场景,但一般来说,你最好做重复的小查询(使用使用良好索引的 WHERE 子句)来只检索你需要的数据,而不是做用于检索您可能需要或不需要的大量数据的大型查询。

关于php - 难道 PHP 中的 OOD 双重存储 MySQL 中的内容是一种资源浪费吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448419/

相关文章:

php - 搜索其值中包含最后一个字符的表列

php - wordpress 菜单中缺少菜单项 ID

javascript - 在表单上跳转到页面顶部提交到新页面

php - 蛋糕PHP : How to save Arabic words into mysql table?

php - SQL 结果作为 txt.file 由 php

php - MySQL 创建过多的重复行

PHP MySqli 多查询 & while 在一页中 - 有助于简化代码

mysql - Microsoft SQL Operations Studio 可以在Mac 上访问MYSQL 数据库吗?

python - MySQL 从 Python 插入停止

mysql - 如何使用 Oracle SQL Developer 连接到 MySQL 数据库?