分解集中式数据库最经济有效的方法是什么?

2024-03-22

继这个问题之后...

  • 当你真的搞砸了分布式系统的设计时该怎么办? https://stackoverflow.com/questions/2355910/what-to-do-when-youve-really-screwed-up-the-design-of-a-distributed-system/2356514#2356514

...客户不情愿地要求我对选项 3(昂贵的选项)进行报价,以便他们可以与印度的一家公司进行价格比较。

所以,他们想让我引用(嗯)。为了让我尽可能准确,我需要决定我实际上将如何去做。这里有 3 个场景...

应用场景

拆分数据库

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

在最小的系统上实现缓存

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

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

...缺点是,当办公室的最终用户更新某些内容时,他们的客户将有效地从 60KB/s 的上传连接下载数据(尽管只有一次,因为它将被缓存)。

此外,并非所有数据都可以缓存,例如当客户更新订单时。此外,连接冗余在这里成为一个重要因素;如果办公室连接离线怎么办?除了向客户显示错误消息之外别无选择,这虽然令人讨厌,但却是必要的罪恶。

神秘选项3

欢迎提出建议!

SQL复制

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

技术的

成分

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

连接

  • 办公室连接:8兆比特down和 1 兆比特up竞争线 (50:1)
  • 托管虚拟服务器:Windows 2008,带 10 兆线路

刚刚第一次阅读与此相关的原始问题,我想说您可能已经为解决问题奠定了基础,因为您正在通过 Web 服务与数据库进行通信。

此 Web 服务很可能是可取之处,因为它允许您在不影响客户端的情况下拆分通信。

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

我们首先发现的是那些很少发生变化的数据,并出于分发考虑立即锁定了所有这些数据。使用网络服务器进行手动管理过程是更改此数据的唯一方法。

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

第三个项目是真正共享的表格 - 尽管我们在第一阶段和第二阶段非常担心这些 - 在我们的例子中,这部分是直接的。

当我在这里谈论服务器时,我指的是带有一组相互通信的 Web 服务的数据库服务器。

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

其余服务器首先是 item1 所涵盖的任何内容的大型缓存。事实上,这不是一个大型缓存,而是一个数据库重复,但您明白了。

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

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

事实上,如果您确实有 Web 服务,那么这将为您提供更大的实现方式的灵活性。

我可能会首先调查实施其中一项的可行性SQL Server 复制方法 http://msdn.microsoft.com/en-us/library/ms152531.aspx

