如何为读写操作实现单独的数据库?

时间:2010-05-26 16:00:53

标签: sql database database-design architecture normalization

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

1。如何找到更多关于这种架构的资源呢?
2。它只是在两个相同的模式之间进行复制的问题,或者您的模式会根据操作而有所不同,标准化也会有所不同吗?
3。您如何确保写入一个数据库的数据可以立即从第二个数据库中读取?


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

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

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

我发现这种高度可变性article提供了非常丰富的信息

3 个答案:

答案 0 :(得分:17)

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

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

如何了解有关此架构的更多信息?

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

  

这只是一个在两个相同模式之间复制的问题,或者你的模式会根据操作而有所不同,标准化也会有所不同吗?

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

  

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

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

答案 1 :(得分:3)

您可能会查找数据仓库。 它们用作“报告规范化”类型数据库,同时可以为数据维护保留规范化的OLTP样式实例。

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

答案 2 :(得分:1)

关于问题2:

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

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

问题3: 我们在这里谈得多快?不到一秒钟? 10秒?分钟?