逻辑数据库
概述
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/checkpoints
和 ObjectStore/checkpoints
中用于默认数据库,或存储在 Store/checkpoints_i
和 ObjectStore/checkpoints_i
中用于索引为 i
的数据库。
同样,AOF 数据将存储在相同的 CheckpointDir
中(如果未指定,则默认为 LogDir
)。每个数据库的 AOF 数据将存储在 AOF
中用于默认数据库,或存储在 AOF_i
中用于索引为 i
的数据库。
恢复时,Garnet 将从上述目录名模式中提取已保存数据库的索引,并恢复与数据库索引匹配的任何已保存数据。