首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >软件作为服务共享数据库的Web应用程序还是多个数据库?

软件作为服务共享数据库的Web应用程序还是多个数据库?
EN

Database Administration用户
提问于 2015-09-07 07:17:19
回答 1查看 1.3K关注 0票数 0

(我不确定这是否是发表这个问题的最佳地点。如果没有,请将我重定向到适当的堆栈交换站点。)

我希望为多个客户端部署一个web应用程序。这样做的目的是每个客户只能访问自己的数据。假设客户端是应用程序安装的所有者。每个安装都可以有多个用户。所有安装都在我自己的主机中,这样我就可以更好地控制代码和业务模型(这是一种SaaS类型的事情)。

我正在寻找技术选项来执行这种部署。

备选案文1 -共享单个数据库

要做到这一点,最简单的办法是:

  • 更改数据库,以便每个相关表都知道其“所有者id”。
  • 更改所有SQL查询,以便每个用户只获取与其“所有者id”相关的数据(我不要求用户必须是多个客户端/安装的公共用户)。

然而,这个解决方案有几个缺点:

  • 需要更改大多数SQL代码;
  • 可能会有一些性能影响,因为数据库将有更多的数据(所有安装的数据)。
  • 将不同客户端的数据混合在同一个数据库中可能会导致一些问题(如果有错误,那么某人就更容易访问其他人的数据);

因此,我更倾向于将数据隔离的另一种选择。

选项2 -多数据库

我正在考虑的另一种选择是:

  • 每次安装时,请从托管公司购买一个DB。
  • 提出一个配置方案,允许将每个安装与应该执行连接的数据库相关联。
  • 例如,如果用户访问http://very-nice-app.com/client-3/,代码就知道它必须连接到数据库名- For -client-3。

这解决了数据泄漏的潜在问题,但需要维护多个数据库(如果DB表更改,则必须跨多个安装完成)。这很可能是自动化的。

问题

更好的方法是什么?是否有比我所指出的更好的选择?

提前谢谢你的帮助。

更多信息

  • 数据库引擎可能是MySQL。
  • 这是一家初创公司,所以我们正在尝试商业模式。我们不清楚我们会有多少客户--在一段时间内将为零。现在,我们正在寻找一些客户端的部署和扩展能力(假设最多可达10)。
  • 这个应用程序是针对小企业的,数据量不应该在数百万的记录中。最大的表应该每年有大约10.000条记录(每个客户)。这个价值是基于我们做原型的公司(这是一家中等规模的公司,用于x区的业务)。
EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-09-07 08:55:19

这是一个老的“如何处理多租户”的问题,没有一个正确的答案。你已经很好地选择了关键点。除了“视情况而定”之外,我无法给出一个答案,但这里还有几点需要您考虑:

  • mixing data of different clients ... if there is a bug, its easier for someone to end up accessing some else's dataCome up with a scheme associating each installation [correct] database --如果不同的数据库处于同一台主机上,或者可以被同一台主机访问,那么这里的风险非常相似,特别是从防范蓄意攻击的角度来看,因此决定的一部分取决于您认为可以最有效地设计的潜在安全问题集合。如果您感到缺乏SQL技能,这可能会将您推向多个数据库方向,因为您对大数据大小的关注会随着客户端的增长而变得效率低下。
  • For each installation, buy a DB from the hosting company对于SaaS解决方案,如果您正在支付每个数据库或类似的费用,则您有一个不适当的托管安排。听起来,传统的共享web主机应该是专用机器(虚拟的或物理的)或基于PaaS的平台。
  • 仔细考虑一下您打算如何扩展应用程序。随着需求的增长,多数据库选项使您可以在数据库服务器之间拆分客户端,但如果您的设计是合适的,那么在PaaS环境中,单一数据库选项更容易管理,这让平台提供商担心在您支付更多资源时扩展的物理现实。
  • 同样在可伸缩性问题上,请确保考虑到您的管理职责:如果发生错误/事故,您将如何备份数据、恢复数据的部分,或者在发生应用程序/平台范围的灾难时恢复所有数据,以及在此类事件中您希望/需要对哪些时间尺度工作?

有关更多信息,请参见https://msdn.microsoft.com/en-us/library/aa479086.aspxhttps://en.wikipedia.org/wiki/Multitenancy和搜索类似的术语以进行进一步讨论。(第一个链接来自MS,但涉及的是一般的设计角度,而不是专门针对matters的问题,它也已经有一段时间了,但是相关的问题并没有像你想象的那样在过去的十年中发生很大的变化)

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/114330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档