使用ArcticDB与LMDB时,如何为不同库指定自定义大小?
如何为ArcticDB中不同LMDB库设置独立的map_size?
问题描述
我正在开发基于ArcticDB和本地LMDB的程序,需要根据数据类型创建多个库,且希望不同库对应不同的存储大小。但目前所有新建库都会沿用初始Arctic连接时设置的map_size,导致每个库的data.mdb都达到2GB。
复现代码:
from arcticdb import Arctic from os.path import getcwd # 定义Arctic实例,设置全局map_size为2GB ac = Arctic("lmdb://" + getcwd() + "/database?map_size=2GB") # 创建两个库 ac.create_library('test1') ac.create_library('test2')
生成的目录结构:
database |__arctic_cfg |_test1 | |_data.mdb ~2GB | |_lock.mdb |_test2 |_data.mdb ~2GB |_lock.mdb
我希望部分库设置为100MB、部分为20MB,但不想创建多个Arctic实例(会生成独立的arctic_cfg,交互麻烦)。
解决方案
你可以通过create_library方法的lmdb_config参数,为每个库单独指定LMDB的配置(包括map_size),无需创建多个Arctic实例,所有库会共用同一个arctic_cfg目录。
修改后的代码:
from arcticdb import Arctic import os from os.path import getcwd # 创建全局Arctic实例,无需在URL中指定map_size(或设为默认值) db_path = os.path.join(getcwd(), 'database') ac = Arctic(f"lmdb://{db_path}") # 创建test1库,设置map_size为100MB(单位:字节) ac.create_library('test1', lmdb_config={'map_size': 100 * 1024 * 1024}) # 创建test2库,设置map_size为20MB ac.create_library('test2', lmdb_config={'map_size': 20 * 1024 * 1024})
说明
- 初始Arctic连接URL中指定的
map_size会作为所有新建库的默认值,通过lmdb_config传入的参数会覆盖该默认值。 map_size的单位是字节,需手动转换(1MB = 1024*1024字节),也可以用2**30这类写法表示1GB。- 该方式下所有库共享同一个
arctic_cfg,避免了多实例交互的麻烦。
内容的提问来源于stack exchange,提问作者AAM
相关产品推荐
相关产品推荐

