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

时间:2010-03-01 15:23:42

标签: c# .net asp.net sql-server

继续这个问题......

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

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

方案

拆分数据库

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

在最小的系统上实施缓存

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

  1. 在客户办公室(内部)设置新服务器。
  2. 将中央数据库和Web服务移至新的内部服务器。
  3. 将网站保留在托管服务器上,但更改Web服务URL以使其指向办公室服务器。
  4. 为图像和最常访问的数据(例如产品信息)实施简单的缓存系统。
  5. ......不足之处在于,当办公室的最终用户更新某些内容时,他们的客户将有效地从60KB / s的上传连接下载数据(尽管一次,因为它将被缓存)。 / p>

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

    神秘选项3

    建议欢迎!

    SQL复制

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

    技术

    部件

    • ASP.Net网站
    • ASP.net网络服务
    • .Net桌面应用
    • MSSQL 2008 express database

    连接

    • Office连接:8 mbit down 和1 mbit up 竞争行(50:1)
    • 托管虚拟服务器:具有10兆位线路的Windows 2008

3 个答案:

答案 0 :(得分:4)

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

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

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

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

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

第三项是真正共享的表格 - 尽管我们在第1阶段和第1阶段期间对这些表格感到担忧。 2 - 在我们的例子中,这部分是直接的。

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

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

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

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

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

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

我可能首先要研究实施SQL server replication methods

之一的可行性

通常的免责声明适用:

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

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