KV数据存储:内存篇-阿里云开发者社区

开发者社区> 安全> 正文
登录阅读全文

KV数据存储:内存篇

简介:

缘起

数据存储实在太重要,打算整理下有关数据存储的相关内容。

内存篇

定长数据存储

1、定长无序;

2、定长有序:1)数据本身有序;2)索引+无序数据。常见数据结构:数组、链表、树、B+树等。

增强约束:内存有序存放(新数据追加写/循环写;老数据直接覆盖)。有序存放数据的内存数据可直接写出到持久化设备,如磁盘、SSD等。

不定长数据

1、有序索引+内存无序存放(new、malloc);

2、有序索引+内存有序存放(预分配空间)。

3、有序索引+内存有序存放+紧凑追加写(更新索引:更新或增加;废弃标识:删除)

常见的空间预分配策略:

1、数组、多阶定长空间(指数、非指数);

2、定长数组+链表;

3、多阶hash(同hash下是否允许存放多个key的数据?影响数据查找结束判断)

空间扩展和数据迁移

对于多阶定长空间分配,数据可不断向高一阶的空间迁移。当记录不断增加,需要限制对高阶空间的长度。不断扩展高阶空间块,可解决数据存储问题,若考虑内存的使用率,还应该考虑如何决定最高阶空间长度、是否增加多个低阶空间块。

紧凑存储

对每一条内存中的数据记录,要实现紧凑存储的关键:可识别的数据记录边界。常见方法:1)记录长度;2)使用唯一的记录终止符(比如文本文件的'\n')。

使用场景的特殊限制:数据量基本不变;只读;可丢数据;定期更新等。以上限制可简化存储设计。

问题:

实现细节:

1)如何保证记录的原子更新?

2)如何保证更新期间的数据有效性?读写高效性?如何实现多读多写?一写多读?

系统通用性:

1) 如何保证数据安全 -- 持久化; 额外问题:故障恢复

2) 如何保证系统的平行扩展 -- 多机存储 -> 引发问题:数据如何分布

3) 如何保证数据可用性 -- 存储多份数据 -> 引发问题:数据的一致性


本文转自 zhenjing 博客园博客,原文链接:  http://www.cnblogs.com/zhenjing/archive/2012/10/31/KV-memory.html ,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: