KV数据存储:持久化
2012-11-01 12:32 zhenjing 阅读(4297) 评论(0) 编辑 收藏 举报介质特性
由于内存的易失性,存储于内存的数据需要持久化来保证数据的安全。除了存储介质不同,本质上数据是可以在不同的存储介质中互相拷贝。内存极好的随机访问特性。磁盘seek极慢,良好的顺序读写性能;SSD极好的随机读性能,擦除次数上限;擦除再写入;页写入,块擦除(写放大: 擦除512KB大约2ms)。
Linux中写文件并无法保证文件的数据是连续的,若一定要保证磁盘空间的连续性,需要使用空间预分配fallocate。
数据持久化
当内存数据有序存放,可直接将内存数据导出到持久化设备中,如磁盘、SSD。对于非有序的内存数据,转成某种可解释的格式连续存放即可。
索引与数据
在<内存篇>中,为了保证数据有序,常使用数据索引+数据的存储方式。对于索引数据有3种处理方式:1)只存数据:当使用数据时通过扫描数据恢复数据索引;2)独立存储索引和数据;3)将索引和数据存放在一起:一般将索引存放在数据后面(索引依赖于数据的位置)。
数据格式与数据
对于KV数据,可完全不考虑数据格式,由应用程序自行处理数据格式。对于数据格式有3种处理方式:1)由应用程序自行处理;2)采用人可读的格式存储,比如txt、json、XML;3)独立存储数据格式和数据,如MySQL、采用独立的protocal buffer文件描述数据格式;4)将数据格式和数据存放在一起:一般将数据格式存放在数据之前(数据解释依赖其格式)。
实现细节
1)如何保证持久化一定成功?fsync?
2)如何定义通用的数据存储格式?
作者:zhenjing.chen
出处:http://www.cnblogs.com/zhenjing/
未注明转载的文章,版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。