MemDB 是全球首个支持分布式事务的 MongoDB。
快速的内存数据访问,高达 25,000 ops (single doc read/write) /碎片 (each shard take one CPU core).
系统可水平伸缩
没有单点瓶颈
在分布式环境真正支持 ACID (Stands for Atomicity, Consistency, Isolation, Durability) 事务
MemDB 让 MongoDB 支持 ACID 事务
直接使用 MongoDB 的查询 API
内置 Mongoose 支持
每个碎片都有一个或者多个 slaves,不会发生单点故障
MemDB shell:
架构:
Mdbgoose:
var memdb = require('memdb-client'); var P = memdb.Promise; var mdbgoose = memdb.goose; // Define player schema var playerSchema = new mdbgoose.Schema({ _id : String, name : String, areaId : Number, deviceType : Number, deviceId : String, items : [mdbgoose.SchemaTypes.Mixed], }, {collection : 'player'}); // Define player model var Player = mdbgoose.model('player', playerSchema); var main = P.coroutine(function*(){ // Connect to memdb yield mdbgoose.connectAsync({ shards : { // specify all shards here s1 : {host : '127.0.0.1', port: 31017}, s2 : {host : '127.0.0.1', port: 31018}, } }); // Make a transaction in s1 yield mdbgoose.transactionAsync(P.coroutine(function*(){ var player = new Player({ _id : 'p1', name: 'rain', areaId : 1, deviceType : 1, deviceId : 'id1', items : [], }); // insert a player yield player.saveAsync(); // find player by id var doc = yield Player.findByIdAsync('p1'); console.log('%j', doc); // find player by areaId, return array of players var docs = yield Player.findAsync({areaId : 1}); console.log('%j', docs); // find player by deviceType and deviceId player = yield Player.findOneAsync({deviceType : 1, deviceId : 'id1'}); // update player player.areaId = 2; yield player.saveAsync(); // remove the player yield player.removeAsync(); }), 's1'); }); if (require.main === module) { main().finally(process.exit); }
MemDB 是一个key/value平台系统。 MemDB定位于【memcache、redis】与【mysql】间的一个key/value持久存储平台。 如下特点: 1> MemDB是定位于【memcache、redis】与【mysql】间的一个key/value持久存储平台。 2> 与Memcache、redis不同,MemDB通过扩充存储引擎满足不同类型数据、业务规则的数据的高效存储于操作。
假如measurement名为price,field为volume出了问题,那么在这个measurement中,有2个volume 解决办法如下,如果还解决不了可以参考原文 第一步,关闭influxdb服务器 第二步,输入下面的代码重建索引 # 语法 influx_inspect buildtsi -datadir <data_dir> -waldir <wal_dir> # 例如 influx
ShardingSphereTransactionManager SPI 名称 详细说明 ShardingSphereTransactionManager 分布式事务管理器 已知实现类 详细说明 XAShardingSphereTransactionManager 基于 XA 的分布式事务管理器 SeataATShardingSphereTransactionManager 基于 Seata 的分
ShardingSphere-Proxy 接入的分布式事务 API 同 ShardingSphere-JDBC 保持一致,支持 LOCAL,XA,BASE 类型的事务。 XA 事务 ShardingSphere-Proxy 原生支持 XA 事务,默认的事务管理器为 Atomikos。 可以通过在 ShardingSphere-Proxy 的 conf 目录中添加 jta.properties 来定
通过 Apache ShardingSphere 使用分布式事务,与本地事务并无区别。 除了透明化分布式事务的使用之外,Apache ShardingSphere 还能够在每次数据库访问时切换分布式事务类型。 支持的事务类型包括 本地事务、XA事务 和 柔性事务。可在创建数据库连接之前设置,缺省为 Apache ShardingSphere 启动时的默认事务类型。
背景 数据库事务需要满足 ACID(原子性、一致性、隔离性、持久性)四个特性。 原子性(Atomicity)指事务作为整体来执行,要么全部执行,要么全不执行。 一致性(Consistency)指事务应确保数据从一个一致的状态转变为另一个一致的状态。 隔离性(Isolation)指多个事务并发执行时,一个事务的执行不应影响其他事务的执行。 持久性(Durability)指已提交的事务修改数据会被持久
单文档原子性可满足大多数业务需求 在 MongoDB 中,对单个文档的操作是原子操作。 由于 MongoDB 文档数据模型,一个文档中通过嵌入式的文档和数组来表示传统关系数据库模型中的一对一、一对多关系,而不是通过文档之间的复杂关系来描述业务需求中的一对一、一对多关系。 所以单文档原子性可以满足实际生产中大多数关于事务的需求。 对于需要对多个文档(在单个或多个集合中)进行原子读写的情况,Mongo
两阶段提交协议 通常在复杂场景下是不推荐使用的,除非是非常简单的场景,非常容易提供回滚,而且依赖的服务也非常少的情况。 这种实现方式会造成代码量庞大,耦合性高。而且非常有局限性,因为有很多的业务是无法很简单的实现回滚的,如果串行的服务很多,回滚的成本实在太高。 本地消息表 这种实现方式的思路,其实是源于ebay,后来通过支付宝等公司的布道,在业内广泛使用。其基本的设计思想是将远程分布式事务拆分成一
分布式事务基于 JTA/XA 规范实现 1。 两阶段提交: 1. 本功能暂未实现 ↩
1. 前言 一个项目中使用多个数据源的需求,我们在日常工作中时常会遇到。 以商城系统为例,有一个 MySQL 的数据库负责存储交易数据。公司还有一套 ERP 企业信息化管理系统,要求订单信息同步录入 ERP 数据库,便于公司统一管理,而该 ERP 系统采用的数据库为 SQL Server 。 此时,就可以在 Spring Boot 项目中配置多个数据源。另外,使用多数据源后,需要采用分布式事务来保