分布式数据库的开发-内存数据库

一、背景

现在的计算机技术的发展,基本上一年一变,特别是互联网。最近的分布式架构尤其突出,从反向代理、负载均衡到SOA、RPC这些东东,基本上都是解决了网络上的瓶颈,其实这网络上的问题大不了就是增加服务器,多个工具或一个环节来缓冲访问的时间和速度。还有最近的SPRINGCLOUD之类的,像这些也就是解决了程序上访问流通过程,但是,最终还是要在数据层出现瓶颈,数据层的控制就显而易见了,不过眼前的数据层就出现了:对数据库进行分库分表,其解决方法呢,又是纵向又是横向的,分库分表也会暴露很多问题:像多表关联查询、综合数据、统计数据这些诸如此类的问题,然后呢这些人又说如何如何解决的。

以后,网络速度肯定会逐步加快的,这访问数据库的瓶颈远远大于程序里访问的瓶颈,即使数据库采取分库分表,其局限性也显而易见,并且采取的措施估计越来越复杂。

基于以上需求,我大胆的猜想,要是开发出一套数据库,能解决这些问题多好。在2006到2009年做手游的时候,就把大部分数据放到缓存里,没想到在2011年后,就有了REDIS、MONGDB、HBASE这些基于缓存的KV数据库,虽然这些解决了一些问题,但是在某些功能上还是没有达到我所预期目的。

二、猜想需求

       以后的数据库需要分开为:内存数据库、缓存数据库、硬盘数据库;缓存数据库就是现在流行的REDIS、MONGDB、HBASE这些;硬盘数据库呢就是:MYSQL、ORACLE、MSSQLSERVRR、INFORMIX、DB2这些;但是内存数据库目前是没有,需要我们开发的一套系统软件。

       内存数据库和硬盘数据库的关系如下:硬盘数据库主要是做永久性存储,一旦内存数据库重启或者停止使用时,把所有数据存入硬盘数据库,如果内存数据库启用后,把硬盘数据库的数据全部读入内存数据库,内存数据库可以使用一定的写入策略保存数据到硬盘数据库:

 

 

硬盘数据库

内存数据库

读和写数据

 

    
  
   
 

 

 

 

 

 

三、实现目标

       内存数据库的目的必须达到以下几点:

  1. 需要是跨平台的;使用什么语言开发这套系统,不限制,但是最需要的是跨平台;
  2. 能读写目前业界任何硬盘数据库的数据,也就是对他们的数据类型和相关的程序(存储过程)都能处理;
  3. 拥有现在数据库的大部分特性:事物处理的特性,能QUID等;
  4. 能集群部署,采取读写相关策略,以求达到快速处理访问请求;
  5. 既然是数据库,肯定可以使用SQL查询,但是,可以不用分库分表那么麻烦
  6. 安全、稳定等性能必须考虑;
  7.  

现在不用考虑说硬盘数据库的体量比较大,内存肯定不会比它的小到,以后的内存,一旦集群,按T计算的内存还是很多的;

这种考虑,不仅仅是为了解决以后访问数据库的响应速度问题,还要解决数据库一统问题。

 

四、问题

1、谁来做这系统?

MemDB 是全球首个支持分布式事务的 MongoDB。高性能和可伸缩快速的内存数据访问,高达 25,000 ops (single doc read/write) /碎片 (each shard take one CPU core).系统可水平伸缩没有单点瓶颈真正的分布式 ACID 事务在分布式环境真正支持 ACID (Stands for Atomicity, Consistency, Isolation, Durability) 事务MemDB 让 MongoDB 支持 ACID 事务兼容 MongoDB 和 Mongoose直接使用 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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值