对于正在使用沙箱模式的站点(如付款站点),是否会使用单独的数据库,还是使用同一个数据库?隔离沙箱环境
我正在研究生产和沙箱环境的两个模式。以下是两个选项。
选项1:
- 克隆数据库,将请求路由到基于模式正确的数据库。
OPTION 2
- 单数据库, '主表' 具有
is_sandbox
布尔值。
每种方法的优缺点是什么?
对于正在使用沙箱模式的站点(如付款站点),是否会使用单独的数据库,还是使用同一个数据库?隔离沙箱环境
我正在研究生产和沙箱环境的两个模式。以下是两个选项。
选项1:
OPTION 2
is_sandbox
布尔值。每种方法的优缺点是什么?
在大多数情况下,您希望保留两个单独的数据库。有没有很好的理由有两个在同一数据库中混,和很多很好的理由,让他们分开:
跟踪哪个实体中“的境界”(生产与沙盒)对于你的代码来说是额外的工作,你可能必须将它包含在很多地方。
您在数据库模式中也需要该逻辑。例如,指数都必须包含领域。
如果您忘记了任何代码,您就有自己的潜在安全漏洞。恶意用户可能会导致来自一个领域的数据影响其他领域。根据你的应用程序的不同,这个范围可能从烦人到可怕。 (例如,如果是支付应用程序,潜在的后果非常可怕:“假装”沙盒中的钱可以转换为真钱!)
即使您的代码完美无缺,仍然会有一些信息不可避免地在领域之间泄漏。例如,如果您的应用程序使用任何顺序标识符(例如,MySQL中的AUTO_INCREMENT
),那么沙箱中显示的值的差距将与生产中使用的值相对应。不过这个问题是否值得商榷。
使用两个独立的数据库整齐地解决了所有这些问题。这也意味着您可以在需要时轻松清理沙箱。
例外:如果您的应用程序是一个几乎完全的公共网站(例如,像堆栈溢出或维基百科),或涉及社会方面难以复制在沙箱中(如Facebook),集成度更高沙箱可以使更有意义。