写点什么

Schema Free

作者:DashVector
  • 2024-11-07
    陕西
  • 本文字数:945 字

    阅读完需:约 3 分钟

Schema Free

向量检索服务 DashVector 在设计上支持 Schema Free,在插入 Doc、更新 Doc、插入或更新 Doc 时,可设置任意 KeyValue 结构的字段(Field),如下所示:Python 示例:


collection.insert(    Doc(        id='1',        vector=np.random.rand(4),        fields={            'name': 'zhangsan',             'weight':70.0,             'age':30,             'anykey1': 'anyvalue',             'anykey2': 1,            'anykey3': True,             'anykey4': 3.1415926            ... ...        }    ))
复制代码


说明


更多的 Fields 将消耗更多的资源(如内存、磁盘)

Field 支持的数据类型

当前 DashVector 支持 Python 的 4 种基础数据类型:


  • str

  • float

  • int

  • bool


重要


Python 的 int 类型可表达无限大小的整数,当前 DashVector 仅支持 32 位整数,范围为-2,147,483,648~2,147,483,647,需要用户自行保证数据未溢出。

检索时通过 Field 进行条件过滤

插入 Doc、更新 Doc、插入或更新 Doc 时所设置的任意 KeyValue 结构的字段(Field),可在检索 Doc 进行条件过滤,如下所示:Python 示例:


ret = collection.query(    vector=[0.1, 0.2, 0.3, 0.4],    filter='(age > 18 and anykey2 = 1) or (name like "zhang%" and anykey3 = false)')
复制代码


说明


更多的 Fields 在检索时将消耗更多的资源(如 CPU),同时复杂的 filter 表达式也将消耗更多的时间开销才能获取到结果

提前定义 Field Schema 的优势

在新建 Collection 的时候,可以预先定义 Field Schema,如下所示:Python 示例:


ret = client.create(    name='complex',     dimension=4,     fields_schema={'name': str, 'weight': float, 'age': int})
复制代码


这样做的主要收益有如下 3 点:


  • 更快的检索速度 :条件过滤时,用预先定义的 Field 将会有更短的时间开销和更少的 CPU 算力开销

  • 更少的内存、磁盘占用 :未预先定义的 Field,需要存储 Field 名称和 Field 值,而预先定义的 Field 仅存储 Field 值即可

  • filter 预校验 :条件过滤时,预先定义的 Field 会校验 filter 的语法,当遇到类型不匹配时,会快速失败、立即返回;而未预先定义的 Field,无法知道"正确"数据类型,无法进行预校验


通常而言,对于确定性的、大多数 Doc 都具有的 Field,建议在新建 Collection 时候预先进行定义;对于无法提前预知、仅少量 Doc 独有的 Field,可以在插入 Doc 时设置。


发布于: 刚刚阅读数: 3
用户头像

DashVector

关注

还未添加个人签名 2024-05-14 加入

向量检索服务DashVector基于通义实验室自研的高效向量引擎Proxima内核,提供具备水平拓展能力的云原生、全托管的向量检索服务。

评论

发布
暂无评论
Schema Free_人工智能_DashVector_InfoQ写作社区