我们正试图找出在实时网站上使用慢速数据库的最佳解决方案。
基本系统架构是这样的:
我们正在开发一个新的Web应用程序,以便使用Symfony 2在Web服务器上运行。
我们最初的计划是创建一个RESTful API,以便位于内部服务器上,该服务器由Web应用程序使用。我们面临的主要问题是网络应用程序的速度受到Postgres数据库速度的限制,这对用户来说是不可接受的。
有没有人知道解决此速度问题的任何策略?
缓存是一个显而易见的解决方案,我们当然可以讨论数据当前的流程,但在某些情况下,它必须绝对是最新的。例如,如果用户保存了一些更改,则应立即显示这些更改。我们已经考虑让API拥有自己的快速数据存储,它可以从Postgres异步更新。然后我们可以对这个快速存储执行所有读操作,同时写入和Postgres。担心当然是数据的一致性以及系统的复杂性增加。
我们正在探索使用JSON-LD来表示数据,因为它非常适合我们使用和使用标准,尽管是一个相对年轻的标准,应该可以缓解未来的任何重大架构变化,可能会发生。由于它可以直接放入文档存储中,因此可能会简化该过程。
我们的主要目标是:
欢迎任何建议或建议!
答案 0 :(得分:1)
嗯,你可能会使用couchdb。沙发的前提是它最终是一致的,但是您需要使用本地数据副本,并立即返回应用程序,然后以最快的速度更新中央存储库&# 39;能够。
它也是开箱即用的RESTful。你唯一需要搭桥的是postgres - couchdb连接。
答案 1 :(得分:1)
我认为要问的主要问题是:为什么Postgres DB这么慢?同样根据您的解释,尚不清楚所有这些系统正在做什么以及依赖/要求是什么。例如,需要PostgresDB中的数据是最新的吗?那是主DB吗?它是单片离线系统的集成DB吗?
如果你不能改变缓慢的Postgres数据库,它必须是最新的到分钟,网站依赖于它,并且必须达到分钟(在某些情况下),你有一个问题,因为这是不可能的。如果Postgres数据库不需要最新,因为它只是由离线应用程序使用,您可以异步更新该数据库并以一种为您提供必要性能的方式使用MySQL数据库。
鉴于您打算使用JSON-LD,我希望了解有关您正在构建的系统的更多信息。你能分享更多信息吗?
答案 2 :(得分:0)
例如,如果用户保存了一些更改,则应立即显示这些更改。
这也是缓存,因此当用户更新某些数据时,缓存(现在包含旧数据)到期(Etag或手动删除缓存)