
分布式存储
文章平均质量分 68
遇_见
这个作者很懒,什么都没留下…
展开
-
对redis中单元测试框架的简单修改
/* This is a really minimal testing framework for C. * * Example: * * test_cond("Check if 1 == 1", 1==1) * test_cond("Check if 5 > 10", 5 > 10) * test_report() * * ----------------------------原创 2014-05-19 09:33:43 · 1198 阅读 · 1 评论 -
【redis源码分析】RDB持久化机制
rdb是redis保存内存数据到磁盘数据的其中一种方式(另一种是AOF)。Rdb的主要原理就是在某个时间点把内存中的所有数据的快照保存一份到磁盘上。在条件达到时通过fork一个子进程把内存中的数据写到一个临时文件中来实现保存数据快照。在所有数据写完后再把这个临时文件用原子函数rename(2)重命名为目标rdb文件。这种实现方式充分利用fork的copy on write。 另外一种原创 2014-05-24 22:04:06 · 1480 阅读 · 1 评论 -
【redis源码分析】redis持久化概述
所谓的redis的持久化也就是数据落地,对于任何一个数据系统都要考虑是不是需要数据落地。在系统崩溃或是机房掉点等的原因下,将有用的数据记录在非易失性存储器上面,防止数据丢失或者系统重启时的数据恢复。对于一般的写操作,他的大致流程如下面几个过程:1.客户端向服务端发送写操作(数据在客户端的内存中) 2.数据库服务端接收到写请求的数据(数据在服务端的内存中) 3.服务端调用writ原创 2014-05-24 19:46:25 · 1014 阅读 · 0 评论 -
CAP原理以及一致性和强一致性
在足球比赛里,一个球员在一场比赛中进三个球,称之为帽子戏法(Hat-trick)。在分布式数据系统中,也有一个帽子原理(CAP Theorem),不过此帽子非彼帽子。CAP原理中,有三个要素:一致性(Consistency)可用性(Availability)分区容忍性(Partition tolerance)CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。因此在进转载 2014-05-23 15:00:59 · 1315 阅读 · 0 评论 -
【redis源码分析】redis对象和hash表---redisObject+hashType
Redis对象数据结构如下:typedef struct redisObject { // 类型 unsigned type:4; // 对齐位 unsigned notused:2; // 编码方式 unsigned encoding:4; // LRU 时间(相对于 server.lruclock) uns原创 2014-05-22 21:54:36 · 943 阅读 · 0 评论 -
【redis源码分析】压缩列表---ziplist
压缩列表: 每个节点的构成: 上面的两个数据结构就可以实现整个压缩链表,其实他就是一个连续内存占用的双向链表,只不过没有以固定的节点大小来表示每个节点,而是以各个节点内部的长度标识了节点的额大小,这样可以更加剩内存,在实现的过程中,使用了如下的技巧来保证压缩列表的性质:1,根据编码方式的不同, pre_entry_length 域可能占用 1 字节或者 5 字节原创 2014-05-22 11:24:10 · 906 阅读 · 0 评论 -
【redis源码分析】跳跃表--skiplist
跳跃表实际上可以看作是一种原创 2014-05-22 10:04:01 · 825 阅读 · 0 评论 -
【redis源码分析】数字集合--intset
下面是intset的相关定义原创 2014-05-21 20:19:14 · 978 阅读 · 0 评论 -
【redis源码分析】字典---dict
字典结构是redis的一个核心结构,设计原创 2014-05-20 21:59:41 · 830 阅读 · 0 评论 -
【redis源码分析】双向链表---adlist
双向链表的头文件定义:原创 2014-05-19 14:36:58 · 887 阅读 · 0 评论 -
【redis源码分析】内存分配---zmalloc
/* zmalloc - total amount of allocated memory aware version of malloc() * * Copyright (c) 2009-2010, Salvatore Sanfilippo * All rights reserved. * * Redistribution and use in source and binary f原创 2014-05-17 21:34:53 · 1231 阅读 · 0 评论 -
【redis源码分析】动态字符串--sds
#ifndef __SDS_H#define __SDS_H#define SDS_MAX_PREALLOC (1024*1024)#include #include // sds 类型typedef char *sds;// sdshdr 结构,注意这个结构体的大小只有4+4,最后的buf是不占空间的struct sdshdr { // buf 已占用长度,相当原创 2014-05-18 21:36:45 · 1238 阅读 · 0 评论 -
数据存储的行存储和列存储
[-]一结构布局二 对比三 优化四 总结目前大数据存储有两种方案可供选择:行存储和列存储。业界对两种存储方案有很多争持,集中焦点是:谁能够更有效地处理海量数据,且兼顾安全、可靠、完整性。从目前发展情况看,关系数据库已经不适应这种巨大的存储量和计算要求,基本是淘汰出局。在已知的几种大数据处理软件中,Hadoop的HBase采用列存储,MongoDB是文档型的行存储,L转载 2014-05-12 16:43:36 · 873 阅读 · 0 评论 -
乐观锁和悲观锁
为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突。这会产生得冲突,就是著名的并发性问题。典型的冲突有:丢失更新:一个事务的更新覆盖了其它事务的更新结果,就是所谓的更新丢失。例如:用户A把值从6改为2,用户B把值从2改为6,则用户A丢失了他的更新。脏读:当一个事务读取其它完成一半事务的记录时,就会发生脏读取。例如:用户A,B看到的值都是6,用户B把值改为2,用户A原创 2014-05-26 09:28:05 · 659 阅读 · 0 评论