2011-12-11 91 views
0

我插入了一个高容量的OLTP数据库,我可以随意改进,尽可能多地找到合理的可能。改进已经非常有帮助,但我想把它提升到一个新的水平。我发现的数据访问模式使得它成为IMO在其他服务器上缓存数据的良好备选方案,我很乐意听到任何人使用此类设置的经验或建议。用于SQL Server OLTP Env的Web缓存服务器。建议

我们有一个数据库,每天可以获取约3GB的数据添加到表中,并且报告过去非常缓慢。数据一旦放入,数据就不会改变,并且没有插入超过一周的数据。在过去3天内输入的行倾向于在数千万行之间看到数千个插入。

我在考虑将2周以上的数据推送到MongoDB。然后,我可以将2周内没有推送到Mongo的滑动窗口数据缓存到某种缓存软件中,以便查询和显示这些数据,而不是从数据库中一直读出数据。我这样想,我们仍然可以通过让数据库引擎验证所有数据,具有高读取性能,因为它不会触及数据库,因此我们仍然可以获得完整的A.C.I.D合规性,那么当Mongo不再是“交易”时,Mongo可以采用它。

任何人有任何推荐的解决方案?我在看MemCached,但不太确定这是否是一个好的或者甚至是合理的解决方案。谢谢!

+0

没有人有任何缓存SQL Server数据的经验吗? :/ –

回答

0

我没有使用SQL Server的特定经验,但是您所描述的看起来好像是MongoDB的有效用例。

请注意,尽管MongoDB无法直接处理事务,但它能够以原子方式处理某些操作(例如,请参阅findAndModify)。另外,启用日志功能后,您不应该有任何理由担心持久性。 MongoDB是一个可靠的数据存储,不会丢失或损坏您的数据。

如果您运行禁用日记功能的第二个部署,则MongoDB本身也可以充当高性能缓存。在这种情况下,写操作将在内存中进行,并且只能每60秒持久保存到磁盘(除非另行配置)。这将提供与仅在内存中的memcache相当的性能,同时允许您使堆栈更简单一些。

希望这会有所帮助!

2

您可以考虑的另一件事是在SQL Server 2014中使用新的内存中OLTP功能。该功能可提高OLTP工作负载的效率和扩展性。您将有可能从现有服务器中获得更多,而无需考虑特定的缓存机制。

+0

谢谢乔斯!当我们说话时,我已经在我的实验室里得到了它;)好的建议。在内存中,OLTP解决了很多问题,代价是将其转换为脏读,幸运的是,对于我目前的需求,我很好。 –

+0

@Ali在内存OLTP中不会出现脏读。它使用一个锁定和闩锁免费版本的MVCC,因此快照是最小的隔离级别。 –

+0

@MartinSmith对,很好的电话。我记得听说Kalen Delaney或Kim Tripp提到'内存表基本上会关闭锁定/阻塞引擎',但根据技术白皮书,它使用MVCC。很高兴知道,谢谢! –