我们的应用程序的运行网络,主要是调查工具,做了一些交易。我们主Oracle数据库。该应用程序一直有一个不同的实例Oracle为每个客户。一个 客户 是一个公司支付我们提供我们的服务公司的雇员,通常为10,000至25,000名员工每位客户。我们打算为有几百个客户。我们做的一个主要释放每隔几年,和迁移到新版本是具有挑战性:我们可能会有一队在客户几个星期,说明新的功能和设立的驱动数据以满足客户。

我们正在考虑将多客户,把我们所有的客户到一个单一的共用Oracle11g实例在大honkin'Windows服务器2008年的服务器--以便降低成本。我想知道如果这是可取的。

有一些优势,具有独立的情况下为每个客户。 告诉我,如果这些都是虚假的,请。我粗略估计大约减少的重要性:

  • 我们的客户MyCorp和YourCo可以单独迁移时断变化的架构。(与多客户,我们会被迁移300多个客户过夜!?!)

  • MyCorp的数据可以很容易备份和(!!!) 恢复,而不影响其他客户。

  • MyCorp的数据被安全地分离开他们的竞争对手YourCo的数据,而不取决于开发人员得到代码和/或数据库管理员获得了配置的权利。

  • 多个实例是较低的风险,因为一场灾难的一个客户(有人不小心加倍每个人的工资和错误被发现之后支付日)不影响其他客户。一场灾难,影响到所有我们的客户(哎呀,新DBA,突然每个参与者具有同样的社会安全号码!?!) 可能把我们的公司。

  • 具有的一个实例,上一个服务器提供一个单一故障点,与我们的整个客户基础出的业务如果飓风敲门的建设。多个实例,在多个服务器许可证的地理分散:没有的灾难会影响过大比例的客户和服务器不受影响在其他区域可以采取负载上的失败的服务器。

  • 性能更好,因为该数据库是较小(10,000vs2,000,000的行在-50表)。

  • 如果MyCorp的办事处(主要)在只有一个地区,然后MyCorp的实例可以在地理上共有,因此,网络的滞后不会受到伤害的性能。我们可以提供更好的服务向全球客户,用于同样的原因。

  • 在MyCorp希望把他们的数据库,然后我们可以很容易地出口他们的实例,以获得MyCorp他们的数据。

  • 负载平衡更加容易,因为实例可以放置在不同的服务器(这是一个网络场).

  • 当一个开发或QA实例是需要的,很容易复制的实例和匿名的数据,因为没有多少数据。

  • 因为他们足够小,开发商可以拥有自己的实例在本地运行,所以他们可以在码在机场等待时和同时在飞行中,没有战斗VPN麻烦。

问题1:什么是其他的优点的独立的实例?

我们正在考虑改变该数据库模式,并融合所有的客户到一个Oracle的实例,上运行的一个沉重的服务器。

这里有优势的多客户实例的方法,最重要的第一(我的摇). 请鹬如果这些都是假的:

  • 下工作的数据库,因为它们只需要保持一个实例,而不是数以百计。小DBA工作转化为更便宜,我们的主要动机对这一变化。

  • 只是一个实例,该数据库可以做的更好的优化业绩。他们会有时间添加适当的索引和审查我们的SQL。

  • 它会更容易用于开发人员调试和增强的应用程序,因为只有一个模式和一个应用程序(可能还有几十个架构的版本,如果有数以百计的情况下,一个不同版本的程序,为每个版本的模式)。这降低了成本。该替代方法是具有启动每一个调试届会议(1)什么样的版本是这样的客户运行和(2)让的斗争,以重新创造相应的发展环境、代码和数据库。(我们需要一个虚拟机,其中包括代码和数据库的实例,为各个补丁和释放!)

  • 许可Oracle是便宜,因为它的售价为每台服务器,不论的份量(或东西-我不知道任何有关的主题).

  • 该数据库将成为一个可行的持久储存于网届会议数据,因为只有一个实例。

  • 一些数据库操作容易的一个多客户实例中,如寻找一个参与者,当他们的朦胧的有关其客户他们(或者其配偶,也许)工作:所有的名字都在同一个表中。报告客户是直接的。

