2009-02-26 111 views
0

我已经阅读了很多有关ReadOnly数据库的内容。只读数据库查询?

因此,我想知道是否在读取和查询数据时使用只读数据库以及用于写入数据库不使用锁定时的所有CRUD工作的单独写入数据库会有任何好处。

+0

你能澄清一下你的问题吗?这些数据库是否具有相同的数据,在某些时候是同步的,它们之间的关系是什么? – 2009-02-26 16:40:35

回答

3

这可能会带来一些好处,特别是如果它从R/W数据库卸载特别查询和报告需求。最大的挑战是让它们保持同步,但如果隔夜过程足够好(即日间更改不需要包含在只读数据库中),那么通常有两个数据库工作得很好,特别是如果数据库位于单独的物理机器上。

编辑:作为一个现实世界的例子,几年前在我的客户他们有一个很难得到可用的即席报告了他们的生产数据库(SQL Server)的,运行在非常强大的机器,成本向上的5万美元仅用于硬件。

我说他们建立一个只读数据库,使用非标准化的r/o数据,并在台式机上安装SQL服务器(硬件成本大约2500美元),2500美元的现成桌上型PC以大约10倍的性能损失了大量的Compaq四核处理服务器的性能,这些服务器采用ram和gobs磁盘gobs试图服务于OLTP,批处理和报告需求。不用说,用户非常高兴,尽管IT人员最初有阻力,最终在“生产”机器上释放了有价值的周期,并且模型在其他地方被模拟。

0

只读数据库的好处很明显:没有表锁定,在您尝试读取数据时,没有人正在更改数据。

但是,您确实存在同步问题,您需要使用更改更新只读数据库,例如在一夜之间进行更新。

您还可以将两个数据库放在不同的服务器上,以进一步提高性能。

0

我不认为只读关系数据库有很多好处。

也许你在想的是一个OLAP,在这个OLAP中,数据被严重地异化为多维矩阵。看看SQL服务器分析服务。

0

如果您的应用程序通过已知存储过程,报告等限制正在针对数据库执行的SQL语句,请不要担心只读副本。毕竟,数据库旨在同步读取,写入和更新。毕竟,你会测试你的系统,并确保你的SELECT查询不锁表,所以其他用户不能INSERT/UPDATE/DELETE。但是,如果您提供了一种访问数据的特殊方法(即带有链接表的MS Access),那么您肯定希望拥有一个只读数据库。否则,用户可能会编写即席查询,例如SELECT * FROM TheBiggestTableEveryoneUses,可能会与试图在该表中插入/更新/删除记录的其他用户创建死锁。

0

这是一个架构问题,属于资源规划。

  • ,应该先规划负载HTTP/SQL呼叫/交易
  • 定义你多少命中需要谁是你的观众
  • 并行SQL数据库多少命中
  • 缓存
  • SQL并发模式
  • 什么是压力水平

S ○建筑要定义被称为 事务数据库和报表数据库 When to build a separate reporting database?

所以我曾在教育部门,我们有5名十亿学生在教师家长的100TB数据等 所以我们做了SQL集群和复制。 因此,我们的数据每5分钟复制一次,并从复制数据库中运行我们的每周每月和吨报告,而不会影响我们的事务数据库。 再次如果您的公司无法负担多个数据库,你可以在同一个数据库中做它像创业公司做的。或者如果观众不是关键只是节省$$ LOL 这是问题的$$$你必须建立你的基础设施 作为已经有人提到为什么需要它 1.当事务性能很关键时。 2.当在交易应用上很难获得维护窗口时。 3.如果报告不仅需要关联此应用的结果,还需要关联其他应用孤岛的结果。 4.如果报告需要支持最适合星型模式/商业智能环境的趋势或其他类型的报告。 5.如果报告长时间运行。 6.如果事务性应用程序位于昂贵的硬件资源(群集,大型机等)上 7.如果您需要对事务性数据执行数据清理/提取 - 转换 - 加载操作(例如,状态名称为规范状态的缩写)。