使用Web应用程序处理慢速数据库的策略

时间:2014-06-17 09:17:48

标签: database rest symfony architecture json-ld

我们正试图找出在实时网站上使用慢速数据库的最佳解决方案。

基本系统架构是这样的:

  • 慢(一些读取和大多数写入速度很快,其他写入时间很长)Postgres DB。我们无法控制这一点。
  • 访问Postgres DB的单片离线系统。我们无法控制这一点。
  • 可以访问Postgres DB的快速内部服务器。我们可以为这台服务器开发和安装软件。
  • 运行LAMP堆栈的快速Web服务器可能无法访问Postgres数据库,但可能访问内部服务器。我们可以为这台服务器开发软件。
  • 可以被任何东西访问的快速MySQL数据库。我们完全控制了这一点。

我们正在开发一个新的Web应用程序,以便使用Symfony 2在Web服务器上运行。

我们最初的计划是创建一个RESTful API,以便位于内部服务器上,该服务器由Web应用程序使用。我们面临的主要问题是网络应用程序的速度受到Postgres数据库速度的限制,这对用户来说是不可接受的。

有没有人知道解决此速度问题的任何策略?

缓存是一个显而易见的解决方案,我们当然可以讨论数据当前的流程,但在某些情况下,它必须绝对是最新的。例如,如果用户保存了一些更改,则应立即显示这些更改。我们已经考虑让API拥有自己的快速数据存储,它可以从Postgres异步更新。然后我们可以对这个快速存储执行所有读操作,同时写入和Postgres。担心当然是数据的一致性以及系统的复杂性增加。

我们正在探索使用JSON-LD来表示数据,因为它非常适合我们使用和使用标准,尽管是一个相对年轻的标准,应该可以缓解未来的任何重大架构变化,可能会发生。由于它可以直接放入文档存储中,因此可能会简化该过程。

我们的主要目标是:

  • 为用户提供良好的体验。
  • 创建一个易于理解且易于理解的系统。

欢迎任何建议或建议!

3 个答案:

答案 0 :(得分:1)

嗯,你可能会使用couchdb。沙发的前提是它最终是一致的,但是您需要使用本地数据副本,并立即返回应用程序,然后以最快的速度更新中央存储库&# 39;能够。

它也是开箱即用的RESTful。你唯一需要搭桥的是postgres - couchdb连接。

答案 1 :(得分:1)

我认为要问的主要问题是:为什么Postgres DB这么慢?同样根据您的解释,尚不清楚所有这些系统正在做什么以及依赖/要求是什么。例如,需要PostgresDB中的数据是最新的吗?那是主DB吗?它是单片离线系统的集成DB吗?

如果你不能改变缓慢的Postgres数据库,它必须是最新的到分钟,网站依赖于它,并且必须达到分钟(在某些情况下),你有一个问题,因为这是不可能的。如果Postgres数据库不需要最新,因为它只是由离线应用程序使用,您可以异步更新该数据库并以一种为您提供必要性能的方式使用MySQL数据库。

鉴于您打算使用JSON-LD,我希望了解有关您正在构建的系统的更多信息。你能分享更多信息吗?

答案 2 :(得分:0)

  

例如,如果用户保存了一些更改,则应立即显示这些更改。

这也是缓存,因此当用户更新某些数据时,缓存(现在包含旧数据)到期(Etag或手动删除缓存)