问题2:什么是其他的优点是具有多个客户在一个实例?

问题3:这种方法做你认为是更好(什么)?实每个客户或所有客户在一个实例?

我关心的是,有一个多客户实例,使得迁移近-不可能的,这是一个处理凶手...

...除非有一种妥协的解决办法像有 两个 多客户情况中,旧的和新的。在这种情况下的情况下,我们将设计跨实例的解决方案找到参加者、报告,等等。所以,客户可以从一个多客户实例到下一个没有任何突破。

有帮助吗?

解决方案

除非你使用Oracle XE(有限的免费版)具有一个数据库,每台服务器将会变得非常昂贵的非常迅速,甚至如果你买单的核心,单一的CPU箱。有几个数据库每个服务器是低效率的,因为每个数据库需支付的开销,CPU和RAM的使用情况。调整是比较困难的,因为竞争是很难诊断。

因此,以及为更容易管理,一个大的服务器应该作出比较便宜很多离散的小服务器(没有保证,没有钱回来!).确保你买最大、速度最快的筹码可以和多RAM你有免费插槽。这些东西给你更好的业绩,而不会影响你的许可费用。

考虑该分区的选择,如果你可以负担它。这将解决您的问题有关的备份和恢复,因为每个分区都可以有其自己的空间.所以,(鉴于分区client_id)成为可能的备份,或者恢复个体客户的数据,而不影响其他客户。我们甚至可以出口和进口个别的分区。我很惊讶,由大卫的观点,即分区修剪没有工作与温哥华警察局.但我还没有尝试过这种组合,所以我会把他的话。

一件事你可能会失去整合的能力来支持不同客户的不同版本的应用程序。然而,这未必是坏事。因为你观察,在维持数百个客户将是一个容易多了如果你放弃的个性化版本的应用程序。如果你这样做需要提供一些定制的特征-即使你只是想试验一些功能与单个客户然后看看 版的基于重新定义在11gR2:这是一个非常漂亮的功能。也就是适用于所有的Oracle许可证,不仅仅是企业。

其他提示

当你说'独立的情况下',你在谈论一个实例,与多个架构?或者你真的意味着多个实例,上运行一个单一的机?没有理由运行多个实例,在一个单一的机,而不是运行多个架构的一个实例-每个架构仍将有自己的一套表格、索引等。

不管怎么说,我没有全部答案,但有一点要记住的许可证费用Oracle,以及如何可以影响有什么最佳的解决方案。

根据Oracle商店,

  • Oracle标准的版本一是5,800美元。00/处理器(其中x86,一个处理器是一个插座,你可以去2sockets)
  • Oracle标准版17 500美元.00/处理器(其中x86,一个处理器是一个插座,你可以去了4卯)
  • Oracle企业版$47 500人.00/处理器(其中x86,一个处理器是2个核心-所以你必须以有效一倍的价格为四核Cpu)

因此,例如,如果你需要8四核Cpu处理100个客户许可证,在单一数据库更为昂贵的比有4个单独的数据库,各有2四核Cpu,每个运行25客户。

8四核Cpu要求企业版,并有一个列表中的价格的16x$47 500人=$760,000.4机,每一个运行标准的版本一,各有2四核处理器,将有一个列表中的价格的8×5,800美元。00=$46,400-16倍的差异。现在,记住,没有一个人支付价企业的版本,但是仍然有巨大的差异,以考虑。

如果你没有一个巨大的需要的数据库业务的客户,和你不需要企业版的功能,你需要这个水平的CPU动力(或者预期增长的需要这一水平的CPU能力),许可证的费用将是一个巨大的缺点的一个实例的方法。

它可能值得研究salesforce,这个时髦的词你要找的是"多租户建筑"

这使得一个很好的阅读:

http://blog.dayspring-tech.com/2009/02/forcecom-multitenant-architecture-under-the-covers/

这是一个很好的例子,因为Salesforce使用Oracle数据库。

