关于Nosql的思考

今日大概看了一下memcached的机制介绍,觉得也没有什么特别高深的东西存在。于是产生了另外一种想法,在java编程的时候,很多时候我们要面向对象,一般数据库操作的结果只是把数据从数据中取出,放入java的对象中,而对象也是在内存中的,那我们为什么不直接使用对象呢。

一切的前提是:Java的对象序列化。java可以通过序列化机制把一个对象保存到磁盘文件上,还能通过反向序列化将文件加载到对象中。那么我的思路就在这里展开,设想有3项独立的服务进程,分别是:硬盘数据服务,内存数据服务,逻辑执行程序。那么这个架构要详细说一说了

首先,硬盘数据服务,主要功能就是:定时从内存数据服务中获得复制对象,将对象保存到硬盘数据文件。

其次,内存数据服务,它的主要功能是:1、初始化。从硬盘数据服务读取数据并装载到内存对象中。2,当接到逻辑执行任务的对象修改通知时,修改内存对象。

最后,逻辑执行程序,它的功能是:从内存数据服务中获得对象的复制,并执行逻辑处理任务,如果有对象的改动,则同时通知内存数据服务修改内存对象

三者之间是不相关的独立进程通过socket协议进行通信,可以分布式架构。

但是这其中也存在很多问题,第一是初始化的速度太慢,我们知道硬盘读取速度是很麻烦的,而且需要一个压缩机制,第二是内存占用量太大,数据本身转换成对象都要开辟内存空间,第三是数据更新的回滚机制很难处理,

这个思路其实来源于一个客户的要求,当时他们买了一台服务器,32G内存,oracle装到硬盘上也不过才1G,他们系统用10年也不一定有10G。太多的内存浪费了,所有他们提了一个要求:能不能把oracle装到内存里。基于这样一个思路,我想了这样一种分布式的架构,我感觉应该会很快,对于执行逻辑的程序来说,它所有的数据来源都是来自内存,还可以定时把数据保存到硬盘上,保证数据不会丢失。

具体的实现方法,我想使用java的对象序列化充当硬盘数据服务,而反序列化充当内存数据服务,硬盘与内存之间通过数据流来实现。而逻辑程序从内存服务获取对象复制也通过流来实现,
用这样的结构,我可以自信地说,一切皆对象,没有使用sql。

也许这是一种可行的思路,或者Nosql的提倡也是基于这种思想的吧。这种技术还是初步的思考,他把一切都变得简单,要成熟还很困难吧,要走的路还长。走到一半会不会被别的技术替代也同样是问题,而目前比较成熟的技术很明显是数据库加缓存。它唯一麻烦的是数据库,缓存,程序之间的关系比较乱,学习门槛比较高,专业分工更细,全才很难诞生了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值