postgresql - Apache Ignite 与 Postgresql

标签 postgresql ignite

目标:扩展将 PostgreSQL 用作数据存储的现有应用程序。

Apache Ignite 如何提供帮助:我们有一个包含许多模块的应用程序,所有模块都使用一些共享表。所以我们只有一个 PostgreSQL 主数据库,它已经在 AWS 大型 SSD 机器上。我们已经有 Redis 用于缓存,但由于我们没有 Redis 的限制,因此部分更新和查询二级索引并不容易。

我们的用例: 我们有两个大表,一个是成员(member),第二个是订阅。这是多对多的关系,其中一个成员在多个组中订阅,我们在订阅表中维护订阅。 成员表大小约为 4000 万,该表的大小约为 40M x 1.5KB + 更多 ~= 60GB

挑战

一个挑战是,我们无法归档这些数据,因为每个成员都在工作,并且经常更新和读取此表。

我的想法:

根据我从文档中读到的,Apache Ignite 可以帮助在 PostgreSQL 表之上提供一个缓存层。

  • 现在,我有几个来自实现点的问题 查看。

    1. Apache Ignite 是否适合我们的用例?如果是,那么,
    2. apache Ignite 会在 RAM 中保留 60GB 的所有数据吗?或者我们可以在多台机器上分配 RAM 负载?
    3. 在更新 PostgreSQL 数据库表时,我们使用 python 和 SQLALchamy (ORM)。是否会单独调用 Apache Ignite 来 更新内存中的相同记录或者 Apache 有什么办法 Ignite 可以立即从数据库同步它吗?
    4. 对 Python 的支持是否足够?
    5. 是否有 REST API 支持与 Apache Ignite 交互。我可以避免 ODBC 连接。
    6. 如果此负载在未来一年内翻倍呢?

非常感谢快速回答并提前致谢。

最佳答案

  1. 是的,它应该适合您的情况。

  2. Apache Ignite 具有持久性,这意味着它可以选择性地将数据存储在磁盘上,但如果您仅将它用于缓存,它会很乐意将所有内容存储在 RAM 中。

  3. 有两种方法。您可以在 Apache Ignite 上进行更新(这会将它们传播到 PostgreSQL),或者您可以对 PostgreSQL 进行更新并让 Apache Ignite 在第一次使用时获取它们(从 PostgreSQL 中提取)。后者仅适用于您可以想象的新记录。不支持将数据从 PostgreSQL 传播到 Apache Ignite,我猜你可以通过使用触发器来做类似的事情,但它未经测试。

  4. 3rd party client .我没试过。 Apache Ignite 目前只有 C++/C#/Java 的内置原生客户端,其他平台只能通过 JDBC/ODBC/REST 连接,只能使用一小部分功能。

  5. 有 REST API,最近有所改进。

  6. 就 Apache Ignite 而言,120GB 听起来并不可怕。

关于postgresql - Apache Ignite 与 Postgresql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50598925/

相关文章:

SQL查询错误插入到

python - 如何使用 Python 迁移将 Heroku Django 应用程序的新模型表添加到远程 Heroku Postgres?

java - @QuerySqlField 可以用在方法上吗?

java - Apache Ignite 的未知异常

ruby-on-rails-3 - Postgres 错误 "invalid value for parameter "TimeZone": "UTC""

ruby-on-rails-3 - 如何在 PostgreSQL 中 GROUP BY 几天?

java - Apache Ignite 中慢事件监听器的工作

java - Spring Boot apache ignite表未找到

java - Apache Ignite 2.7.0 在 Grid Future Adapter.get0() 上花费了大量时间

sql-server - 使用 Hibernate 从 MS SQL 迁移到 Postgres