`
cywhoyi
  • 浏览: 420977 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

支持MapDB的Eventstore

阅读更多

背景:现在微服务大行其道,虽然微服务开山鼻祖是不建议在微服务下做分布式事务,领域驱动设计早已阐明,具有强一致性要求的一组业务概念,属于同一个聚合,不建议拆到不同服务中,从而尽可能避免分布式强事务一致性的处理。但是不可避免我们没有真的按照DDD领域驱动设计,那么微服务如何保持事务一致性呢?

我们这里采用的EventStore的方式,有基于memory、jpa、jdbc等方式,我今天采用了MapDB framework的方式,MapDB提供多种多样方式的数据结构有link、set、map、queue等。

EventMessage

public interface Message<T> extends Serializable {

    String getIdentifier();

    MetaData getMetaData();

    T getPayload();

    Class<T> getPayloadType();

    Message<T> withMetaData(Map<String, ?> metaData);

    Message<T> andMetaData(Map<String, ?> metaData);
}

 MapDB eventStore

/**
 * Created by Young on 2017/4/11.
 */
public class MapDBEventStorageEngine implements EventStorageEngine {
    private final DB db = DBMaker.memoryDB().make();
    private static final String ORDER_LINK_LIST = "ORDER_LINK_LIST";
    private final Lock lock = new ReentrantLock();
    private final Condition dataAvailableCondition = lock.newCondition();

    @Override
    public void appendEvents(List<? extends EventMessage<?>> events) {

        lock.lock();
        try {
            IndexTreeList<Object> hs = db.indexTreeList(ORDER_LINK_LIST).createOrOpen();
            hs.addAll(events);
        } finally {
            lock.unlock();
        }
    }

    @Override
    public void storeSnapshot(DomainEventMessage<?> snapshot) {

    }

    @Override
    public Stream<? extends TrackedEventMessage<?>> readEvents(TrackingToken trackingToken, boolean mayBlock) {
        return null;
    }

    @Override
    public DomainEventStream readEvents(String aggregateIdentifier, long firstSequenceNumber) {
        return null;
    }

    @Override
    public Optional<DomainEventMessage<?>> readSnapshot(String aggregateIdentifier) {
        return null;
    }
}

 

0
1
分享到:
评论

相关推荐

    mapdb,mapdb提供由磁盘存储或堆外内存支持的并发映射、集合和队列。它是一种快速、易于使用的嵌入式Java数据库引擎。.zip

    1. **并发支持**:MapDB 支持多线程环境下的并发访问,采用乐观锁机制确保数据的一致性。这意味着多个线程可以同时读写数据,提高程序的执行效率。 2. **磁盘存储与堆外内存**:MapDB 允许数据存储在磁盘上,当内存...

    MapDB源代码

    1. **持久化存储**:MapDB 支持将数据存储在磁盘上,同时也支持内存存储。它使用BTree和B+Tree等高效的数据结构,确保快速的读写操作。 2. **事务支持**:MapDB 提供了ACID(原子性、一致性、隔离性、持久性)事务...

    mapdb-3.0.0-M4.jar

    mapdb

    持久化存储的 Map MapDB.zip

    MapDB的核心特性是其对键值对数据结构的支持,尤其是对Map接口的实现,使得它可以作为Java中的持久化HashMap来使用。 MapDB 的优点之一在于它的速度。由于优化了内存管理和磁盘I/O,MapDB能够处理大量数据,并保持...

    MapDB操作手册 PDF 下载

    MapDB的核心特性在于其支持持久化的键值对存储,同时提供了BTree、Hash、Queue、Set、List等多种数据结构。这个“MapDB操作手册”很可能是为了帮助开发者深入了解并充分利用MapDB的各项功能而编写的。 MapDB的核心...

    mapdb-3.0.5-API文档-中英对照版.zip

    赠送jar包:mapdb-3.0.5.jar; 赠送原API文档:mapdb-3.0.5-javadoc.jar; 赠送源代码:mapdb-3.0.5-sources.jar; 赠送Maven依赖信息文件:mapdb-3.0.5.pom; 包含翻译后的API文档:mapdb-3.0.5-javadoc-API文档-...

    MapDB操作手册.docx

    MapDB还支持事务管理,DB对象代表单个事务。你可以使用commit()方法提交事务,rollback()回滚事务,以及close()方法关闭数据库并释放资源。例如: ```java ConcurrentNavigableMap, String&gt; map = db.treeMap(...

    mapdb-1.0.8.jar

    mapdb-1.0.8.jar 免费下载 mapdb

    Android代码-mapdb

    MapDB: database engine MapDB combines embedded database engine and Java collections. It is free under Apache 2 license. MapDB is flexible and can be used in many roles: Drop-in replacement for ...

    mapdb-2.0-beta13.zip

    MapDB可以作为Sling或AEM中的高效数据存储解决方案,提供内存和磁盘上的数据结构,以支持高性能的数据操作。而wcm-io-sling扩展则增强了Sling的功能,使开发者能够利用Sling Models的便利性,更好地管理AEM应用中的...

    MapDB 官方文档

    MapDB is an open-source (Apache 2.0 licensed), embedded Java database engine and collection framework. It provides Maps, Sets, Lists, Queues, Bitmaps with range queries, expiration, compression, off-...

    mapdb:MapDB提供由磁盘存储或堆外内存支持的并发Maps,Sets和Queues。 它是一种易于使用的嵌入式Java数据库引擎

    MapDB:数据库引擎 MapDB结合了嵌入式数据库引擎和Java集合。 根据Apache 2许可,它是免费的。 MapDB是灵活的,可以在许多角色中使用: 可以直接替换地图,列表,队列和其他集合。 不受垃圾收集器影响的堆外收集 ...

    mapdb-3.0.5-API文档-中文版.zip

    赠送jar包:mapdb-3.0.5.jar; 赠送原API文档:mapdb-3.0.5-javadoc.jar; 赠送源代码:mapdb-3.0.5-sources.jar; 赠送Maven依赖信息文件:mapdb-3.0.5.pom; 包含翻译后的API文档:mapdb-3.0.5-javadoc-API文档-...

    mapgraphdb:MapDB + Tinkerpop 蓝图

    ACID - MapDB 可选择支持具有完全 MVCC 隔离的 ACID 事务。 MapDB 使用预写日志或仅追加存储来实现出色的写入持久性。 灵活 - MapDB 可用于从内存缓存到多 TB 数据库的任何地方。 它还具有许多选项,可以用持久性...

    RedisMapDB:该项目旨在成为由 mapdb 支持的 redis 的替代品

    该项目旨在成为由 mapdb 支持的 redis 的替代品 服务器/解析是从这个项目分叉出来的: : 后端数据库: : 编译 ./gradlew fatJar 跑步 java -jar build/libs/redis-mapdb-all-1.0.jar -threads 5 选项 Usage: ...

    mapdb.sql

    mapdb.sql

    mapdb:真正的地图编辑者仅能触摸由Kaldonis主持的mapdb

    mapdb 由Kaldonis主持的mapdb主要受到善意的地图编辑人员的感动。 2021年4月3日-各种作品 更新了Cysaegir图形,新的Stables房间,超节点标签,固定的RP条目。 更新了Halcyon Hills图形,添加了新房间 所有丢失的信...

    mapdb-hz-offheap:为土耳其的内存中数据网格构建提供堆外存储

    这是非官方的扩展和Hazelcast公司内部HZ它将替换不支持ConcurrentHashMap与离堆HTreeMap从 。 它独立于其他非堆解决方案,并且在Apache License 2.0下免费提供,没有附加任何挂钩。 作者研究嵌入式数据库引擎,这...

    RxCache:适用于Java和Android的本地React式缓存。 现在,它支持堆内存,堆外内存和磁盘缓存

    Memory 额外支持 Guava Cache、Caffeine、MapDB 的实现 Memory 支持堆外内存(off-heap) Persistence 默认使用 Gson 实现对象的序列化和反序列化 Persistence 额外支持使用 FastJSON、Moshi、Kryo、Hessian、FST、...

    spicerack:MapDB的Clojure包装器,它是一个快速的,磁盘持久的数据结构库

    MapDB还支持事务处理,适用于多线程和分布式环境,具有高并发性。 **Clojure包装器(Wrapper):** Clojure是一种基于Lisp的函数式编程语言,运行在Java虚拟机上。"spicerack" 是一个专门为Clojure设计的库,它的...

Global site tag (gtag.js) - Google Analytics