跳到主要内容

逻辑数据库

概述

Garnet 在单个服务器实例中支持多个逻辑数据库。此功能仅在关闭集群模式时可用(默认情况下,集群模式是关闭的)。
可以通过更改 MaxDatabases 配置选项(在 garnet.conf 文件中,或通过命令行使用 --max-databases)来更改服务器实例中允许的逻辑数据库数量。默认情况下,MaxDatabases 设置为 16

新客户端将始终连接到默认数据库(索引为 0)。要切换数据库上下文,您可以使用 SELECT 命令。

设计

Garnet 中的每个逻辑数据库都由一个 GarnetDatabase 实例表示。每个这样的实例都持有对数据库存储、AOF 设备以及其他数据库特定数据的引用。
当 Garnet 服务器实例创建时,StoreWrapper 实例化一个服务器范围的 IDatabaseManager,默认情况下,它是一个持有默认数据库的 SingleDatabaseManager
如果选择了非零数据库索引,IDatabaseManager 随后可以升级为 MultipleDatabaseManager
StoreWrapper 反过来调用 IDatabaseManager 来执行检查点、AOF 提交等操作,IDatabaseManager 的每个不同实现都将在单数据库或多数据库上下文中处理这些操作。

每个 RespServerSession 管理一个 GarnetDatabaseSession 实例的映射,这些实例表示每个数据库的会话数据。每个 GarnetDatabaseSession 都持有一个 StorageSession 实例以及 GarnetApi 实例和一个 TransactionManager 实例。
每当客户端选择与以前未交互过的数据库进行交互时(例如,使用 SELECT),都会创建一个新的 GarnetDatabaseSession
每次客户端调用 SELECT 时,RespServerSession 都会根据相应的 GarnetDatabaseSession 实例切换其上下文。

检查点、AOF 和恢复

每个数据库的存储数据将单独存储在其自己的目录中。检查点存储在配置中定义的 CheckpointDir 中(如果未指定,则默认为 LogDir)。每个存储的检查点数据将分别存储在 Store/checkpointsObjectStore/checkpoints 中用于默认数据库,或存储在 Store/checkpoints_iObjectStore/checkpoints_i 中用于索引为 i 的数据库。
同样,AOF 数据将存储在相同的 CheckpointDir 中(如果未指定,则默认为 LogDir)。每个数据库的 AOF 数据将存储在 AOF 中用于默认数据库,或存储在 AOF_i 中用于索引为 i 的数据库。

恢复时,Garnet 将从上述目录名模式中提取已保存数据库的索引,并恢复与数据库索引匹配的任何已保存数据。