4

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

基本的系统架构是这样的:

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

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

我们最初的计划是创建一个 RESTful API 放在内部服务器上,供 Web 应用程序使用。我们面临的主要问题是 Web 应用程序的速度受到 Postgres DB 速度的限制,这是用户无法接受的。

有谁知道解决这个速度问题的任何策略?

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

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

我们的主要目标是:

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

任何建议或建议都将受到欢迎!

4

3 回答 3

1

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

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

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

于 2014-06-17T15:05:24.107 回答
1

嗯,你可能会使用 couchdb。couch 的前提是它最终是一致的,但是您拥有需要处理的数据的本地副本,并且可以立即返回到应用程序,然后尽可能快地更新中央存储库。

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

于 2014-06-17T09:32:53.570 回答
0

For example, if a user saves some changes, these should appear immediately.

This is also caching, so when an user update some data, caches (which now contains old data) expires (either Etag or manually remove cache)

于 2014-06-17T12:47:40.687 回答