《01 | 基本架构:一个键值数据库包含什么?》笔记

2024-09-22  本文已影响0人  念善

简介

基础篇强调构建系统观,重在让读者对 Redis 的总体架构和关键模块有一个全局的认知,然后再深入到具体的技术。本章是基础篇的第一篇。第一篇从 SimpleKV 这个虚构的 kv 数据库开始讲解,通过逐步推演构造 SimpleKV 来构建知识框架。

关键问题

  1. 掌握数据模型和操作接口
    前者突出可以存什么数据,后者突出可以对数据作什么操作。

数据模型:key 往往大同小异,重点在于 value 类型支持。Memcached 仅支持 String. Redis 支持的 value 类型包括 String、哈希表、列表、集合等。Redis 受欢迎的一个重要原因就在于支持丰富的 value 类型。

数据操作,最基本的:

  1. 键值对保存在内存还是外村
    Memcache/ Redis 都是内存型。SimpleKV 也采用内存型。外存会更复杂。

  2. 采用什么访问模式

  1. 如何定位键值对的位置
    索引的作用是让键值数据库根据 key 找到相应 value 的存储位置,进而执行操作。索引类型有哈希表、B+ 树、字典树等,Memcache 和 Redis 均采用哈希表,SimpleKV 也如此。哈希表复杂度 O(1 ),内存的高性能随机访问特性和哈希表很匹配。

  2. 不同操作的具体逻辑是怎样的

  1. 如何实现重启后快速提供服务?

「SimpleKV 采用了常用的内存分配器 glibc 的 malloc 和 free,因此,SimpleKV 并不需要特别考虑内存空间的管理问题。但是,键值数据库的键值对通常大小不一,glibc 的分配器在处理随机的大小内存块分配时,表现并不好。一旦保存的键值对数据规模过大,就可能会造成较严重的内存碎片问题。」

分配器是内存数据库的一个关键因素。Redis 的内存分配器提供了多种选择。为重启后快速提供服务,KV 数据库也要有持久化功能。SimpleKV 采用文件存储方式。

实现上,有两种方式:

KV 数据库的基本结构

image.png

通过 SimpleKV 这么一个麻雀虽小五脏俱全的数据库,学习内存 KV 的基本组件,便于进一步学习 Redis.


image.png

SimpleKV 和 Redis 的几个关键差异:

上一篇 下一篇

猜你喜欢

热点阅读