第一,背景
现在计算机技术的发展基本上每年都在变化,尤其是互联网。最近的分布式内存数据库架构尤为突出。从反向代理和负载均衡到SOA和RPC的一切基本上解决了网络的瓶颈。其实这个网络上的大问题就是增加服务器,多个工具或者一个链接来缓冲访问时间和速度。最近有SPRINGCLOUD等,比如这些,解决了程序的访问和流通过程。但是最后数据层会有瓶颈,数据层的控制力会很明显。但是现在的数据层会出现:数据库分区和表的解决方案,无论是纵向还是横向,也会暴露出很多问题,比如多表联查,综合数据,统计数据。
将来的网速必定会逐渐加快,访问分布式内存数据库的瓶颈远大于程序中的访问。即使将数据库分为数据库和表,其局限性也是显而易见的,所采取的措施估计会越来越复杂。
基于以上需求,我大胆猜测,开发一套分布式内存数据库来解决这些问题应该会很棒。2006年到2009年玩手游的时候,大部分数据都放在缓存里。没想到2011年之后,出现了REDIS、MONGDB、HBASE等基于缓存的KV数据库。虽然这些解决了一些问题,但是有些功能还是没有达到我的预期目的。
第二,猜测需求
未来的数据库需要分为:内存数据库、缓存数据库和硬盘数据库;缓存是流行的REDIS,MONGDB和HBASE。硬盘有:MYSQL、ORACLE、MSSQLSERVRR、INFORMIX、DB2等。但是分布式内存数据库目前并没有一套我们需要开发的系统软件。
分布式内存数据库与硬盘数据库的关系如下:硬盘数据库主要用于永久存储。一旦内存数据库重新启动或停止,所有数据都将存储在硬盘数据库中。如果启用内存数据库,硬盘数据库的所有数据都将被读入内存数据库。分布式内存数据库您可以使用某些写入策略将数据保存到硬盘数据库:
硬盘数据库
内存数据库
读取和写入数据
第三,实现目标
分布式内存数据库必须达到以下目的:
需要跨平台;用什么语言开发这个系统并没有限制,但最需要的是跨平台;
能读写当前行业内任何硬盘数据库的数据,即能处理它们的数据类型和相关程序(存储过程);
具有当前数据库的大部分特征:事务处理、能量交换等特征;
能够集群部署,采用读写相关的策略,快速处理访问请求;
既然是数据库,那肯定可以用SQL查询,但是不用分数据库和表;
必须考虑安全性、稳定性等性能;
现在硬盘数据库的体积就不用说了,比较大,内存肯定不会比它的大小还小。以后一旦聚类,还是会有很多T计算的内存;这种考虑不仅是为了解决未来数据库访问的响应速度问题,也是为了解决数据库统一的问题。