问得好,很高兴看到你正在考虑所有的替代品。许多好点但我会坚持只解决一个。

我是DBA为托管的应用程序和开发商决定使用Oracle虚拟私人数据库功能,这一点。

该应用程序是构建有意向客户共享一个游泳池的应用程序服务器的负载平衡和一个单一的数据库模式上的后端。

温哥华警察局之前我们有一个Java类上涨"里customer_id=?"或"和customer_id=?"在每次查询之前去的数据库,以便客户只会看到自己的数据。实行这种在温哥华警察局登录后ot数据库,我们将有应用程序设置的一个变量在应用程序的情况下,将用于通过温哥华警察局的政策,以使本届会议只能看到自己的记录。所以,是的,你必须码它的权利和分配温哥华警察局的政策表,并且也相信,Oracle拥有了他们结束讨价还价。

所以这对我们有好处吗?在理论上,这是很好的卸载SQL谓处理的东西超出我们的应用程序,但在实践中的优势不会大于它带来的缺点。

  • 当我们有几十个客户在一个数据库,并且当我们升级,他们都必须得到升级在相同的时间。我们有很多的拖船的战争与客户,不要升级为任何原因或者想要做自己的QA在新的版本。

  • 我们的娱乐老实例/个新实例的事情升级而迁移的数据是有风险和有关的停机时间没有使客户满意。我们没有滚我们自己的程序步骤的通过表格和出口数据的...但肯定不容易,因为一个匆匆出口或数据泵的工作。

  • 我们也有问题的温哥华警察局谓的分析,当它来划分。因为有很多Oracle的特点,他们可以工作上的确定他们自己的但是你一旦结合其他特点事情变得不可预测。对我们分区的不相关的当前customer_id没有得到消除,因为所谓的分析来了太晚了在处理SQL发言。我们的工作围绕它通过改变从静态变为动态温哥华警察局的政策,但是我们花费的时间分析枪杀。

因此,毕竟什么是我走呢?我会花时间确定我们的程序取得了良好的使用结合变量,并继续与旧的机制,加customer_id SQL发言。

Oracle是为了处理这种负荷。

我的问题- 你是做什么的时候你已经万客户,并说十万?
你仍然保持独立的实例/架构?

我怀疑任何人都会这样做。我们的工作早在一个地方,每一个客户有独立的数据库以及一份在中心位置。
变更管理变成一个头疼的问题,你必须保持非常良好的信息有关其客户/公司在其数据库中的修订版本、模式、程序版本,所有这些事情。这会成为一个软件在本身。
我建议创建软件的设计围绕萨斯的模式,这只能让你容易维护并且同样的数据库/架构,为所有用户。

对可靠性仍然可以使用聚类 Oracle RAC.

我已经考虑到的相同的决定的几倍。在我们的情况下,我们使用MySQL,因此没有相关的成本与运行的所有客户在一个单独的数据库。

的好处,以运行所有客户在一个单独的数据库已经很大。我们有一个脚本,让我们移动客户的整个实例的任何服务器平衡的负荷。脚本仅仅是复制的数据库副本的任何定义的文件,旋转起来的应用程序,并建立了我们的路系统向用户发送到新实例。整个过程需要几分钟。

数据库中的变化可能需要很长的时间大mysql数据库。由于我们所有的客户都有自己的数据库,我们能够保持我们所有的数据集很小。备份,也非常快。

我们的发展实例中的行为方式相同,因此这种方法允许我们运行的各种数据库模式的同时,作为我们开发和测试新的功能。我们经常与客户合作,让他们尝试了一个新的特征之前,我们将它部署到其余的我们的实例。的一条规则,我们坚持(以便避免一些缺点你提到),这是所有客户必须在一个版本。维持超过几个版本跨客户会有一个巨大开销。

Facebook采取了同样的做法,当他们开始他们的公司。每个学校,他们启动了一个单独的数据库和他们能够设立新的实例非常迅速。主要原因,他们最后的综合数据库是他们想要使用户能够沟通之间的学校。

如果不是因为潜在成本问题我肯定会鼓励你坚持的单独的数据库的方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top