只读数据库查询?

时间:2009-02-26 16:37:44

标签: sql-server

我已经阅读了很多关于ReadOnly数据库的内容。

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

5 个答案:

答案 0 :(得分:3)

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

编辑作为一个真实世界的例子,多年前在我的客户端,他们很难从生产数据库(SQL Server)中获取可用的特殊报告,在非常强大的机器上运行仅为硬件花费超过50,000美元。

我谈到他们建立一个只读数据库,使用非规范化的r / o数据,在台式机上运行设置SQL服务器(硬件成本约2500美元)和2500美元的现成桌面个人计算机服务于OLTP,批量处理和报告需求的大量公用计算机四核处理服务器的性能大幅提高了10倍。

毋庸置疑,用户非常高兴,尽管IT人员最初的阻力,最终在“生产”机器上释放了宝贵的周期,模型在其他地方得到了仿效。

答案 1 :(得分:0)

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

但是,您确实遇到了同步问题,您需要使用更改来更新只读数据库,比如隔夜。

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

答案 2 :(得分:0)

我认为从一个只读的关系数据库中获得很多好处。

也许您正在考虑的是OLAP,其中数据被非常规范化为多维矩阵。看看SQL服务器分析服务。

答案 3 :(得分:0)

如果您的应用程序通过已知的存储过程,报告等限制对数据库执行的SQL语句,请不要担心只读副本。毕竟,数据库旨在同时进行读取,写入和更新。毕竟,您将测试您的系统并确保您的SELECT查询不会锁定表,以便其他用户无法INSERT / UPDATE / DELETE。

但是,如果您提供访问数据的特殊方法(即带有链接表的MS Access),那么您肯定希望拥有一个只读数据库。否则,用户可以编写即时查询,例如SELECT * FROM TheBiggestTableEveryoneUses,可能会与尝试INSERT / UPDATE / DELETE该表中的记录的其他用户一起创建死锁。

答案 4 :(得分:0)

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

  • 您应该计划加载http / SQL调用/事务
  • 定义您需要的点击次数
  • 多少并发sql db命中
  • 缓存
  • SQL并发模型
  • 什么是压力水平

因此,您所定义的架构被称为 事务数据库和报告数据库 When to build a separate reporting database?

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