【发布时间】:2016-01-09 02:51:53
【问题描述】:
场景:
使用 symfony2 构建一个包含 RESTful 后端和 AngularJS 前端的商业应用程序
这个应用程序永远不会被很多客户使用(如果我能卖出 100 个,那就太棒了。希望更多,但无论如何都会很大)
我想为数据库建立一个多租户结构,每个客户一个模式(他们为客户存储敏感信息)
我知道更新架构时会出现问题,但我必须忍受它。
今天我有一个 MySQL 演示数据库,每次新客户购买应用程序时我都会克隆它。
我的客户之间没有关系,所以我不需要为任何查询与多个分片通信
对于一位客户,他们可以同时在多个设备上使用该应用,但不会在数据库中进行大量写入操作
我的问题
尝试为后端 API 设置一些功能测试我读到有一个专门的 sqlite 数据库来加载测试数据,这似乎是个好主意。
但是我想知道从 MySQL 切换到 SQLite3 数据库作为我对应用程序的主要数据库支持是否也是一个好主意,以及每个客户拥有一个专用 SQLite3 数据库是否是一种常见的做法。我从未使用过 SQLite,我不知道更新架构和复制所有数据库中的更改的过程是否与其他 RDBMS 的方式相同
这是 SQLite 的正确方案吗? 关于如何实现这一点的任何建议(又名教程)?
【问题讨论】:
-
如果您的功能测试表明 MySQL 工作正常,您为什么要切换到 SQLite?您也可以在 MySQL 中拥有一个专用数据库——这似乎是保证客户数据分离的好主意(您甚至可以将它们放在单独的服务器上)。
-
@GordonLinoff 我还没有任何功能测试。我想到了 SQLite3,因为我发现的关于我的控制器功能测试的几乎所有信息都在谈论 SQLite,我认为对所有东西都使用相同的系统会很好。我不知道 SQLite,但看起来更容易备份,因为它只是复制文件的问题。我只是想知道这是否是一种简单的方法和常见的做法......谢谢!
-
这将是一场维护噩梦,并限制您跨多个租户进行查询的能力。当通过例如居住单元来了解事物可能有意义时,您还可以按租户隔离数据库。这里的理由似乎是安全性,但是有一些方法可以安全地构建数据库,而无需每个客户拥有一个(一直都在这样做),并且数据库隔离并不能保证数据安全(攻击者可以访问可以看到的应用程序)它们全部或它们所在的文件系统)。也许您应该备份并询问有关您的安全问题的问题。
-
@Schwern 我的意思是每个客户都有一个 schema 要清楚。既是安全又是维护。例如,单独更新模式不会影响我的所有客户。我在中间msdn.microsoft.com/en-us/library/aa479086.aspx
-
@luso 这就是我的假设。这仍然是一场噩梦。为什么要在租户数据库这样简单的东西中隔离模式更新?你预计这种需求会很大吗?不仅仅是想要更新所有模式?为什么?应用程序如何知道每个租户正在使用哪个版本的架构,它是否必须维护所有可能版本的查询,或者您是否会向每个租户分发不同的应用程序?
标签: mysql database sqlite rest database-design