我正在使用opencart(一种用于电子商务的开源框架)。
只使用mysql数据库作为数据源。
然而,由于目前的网站流量,我相信我们可以通过使用noSQL (Mongodb)来提高效率。这是伟大的,但问题是我将如何去和整合Mongodb使用它与Mysql一致?
我开始四处寻找,发现Mandango (http://mandango.org/)用于映射,并且比doctrine有更好的性能。
然而,我不能得到我的头周围,我将如何映射数据。看起来ODM使用对象,但是当我在这种情况下使用模型对象时,这不是基于原始SQL查询吗?为了给你一个概念,目前openart有一些具有原始SQL查询的模型。下面是客户模型方法的例子。
public function editCustomer($data) {
$this->db->query(
"UPDATE " . DB_PREFIX
. "customer SET firstname = '" . $this->db->escape($data['firstname'])
. "', lastname = '" . $this->db->escape($data['lastname'])
. "', email = '" . $this->db->escape($data['email'])
. "', telephone = '" . $this->db->escape($data['telephone'])
. "', fax = '" . $this->db->escape($data['fax'])
. "' WHERE customer_id = '" . (int) $this->customer->getId() . "'"
);
}
我远非PHP专家,但我有运行使用MongoDB和MySQL的系统的经验。
我建议为你的数据访问对象创建接口,然后为MySQL或Mongo提供特定的实现。例如:
interface iCustomerDAO
{
public function getCustomer($id);
}
class MySQLCustomerDAO implements iCustomerDAO
{
public function getCustomer($id)
{
...
return $customer;
}
}
那么你可以有一个读/写MySQL的实现和一个读/写MongoDB的实现
可能不需要ODM。相反,您可以将数据加载到对象中,然后对对象做任何您需要做的事情。