0

我继承了一个大容量的 OLTP DB,我可以自由支配,尽可能多地改进它。改进已经非常有帮助,但我想把它提升到一个新的水平。我发现的数据访问模式使它成为 IMO 将数据缓存在其他服务器上的一个很好的候选者,我很想听听任何人对这种设置的经验或建议。

我们有一个数据库,每天将大约 3GB 的数据添加到一个表中,并且过去报告它的速度非常慢。数据一旦放入就不会改变,并且不会插入超过一周的数据。在过去 3 天内输入的行往往会在数千万行之间看到数千个插入。

我正在考虑将超过 2 周的数据推送到 MongoDB。然后,我可以让未推送到 Mongo 的 2 周滑动窗口数据被某种缓存软件缓存,以便查询和显示这些数据,而不是一直从数据库中读取数据。我认为通过这种方式,我们仍然可以通过让数据库引擎验证所有数据来获得完全的 ACID 合规性,因为它没有命中数据库,所以具有高读取性能,然后当它不再是“事务”时 Mongo 可以接受它。

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

4

2 回答 2

2

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

于 2014-05-28T22:21:38.613 回答
0

我没有使用 SQL Server 的具体经验,但您所描述的似乎确实是 MongoDB 的有效用例。

请注意,虽然 MongoDB 不能直接处理事务,但它能够以原子方式处理某些操作(例如,参见 findAndModify)。此外,启用日记功能后,您无需担心持久性。MongoDB 是一种可靠的数据存储,不会丢失或损坏您的数据。

如果您在禁用日志的情况下运行第二个部署,MongoDB 本身也可以充当高性能缓存。在这种情况下,写入将发生在内存中,并且每 60 秒才会持久化到磁盘(除非另有配置)。这将提供与仅在内存中的 memcache 相当的性能,同时让您的堆栈更简单一些。

希望这可以帮助!

于 2012-01-12T22:07:10.280 回答