通常的免责声明适用:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分解集中式数据库最经济有效的方法是什么? 的相关文章

  • 信号处理程序有单独的堆栈吗?

    信号处理程序是否有单独的堆栈 就像每个线程都有单独的堆栈一样 这是在 Linux C 环境中 来自 Linux 手册页signal 7 http kernel org doc man pages online pages man7 sign
  • ASP.Net Core 内容配置附件/内联

    我正在从 WebAPI 控制器返回一个文件 Content Disposition 标头值自动设置为 附件 例如 处置 附件 文件名 30956 pdf 文件名 UTF 8 30956 pdf 当它设置为附件时 浏览器将要求保存文件而不是打
  • 类似于 .NET Framework 2.0 的 MEF(托管可扩展性框架)

    我在自己的项目中使用了 MEF 并且非常喜欢它 这很容易 在弄清楚我们的awkwardAPI模型 它刚刚工作了 现在我需要 NET Framework 2 0 类似的东西 有没有可以在 NET Framework 2 0 下工作的类似项目
  • SQL Server lat;lng varchar 分割过程用作 Lat 和 Lng 以提高搜索速度

    有人可以帮助我使用存储过程或函数来传递我的存储varchar表中的 lat lng 到各个字段作为浮点数作为 Lat 和 Lng 以在半径搜索中使用 lanlng in Table 33 0000 15 222222 Thanks 你只是想
  • 在 SQL Server 中通过标准差消除异常值

    我试图通过标准差消除 SQL Server 2008 中的异常值 我只想要特定列中包含该列平均值的 1 标准差范围内的值的记录 我怎样才能做到这一点 如果您假设事件呈钟形曲线分布 则只有 68 的值与平均值相差 1 个标准差以内 95 的值
  • 如何获取 QTableView 的标题列表?

    我有一个QTableView我的对话框中的对象 我需要访问该表的水平标题并将它们放入QStringList object 尽管进行了大量搜索 但我在 Qt 文档中找不到如何获取此标头列表 编辑 我发现的最接近的地方是this https w
  • 单例模式和 std::unique_ptr

    std unique ptr唯一地控制它指向的对象 因此不使用引用计数 单例确保利用引用计数只能创建一个对象 那么会std unique ptr与单例执行相同 单例确保只有一个实例属于一种类型 A unique ptr确保只有一个智能指针到
  • 如何在事务中使用链接服务器插入远程表?

    我的链接服务器设置正确 我能够执行以下查询 插入 远程服务器 表 SELECT FROM 本地服务器 表 然而当我做同样的事情时交易内 开始传输 插入 远程服务器 表 SELECT FROM 本地服务器 表 提交交易 我收到类似的错误 用于
  • AES 输出是否小于输入?

    我想加密一个字符串并将其嵌入到 URL 中 因此我想确保加密的输出不大于输入 AES 是可行的方法吗 不可能创建任何始终会创建比输入更小的输出的算法 但可以将任何输出反转回输入 如果您允许 不大于输入 那么基本上您只是在谈论同构算法alwa
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 使用restsharp序列化对象并将其传递给WebApi而不是序列化列表

    我有一个看起来像的视图模型 public class StoreItemViewModel public Guid ItemId get set public List
  • 新任务中使用的依赖注入服务

    我在需要时使用依赖项注入来访问我的服务 但我现在想要创建一个并发任务 但这会由于依赖项注入对象及其生命周期而导致问题 我读过这篇文章 标题 防止多线程 Link http mehdi me ambient dbcontext in ef6
  • 使用taskkill停止Windows服务

    我需要帮助来使用 C 终止 Windows 服务 现在要终止该服务 请使用以下选项 从命令 sc queryex ServiceName 发现后PID服务的 taskkill pid 1234 exemple f 为了便于阅读 但如果您明白
  • 您是否将信息添加到每个 .hpp/.cpp 文件的顶部? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 创建新的 C 头文件 源文件时 您会在顶部添加哪些信息 例如 您是否添加日期 您的姓名 文件描述等 您是否使用结构化格式来存储此信息 e g F
  • SQL Server 中的嵌套事务

    sql server 允许嵌套事务吗 如果是的话那么交易的优先级是什么 来自 SQL Server 上的 MSDN 文档 嵌套交易 http msdn microsoft com en us library ms189336 SQL 90
  • 更改 Windows Phone 系统托盘颜色

    有没有办法将 Windows Phone 上的系统托盘颜色从黑色更改为白色 我的应用程序有白色背景 所以我希望系统托盘也是白色的 您可以在页面 XAML 中执行此操作
  • 在简单注入器中解析具有自定义参数的类

    我正在使用以下命令创建 WPF MVVM 应用程序简易注射器作为 DI 容器 现在 当我尝试从简单注入器解析视图时遇到一些问题 因为我需要在构造时将参数传递到构造函数中 而不是在将视图注册到容器时 因此这不是适用的 简单注入器将值传递到构造
  • 将 char[][] 转换为 char** 会导致段错误吗?

    好吧 我的 C 有点生疏了 但我想我应该用 C 来做我的下一个 小 项目 这样我就可以对其进行抛光 并且我已经有不到 20 行的段错误了 这是我的完整代码 define ROWS 4 define COLS 4 char main map
  • C++0x中disable_if在哪里?

    Boost 两者都有enable if and disable if 但 C 0x 似乎缺少后者 为什么它被排除在外 C 0x 中是否有元编程工具允许我构建disable if按照enable if 哦 我刚刚注意到std enable i
  • 使用 QtWebEngine 将 C++ 对象暴露给 Qt 中的 Javascript

    使用 QtWebkit 可以通过以下方式将 C 对象公开给 JavascriptQWebFrame addToJavaScriptWindowObject如中所述https stackoverflow com a 20685002 5959

随机推荐