目标:扩展将 PostgreSQL 用作数据存储的现有应用程序。
Apache Ignite 如何提供帮助:我们有一个包含许多模块的应用程序,所有模块都使用一些共享表。所以我们只有一个 PostgreSQL 主数据库,它已经在 AWS 大型 SSD 机器上。我们已经有 Redis 用于缓存,但由于我们没有 Redis 的限制,因此部分更新和查询二级索引并不容易。
我们的用例: 我们有两个大表,一个是成员(member),第二个是订阅。这是多对多的关系,其中一个成员在多个组中订阅,我们在订阅表中维护订阅。 成员表大小约为 4000 万,该表的大小约为 40M x 1.5KB + 更多 ~= 60GB
挑战
一个挑战是,我们无法归档这些数据,因为每个成员都在工作,并且经常更新和读取此表。
我的想法:
根据我从文档中读到的,Apache Ignite 可以帮助在 PostgreSQL 表之上提供一个缓存层。
现在,我有几个来自实现点的问题 查看。
- Apache Ignite 是否适合我们的用例?如果是,那么,
- apache Ignite 会在 RAM 中保留 60GB 的所有数据吗?或者我们可以在多台机器上分配 RAM 负载?
- 在更新 PostgreSQL 数据库表时,我们使用 python 和 SQLALchamy (ORM)。是否会单独调用 Apache Ignite 来 更新内存中的相同记录或者 Apache 有什么办法 Ignite 可以立即从数据库同步它吗?
- 对 Python 的支持是否足够?
- 是否有 REST API 支持与 Apache Ignite 交互。我可以避免 ODBC 连接。
- 如果此负载在未来一年内翻倍呢?
非常感谢快速回答并提前致谢。
最佳答案
是的,它应该适合您的情况。
Apache Ignite 具有持久性,这意味着它可以选择性地将数据存储在磁盘上,但如果您仅将它用于缓存,它会很乐意将所有内容存储在 RAM 中。
有两种方法。您可以在 Apache Ignite 上进行更新(这会将它们传播到 PostgreSQL),或者您可以对 PostgreSQL 进行更新并让 Apache Ignite 在第一次使用时获取它们(从 PostgreSQL 中提取)。后者仅适用于您可以想象的新记录。不支持将数据从 PostgreSQL 传播到 Apache Ignite,我猜你可以通过使用触发器来做类似的事情,但它未经测试。
有3rd party client .我没试过。 Apache Ignite 目前只有 C++/C#/Java 的内置原生客户端,其他平台只能通过 JDBC/ODBC/REST 连接,只能使用一小部分功能。
有 REST API,最近有所改进。
就 Apache Ignite 而言,120GB 听起来并不可怕。
关于postgresql - Apache Ignite 与 Postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50598925/