一种语言和一个数据库有什么好处?1.避免单个数据库数据量大,难以优化查询。例如:假设有2种语言,中文和英文。在商品表中,不同语言的商品其实是同一种商品,它们有共同的属性、共同的价格、共同的库存等;如果放在库里,原来商品数据有100W,现在直接变成200W。那么优化起来是不是比较麻烦呢?而且对于商品这样的表,更新操作非常频繁,所以必须持续维护索引,开销相当大。为什么不分表呢?如果一种语言一个表,那不是和分库的原理一样吗?其实我个人认为分表有很多缺点。如果使用一种语言和一张表,如果我们表中的数据太大怎么办?这个时候是不是还要继续分表呢?就目前的情况来看,很多公司都会采用分表的方式来解决问题。也就是说分表两次很麻烦,而且表在同一个数据库,数据量变大了怎么办?如果很难优化),不是更麻烦吗?所以我们采用了分库策略。如何设计表格需要中英文匹配的表格可以放在相应的库中。无需复制所有表格。例如产品表:idtitlestockstatus修改PHP框架的数据库操作方法。我们使用THINKPHP。下面是修改tp.add的方法。tp的add方法声明在Model下。所以我们新建一个commonModel来继承它的Model类。首先在配置文件中配置多个数据库dsneg:'DB_LIST'=>array('DN_CN'=>'mysql:XXXX','DN_EN'=>'mysql:XXXX');配置公共数据库表eg'LANG_TABLE'=>array('goods'=>array('stock,status'),//这里配置这个表需要更新的字段;比如库存和状态必须确认商品的全部一致下面是伪代码protected$dbName;//数据库名protected$tableName;//表名protected$data;//ORM创建的数据对象protected$option;//查询条件和otherfunctions__construct(){}functionadd($data,$option,$replace){if(!$data)$data=$this->data;//如果是create,则添加一次后,$this->datawillbeclearedparent::add($data,$option,$replace);//插入数据到当前数据库//切换数据库$this->dbName='XXXX';//这里我们的数据库都在相同的服务器,所以不需要重新连接//如果数据库没有被使用,则读取DB_LIST配置重新连接数据库。$this->db($id,$dsn);这会切换数据库parent::添加($数据,$选项,$替换);//切换回当前数据库$this->dbName='xxx';}删除和更新数据是一样的。一个表中肯定有一些字段是不需要多语言的,但是要保证不同语言的数据是一致的比如此时更新了一条记录,比如商品价格,商品库存等,其他库的数据也要按照上面的配置进行同步。我们只需要配置需要同步的字段functionsave($data,$option){parent::save($data,$option);//切换数据库//与$data的key中配置的字段进行比较,取交集$fieldparent::save($field,$option);//如果是创建数据,记得赋值数据}
