【问题标题】:How would I implement separate databases for reading and writing operations?我将如何为读写操作实现单独的数据库?
【发布时间】:2011-02-24 06:33:14
【问题描述】:

我有兴趣实现一种架构,该架构具有两个数据库,一个用于读取操作,另一个用于写入。我从来没有实现过这样的东西,并且总是构建单一数据库、高度规范化的系统,所以我不太确定从哪里开始。我对这个问题有几个部分。

1.什么是了解有关此架构的更多信息的好资源?
2.这只是在两个相同架构之间复制的问题,还是您的架构会因操作而异,规范化也会有所不同?
3.如何确保写入一个数据库的数据可以立即从第二个数据库读取?


任何进一步的帮助、提示、资源将不胜感激。谢谢。

编辑
经过一番研究,我发现这篇文章对那些感兴趣的人来说非常有用。

http://www.codefutures.com/database-sharding/

我发现这种高可扩展性 article 非常有用

【问题讨论】:

  • 我很好奇为什么。不要误会我的意思,我并不是说这是一个坏主意,但我从未听说过这样的设计模式,而且我很好奇为什么这是一个很好的实现模式。 (当然,我意识到这可能是我以前从未遇到过的常见设计模式。)
  • 您是否认为它更像是一个用于正常使用的数据库,以及一个用于报告目的的只读数据库?因为这是一个更常见的场景。拥有只写访问的数据库几乎没有可行的用例。
  • 如果数据库是同步的,我不确定它们是如何独立的数据库。您可能想了解文件系统日志之类的内容。
  • @David @Agent @WhirlWind 我认为读/写主数据库和只读从数据库模式比你想象的更常见。
  • @David Stratton @Agent_9191 @WhirlWind @Pascal Thivent 〜我认为他打算做类似命令查询分离的事情〜这是正确的@Matt 吗? en.wikipedia.org/wiki/Command-query_separation

标签: sql database database-design architecture normalization


【解决方案1】:

我不是专家,但读/写主数据库和只读从属模式是一种“常见”模式,尤其是对于主要执行读取访问或数据仓库的大型应用程序: p>

  • 它允许扩展(如果需要,您可以添加更多只读从站)
  • 它允许以不同方式调整数据库(高效读取或高效写入)

什么是了解有关此架构的更多信息的好资源?

互联网上有很多很好的资源。例如:

这只是两个相同架构之间复制的问题,还是您的架构会因操作而异,规范化也会有所不同?

我不确定 - 我渴望阅读专家的答案 - 但我认为这些模式在传统复制方案中是相同的(但调整可能会有所不同)。也许人们正在做更多奇特的事情,但我想知道在这种情况下他们是否依赖数据库复制,这听起来更像是“实时 ETL”。

您如何确保写入一个数据库的数据可以立即从第二个数据库读取?

我猜你需要 同步复制 (这当然比异步慢)。虽然有些数据库确实支持这种模式,但并非所有数据库都支持 AFAIK。但是请查看this answerthis one 的 SQL Server。

【讨论】:

  • @drachenstern:我不确定 CQS 是否暗示了您存储数据的方式。不过谢谢,这是一个非常有趣的链接。
  • @Pascal Thivent ~ 我更多地考虑在两者之间建立一个 pub/sub 同步架构的参考。当我盲链接时,我还认为该文章有图像:udidahan.com/2008/08/11/command-query-separation-and-soa
  • @drachenstern:啊,是的,没有检查该链接,我将阅读该链接。再次感谢。
  • @drachenstern:我浏览了第二个链接,我看到了“关系”,但认为没有等价性(你可以用单个数据库做 CQS,恕我直言,CQS 更像是一个纯粹的 OOP 原则) .不过读起来很有趣。
【解决方案2】:

您可能会查找数据仓库。 这些用作“规范化报告”类型的数据库,而您可以保留规范化的 OLTP 样式实例以进行数据维护。

我认为“立即”等效的想法不会成为现实。将新数据和更改迁移到另一个系统时会有一些延迟。时间表和范围将是您在这里做出的重大决定。

【讨论】:

  • +1。 Matt - 查找 OLTP 和 OLAP。使用一个数据库来支持快速事务性工作(例如支持应用程序),并根据需要将 ETL 数据传输到另一个构建为报告的数据库。由于它们是分开的,因此您不会对一个影响另一个的性能造成影响。在数据库之间移动数据本身就是一个复杂的问题 - 取决于要移动的数据量和频率;当人们说他们想要在来源之间进行“实时”复制时,他们的实际意思是什么(您需要验证),因为计算机的实时比人类的“实时”要快得多。
【解决方案3】:

关于问题 2:

这实际上取决于您通过拥有两个数据库来实现的目标。如果是出于性能原因(我怀疑可能是这样),我建议您根据性能需要考虑对只读数据库进行非规范化。如果性能不是问题,那么我不会弄乱只读模式。

我曾在类似的系统上工作过,其中会有一个读/写数据库,仅由管理用户少量使用。然后,该数据库将在夜间过程中复制到只读数据库。

问题 3: 我们在这里谈论的有多直接?不到一秒? 10秒?分钟?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 2013-12-22
    • 2018-09-04
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    相关资源
    最近更新 更多