确保内存数据结构的一致性

时间:2016-12-24 21:14:57

标签: java service concurrency in-memory data-consistency

我想知道什么是最好的方式(可能是我正在寻找一种模式)以确保数据在日常示例中的一致性,其中服务通过在网关上调用某些方法来检索数据(网关可能是边界) DB,Web调用甚至是内存中的数据结构。)

以下是我在Java中描述的案例示例:

public class MyService {

    private DataSourceGateway dataSourceGateway;

    public MyService(DataSourceGateway dataSourceGateway) {
        this.dataSourceGateway = dataSourceGateway;
    }

    public void myServiceMethod() {
        doThings1();
        doThings2();
    }

    private void doThings1() {
        int count = dataSourceGateway.getCount();
        // do things with this count
    }

    private void doThings2() {
        int count = dataSourceGateway.getCount();
        // do things with this count which is expected to be the same as in doThings1()
    }
}

假设DataSourceGateway可能不是提供事务的数据库,但内存数据结构和DataSourceGateway和Service是单例。

明显的一致性问题是当另一个服务在myServiceMethod()的调用完成doThings1()并且即将执行doThings2()时修改DataSourceGateway中的数据时。

该示例已经过简化,但考虑的情况是,调用dataSourceGateway上的方法不同时,还要调用具有某些依赖关系的对象(例如,getCount和getAll应该是一致的)。我称之为日常问题的原因是因为我看到在多个地方注入了相同的DataSourceGateway s(或DAO),并且通常开发人员希望调用是一致的。

确保计数与这两次调用相同的最佳方法是什么?

0 个答案:

没有答案