一个客户的一个数据库或一个客户的数据库

时间:2015-07-17 11:35:40

标签: sql .net sql-server database architecture

在我们的项目中,我们有大约100个客户,到目前为止,我们每个客户都有一个数据库。 我们正面临一些关于软件更新和调试的问题,而且您可以想象更新非常耗时。

我的一位同事告诉我,为整个客户设置一个集群数据库会更容易。

你们怎么看?

我们如何使用该架构让一个客户进行beta测试并进行一些架构修改?

我们认为我们可以进行某种数据库复制,但是如何在不丢失数据的情况下与不同的模式进行合并?

编辑:

假设我有一个数据库服务器(SQL-01),我在该数据库上有100个客户。 如何在一些架构更改后将一个客户带到SQL-02,经过一段时间的beta测试后,我希望每个人都能在SQL-01上使用新架构和我的beta-test客户进行更新。 SQL-01直到下一次beta测试。

3 个答案:

答案 0 :(得分:2)

虽然升级可能会更加痛苦,但在将所有客户放入一个较大的数据库之前,需要考虑许多要求:

安全性:虽然您在单个数据库中拥有数据,但您对数据没有隔离保护,例如它位于同一地点。您可能会冒险将一个客户端的数据暴露给另一个客户端,并且代码中的任何一个错误都非常微不足道。使用多个数据库,您可以获得更多的隔离保护。

升级:如果所有客户端都访问同一个数据库,那么升级将是一种全有或全无的方法 - 您将无法轻松地将某些用户迁移到新版本,而将其他用户保持原样。这意味着您无法根据单个客户的时区安排停机时间,它们都会立即停止运行。

备份:您可以将每个数据库当前单独备份,如果它位于一个较大的数据库中,则每个客户端的备份混合在一起。如果单个客户端要求回滚到给定日期,则必须事先仔细计划如何执行该操作而不影响系统的其他用户。

Beta测试:正如您已经指出的那样,如果您希望升级单个客户端以测试新版本,则必须使用不同的数据库,或确保所做的每个更改都是向后兼容的,这样其他任何人都不会注意。在某些时候会有一个突破性的变化,然后你就会遇到问题。

扩展:最终,有足够的客户端和足够的数据,如果您有多个数据库而不是一个数据库,那么扩展的空间就会缩小,扩展会更便宜,也更容易。

根据Alex K评论中的链接,我希望使用自动化来管理开销并最大限度地减少拥有大量数据库的问题。

答案 1 :(得分:1)

从我的角度来看,最好的方法是为所有客户使用一个架构和一个数据库=>如果您有大量数据,请创建一个DatawareHouse,尤其是Star模式......

例如:您可以首先创建一个包含ID customer,name,region,city的表。就像这样:

An example

如果您想拥有100个数据库,可以使用" ALTER SCHEMA" (带循环):

$("#submit").on("click",function()
    {

          $("#set_setting").submit(function(){            

            data = $(this).serialize()
            $.ajax({
              type: "POST",
              dataType: "html",
              url: "submit_setting.php", //Relative or absolute path to response.php file
              data: data,
              success: function(data) {
              //hide the form
              $("#set_setting").slideUp("slow");
              //show the result
              for (i = 0; i < data.length; i++) {
                  console.log(data);//outputs array
                  $(".the-return").html(data);
              }


              }

            });
            return false;

          });

        });

答案 2 :(得分:0)

您几乎总是会为所有客户提供一个数据库。 SQL数据库专为大量数据而设计。实际上,与较小数量相比,它们在大量数据上的效率更高(因为数量较少,页面往往会被部分填充)。

分离不同客户的唯一原因是项目需要时:

  • 由于某些不可理喻的原因,该要求可能是显式的
  • 该要求可能表明来自两个客户的数据不能位于同一个数据库中。
  • 可能需要为特定客户定制应用程序。

但是,一般而言,对于性能,可维护性,支持和安全性,您只需要一个数据库。每个表都应有适当的客户ID。