【问题标题】:Apache Ignite - Can writeThrough work with TRANSACTIONAL?Apache Ignite - writeThrough 可以与 TRANSACTIONAL 一起使用吗?
【发布时间】:2021-03-31 04:00:57
【问题描述】:

我是 Ignite 的新手。碰巧发现 Ignite 是一个内存数据库,它可能是对我们当前系统的一个很好的改进。

这是我的情况:

1,我们现有一个庞大的OLTP系统。这是针对在线电子商务的。

2、目前应用使用Spring Boot,数据库为Postgres (AWS)

3、app包含上千条sql:select .. from A inner join B, inner join C .... (一般是5~10个表join)

4,应用程序使用 select ... for update 来锁定条目并执行更新。重试/超时在应用中配置为并发。

5,系统处理在线流量(100 个请求/秒)以及一些后端作业更新。所以并发可能每秒都在一条记录上发生。

这是我的目的:

1、希望更改最小应用代码以集成Ignite;

2,计划这样设置架构:App -> Ignite (Memory DB) -> Postgres (Backup DB)。 (原因是我们是Ignite的新手,为了避免操作风险。所以还是倾向于保留Postgres作为备份)

一些问题

第一季度。不支持 writeThrough 与 TRANSACTIONAL 一起使用?

Q2,由于我们需要事务/锁定(选择...进行更新),我使用 CacheAtomicityMode.TRANSACTIONAL,但似乎无法自动同步到 Postgres(Q1)。有没有办法同时让 TRANSACTIONAL 和 Autosync 到 PG?否则很麻烦。我们需要自己同步。

Q3,如果我们在app中实现动态dataSource,那么在Ignite宕机的情况下可以实现切换到PG。但这要求PG上的数据与Ignite相同。请问如何在 Postgres 和 Ignite 之间保持数据一致性?

【问题讨论】:

    标签: postgresql concurrency transactions locking ignite


    【解决方案1】:

    TRANSACTIONAL 支持 writeThrough。

    但是,Apache Ignite 目前在 GA 中没有事务 SQL,因此您需要使用缓存 API 事务(get/put 等)。

    【讨论】:

    • 我c。谢谢。所以只有 get/put 可用?使用 cache.query(new SqlFieldsQuery("SELECT * from \"GradeCache\".grade for update")).getAll() 可以吗?
    • 不,SqlFieldsQuery 将无法正常工作。不幸的是,这不是受支持的方案。它不是“只是”get/put,而是整个类的 JCache 方法,例如调用、getAll、remove 等。
    猜你喜欢
    • 1970-01-01
    • 2015-04-22
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2018-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多