Destroy and NoSQL (2010-09-02)

 

最近刚刚接触 NoSQL 的概念,其实是连门都没入啦,只不过是为 destroy 吸收一些思想的火花,有点发现就马上记下来,以免事情太多,过几天就忘记了。

 

据百度, NoSQL 就是非关系型数据库的统称。

 

我认为, NoSQL 的最大特点,是海量数据的键 / 值存储,正好与设计中的 destroy 不谋而合。

 

NoSQL 通过对数据的键值进行散列运算,把数据分散映射到各个数据分区上去,而设计中的 destroy ,则对其索引记录的键值进行散列,通过索引记录找到数据,可以说非常相似。

 

还有, NoSQL 的一条记录可以有任意个列,而且各个记录的列可以是不同的,如果有新的需求,要增加一列,只需要在其 schema 中添加其定义,原有数据可保持不动,不像关系型数据库,会影响到所有行。这个理念,与 destroy 如出一辙。

 

不确定的是, destroy 的数据表达的是一种层次关系,也可以说是一种树型结构。目前,我还不清楚 NoSQL 的数据的关系模型。不过,这应该不影响未来的 destroy 吸收一些 NoSQL 的特性。

 

目前考虑到的有, destroy 也许可以学习部分 NoSQL ,把整个索引加载到内存中,同时把修改过的数据页(现在 2Kb 为一页)放在内存,数据页的查找首先从内存中找,如果没有找到,再从磁盘中找,内存满或者隔一定时间再把这些数据页写入磁盘。

 

为减少不断的增、删、改带来的数据页合并或者分裂操作,新增记录只在数据文件的末尾添加;至于删除,未来的 destroy 不仅能够标记删除记录,还能够标记删除除了键值外的任意列或子记录,做法是在其 tag 的最高位设置为 0 ,不过需要首先保证正常的 tag 的最高位都是 1 ,比如,现有值为 0x30 tag 应该统一改为 0xb0 ;修改操作定义为先删除后新增。数据库维护的时候再进行整理,删除 tag 最高位为 0 的记录、子记录、列之后,对所有数据页重新排列。要注意,新增和修改都会影响到索引。此外,增、删、改都要首先记录数据库日志,以备灾难恢复。

 

由于 destroy 是以一个个文件的形式组织数据库,因此,维护的时候,只有正在整理的文件需要暂时锁定,而不会影响到用户对其它文件的访问。

 

暂时想到这么多,够开发忙的,何时实现还是未知之数,不过,至少有盏指路明灯吧。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值