打破集中式数据库最具成本效益的方法是什么?

继这个问题……

  • 当你真的搞砸了分布式系统的设计时该怎么办?

…客户不情愿地要求我引用选项3(价格昂贵的选项),因此他们可以比较印度公司的价格。

所以,他们要我引用(嗯)。 为了让我尽可能准确,我需要决定我是如何做到的。 这是3个场景……

方案

拆分数据库

我最初的想法(也许是最棘手的)将在网站和桌面应用程序上产生最佳速度。 但是,它可能需要在两个数据库之间进行一些同步,因为两个“系统”如此紧密相连。 如果做得不好而且没有经过彻底的测试,我就知道同步可能是地狱般的地狱。

在最小的系统上实现缓存

为了支持同步选项(我不喜欢),我认为将整个中央数据库和Web服务移动到他们的办公室(即内部)可能会更高效(也更便宜),并且网站(仍然在托管服务器上)从中央办公室下载数据并将其存储在一个小型数据库中(充当缓存)……

  1. 在客户办公室(内部)设置新服务器。
  2. 将中央数据库和Web服务移动到新的内部服务器。
  3. 将网站保留在托管服务器上,但更改Web服务URL以使其指向办公室服务器。
  4. 为图像和最常访问的数据(例如产品信息)实现简单的缓存系统。

……不足之处在于,当办公室中的最终用户更新某些内容时,他们的客户将有效地从60KB / s的上传连接下载数据(尽管一次,因为它将被缓存)。

此外,并非所有数据都可以缓存,例如,当客户更新其订单时。 此外,连接冗余成为一个重要因素; 如果办公室连接离线怎么办? 没什么可做的,只是向客户显示错误信息,这是令人讨厌的,但是必要的邪恶。

神秘选项3号

建议欢迎!

SQL复制

我曾考虑过MSSQL复制。 但我没有经验,所以我担心如何处理冲突等等。这是一个选择吗? 考虑到涉及物理文件,等等。 另外,我认为我们需要从SQL Express升级到SQL非免费,并购买两个许可证。

技术

组件

  • ASP.Net网站
  • ASP.net网络服务
  • .Net桌面应用程序
  • MSSQL 2008表达数据库

连接

  • 办公室连接 :8 mbit 向下和1 mbit 向上扩展线(50:1)
  • 托管虚拟服务器:具有10兆位线路的Windows 2008

刚刚阅读了与此相关的原始问题,我会说您可能只是因为您通过Web服务与数据库进行通信而为解决问题奠定了基础。

此Web服务可能是保存优雅,因为它允许您在不影响客户端的情况下拆分通信。

很久以前我参与了这样一个系统的设计。

我们发现的第一件事就是数据很少发生变化 – 并立即将所有这些都排除在考虑之外。 使用Web服务器进行管理的手动过程是更改此数据的唯一方法。

我们确定的第二件事是应该在本地拥有的数据。 我的意思是指一次只有一个人或某个地点需要更新的数据; 但可能需要在其他地方查看。 我们修复了相关表上的所有键,以确保永远不会发生重复,并且不使用自动递增字段。

第三个项目是真正共享的表格 – 尽管我们在第1阶段和第2阶段对这些表格感到担忧 – 在我们的案例中,这部分是直截了当的。

当我在这里讨论服务器时,我指的是一个带有一组Web服务的数据库服务器,它们之间进行通信。

按照设计,我们的架构有1个指定的“主”服务器。 这是解决冲突的决定性因素。

其余的服务器在第一个实例中是item1覆盖的任何内容的大缓存。 事实上,它不是一个大缓存,而是数据库重复,但你明白了。

每个非主服务器的第二个function是协调与主服务器的更改。 这涉及到一个非常简单的过程,即将大部分工作透明地传递给主服务器。

我们花了很多时间设计和优化上述所有内容 – 最终发现单个最佳性能改进来自于简单地压缩Web服务请求以减少带宽(但它是通过单通道ISDN,这可能是最大的差异)。

事实是,如果你有一个Web服务,那么这将为你提供更大的灵活性来实现它。

我可能首先要研究实现其中一种SQL服务器复制方法的可行性

通常的免责声明适用于:

拆分数据库不会有太大帮助,但它会增加很多噩梦。 IMO,你应该首先尝试优化数据库,更新一些索引,或者可以添加更多,优化一些查询等等。 对于数据库性能调优,我建议您阅读simple-talk.com上的一些文章。
另外,为了节省带宽,您可以向Windows客户端添加批量处理,还可以向Web服务添加压缩(存档)。
也许你应该升级到MS SQL 2008 Express,它也是免费的。

使用我的信息很难为您的问题推荐一个好的解决方案。 目前尚不清楚瓶颈在哪里。 我强烈建议您分析您的应用程序以找到瓶颈的确切位置(例如,它是在数据库中还是在完全用完的通道中等等)并在问题中添加对它的描述。

编辑01/03:
当瓶颈是向上连接时,您只能执行以下操作:
1.向服务和客户端添加消息存档
2.实施批量操作并使用它们
3.尽量减少最常见情况下每个用户案例的操作次数
4.为Windows客户端添加本地数据库并使用它执行所有操作,并在某个计时器上同步本地数据库和主数据库。

在这种情况下,sql复制对你没什么帮助。 最快和最便宜的解决方案是增加连接,因为所有其他方式(第一个除外)将花费大量时间。
如果您选择重写服务以支持膨胀,我建议您查看Agatha项目

实际上听到他们在这一个连接上有多少可能是时候提高办公室的带宽(而不是我的正常响应)如果你把CRM系统分解出来还有什么其他的带宽最高用户? 也许他们已经达到了需要更多带宽周期的程度。

但我仍然很想知道你传递的信息有多少被使用。 确保你正在传递任何机会,你可以添加一些简单快速的措施来查看人们在查看数据时实际消耗了多少。