【发布时间】:2011-06-03 03:15:56
【问题描述】:
当调用 saveAll 函数时,我正在尝试将值写入 2 个数据库(不必同时)。这不适用于所有表,但仅适用于 2 个数据库中 10 个表中的 4 个。
我目前的逻辑,在伪代码中:
$updateOk = $model->saveAll(...);
if (!$updateOk)
return error;
/* start second source synchronizing */
$model->changeDataSource('second');
$updateOk = $model->saveAll(...);
$model->changeDataSource('default');
if (!$updateOk)
return error;
return;
这样做的问题是有时它不会写入第二个源,从而导致不一致。
我需要一些关于如何最好地解决此问题的建议。我有 3 个可能的想法:
- 按照上面的代码并添加检查以确保保存内容,如果保存,则回滚默认值以保持一致性
- 编写一个每次调用 saveAll() 时执行复制的服务器脚本。 (资源密集型且无法真正扩展)
- 结合使用两者。在保存之前检查一致性并每天进行一次脚本复制
实现此要求的最佳方式或有更好的方式吗?有什么方法可以确保一致性?
【问题讨论】:
-
另一个想法可能是使用
beforeSave和/或afterSave将数据保存到另一个数据源。只是一个想法。 -
是的,我打算改写 saveAll 函数。并添加检查我要复制的表是否进行切换并进行提交。这样,在控制器中工作的编码器就不必知道模型的复杂性。
标签: mysql cakephp datasource database-replication