我正在使用 milvusDB 并寻求提供订阅模型,并面临提供有效的方法来提供数据访问控制。
我计划在 Milvus 建立一个藏书,总共包含 1,000 本书。我的目的是提供三个级别的访问权限:白银级、黄金级和高级级。白银级订阅者最多可以访问 100 本书,黄金级订阅者的限制为 500 本书,高级订阅者将有权访问所有书籍的完整收藏。
我目前正在探索实现这种结构的方法,但遇到了挑战。在考虑集合内的多租户和分区时,我意识到这些方法可能会导致不必要的数据重复。
我将非常感谢任何有关如何有效设置该系统的帮助或建议。
不确定这是否是最佳解决方案,但我会向架构添加一个字段来定义实体的访问级别。假设该字段的类型为 Integer,有 3 个可用值:
我将按如下方式创建集合:
from pymilvus import (
connections,
utility,
FieldSchema, CollectionSchema, DataType,
Collection,
)
connections.connect(
alias="default",
host="localhost",
port="19530",
)
fields = [
FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="access_level", dtype=DataType.INT8),
FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=512)
]
collection = Collection("books")
最后,在搜索过程中,我们传递进行搜索的用户的访问级别:
def search_books(query_embedding, access_level: int):
collection.search(
data=[query_embedding],
anns_field="embeddings",
param={"metric_type": "IP"},
expr=f"access_level <= {access_level}"
)