Azure Blob 文件索引检索查询

        大家好,最近在跟客户/同事讨论中聊到关于如何对 Azure Blob (Azure Data Lake)中海量的对象存储数据进行检索查询,今天我们就来聊一聊如何对 Blob 数据进行文件索引检索查询。云对象存储的出现,其灵活的弹性和可扩展性,以及卓越的性价比,促使越来越多的场景开始使用云对象存储解决方案,从大数据场景到企业数据备份/存储场景,越来越多的开源软件和商业软件都支持云对象存储架构。由于对象存储区别于传统的文件存储系统,其原生不支持文件基于索引的检索查询,当用户将大量数据文件存放在对象存储时,如何管理这些文件建立数据目录(inventory)提供类似文件系统的索引检索查询成为很多用户面临的问题。今天就来为大家介绍一些微软云对象存储 Azure Blob 的文件索引检索查询解决方案。

       我们把文件索引检索查询的对象可以分为文件名,文件元数据,文件内容,对于不同的检索查询对象我们可以选择不同的方式进行支持。比如通常在文件名的索引查询上,用户会依赖于模糊查询的方式来找到匹配的文件。而文件元数据内通常是一些 Key Value 结构的数据,用户通常是通过自己定义标签逻辑来进行匹配查询。对于文件内容的搜索通常是全文搜索,以及内容类型上富媒体的支持(比如图片等)。对于上述不同的场景我们可以考虑不同的方式来进行实现。

场景 解决方案
Blob 文件名检索查询 RedisSearch/Elastic/Azure Search
Blob 元数据检索查询 Azure Blob Indexing/RedisSearch/Elastic/Azure Search
Blob 文件内容检索查询

Azure Search

        后面我们分别看一下每个场景下的解决方案,我们先来看一下 Blob 文件名和元数据检索查询场景,对于元数据检索场景,Azure Blob 服务原生支持在数据文件之上添加 Metadata,通过 Metadata 用户可以获得 Blob 文件的基础信息,通常 Metadata 都是通过 Key-Value 的方式存储,文件名场景我们可以理解为一个一维的 Metadata。比如我们设想一个电子书场景,每个 blob 文件为一个电子书文件,可以在 Metadata 内存存放电子书的作者、发行日期,类别和摘要信息等。在使用这些信息的时候,通常用户可能通过电子书的书名,作者,类别的信息来查询检索匹配的电子书名单。对于查询检索我们通常会有两种情况完全匹配和模糊查询, 对于完全匹配的明确查询用户需要准确的选择或者输入查询的 Key 值,然后查询检索系统进行完全匹配返回,但有些情况下对于用户输入的准确性是很难管控的,这个时候模糊查询就可以通过不完全匹配的方式来找到近似最优结果。在 Azure Blob 中原生提供了 Blob Indexing 功能,支持典型的 Key Value 检索查询,如果用户对于元数据的检索查询需求是完全匹配,Blob Indexing 是一个非常好的方式,客户不需要额外借助其他外部系统来构建文件查询索引。虽然 Blob Indexing 的方式虽然简单易用,但也有场景的限制,比如上面所述的模糊查询是无法通过 Blob Indexing 来做到的,目前 Blob Indexing 对于构建的 Key Value 都是按照 String 字符组数据类型来处理的,在查询检索时除支持等于匹配外也支持大于小于等匹配符,但由于 Value 按照字符串存储,所以对于大小匹配符的支持按照字母排序来进行比较,对于数字,日期等类型数据也是按照字符串来处理,所以对于大小匹配符的支持就会受限,同时对于数字类型数据的比较只支持第一个数字的比较(比如 11 和 12 比较,> 11 结果中不会有 12),如果用户有数字比较的场景,建议客户可以把数字拆分成多个0-9 位,创建多个 Key Value 索引来实现(需要注意目前 Azure Blob 单个文件上最多支持 10 个 Key Value)。所以如果用户希望对元数据做模糊查询,可以考虑通过 RedisSearch/Elastic/Azure Search 来构建外部查询索引,借助外部索引强大的搜索能力来进行支持,其中 RedisSearch 和 Azure Research 微软提供第一方的 PaaS 服务,可以方便用户快速构建查询索引平台。Azure Search 作为微软自研的搜索产品,其对于微软第一方的服务原生集成是最大的优势,客户可以通过简单的点击即可将 Blob 的数据信息导入到 Azure Search 中,另外 Azure Search 内的 AI 赋能可以增加对文件中富媒体内容的支持,这部分我们放在后面文件内容检索查询部分给大家单独介绍。RedisSearch/ElasticSearch 都是开源的索引查询产品,其中 RedisSearch 在微软云上的 Redis Enterprise Tier 已经原生支持,客户可以通过托管 PaaS 的方式快速创建使用,ElasticSearch 客户可以通过 Marketplace 购买使用。无论时 Azure Blob Indexing 还是外部查询索引系统(RedisSearch/ElasticSearch),用户都需要来实时的维护索引信息,当 Blob 文件进行增删改动作时,相应的需要对索引数据进行变更。整个系统架构的实现可以通过 EventGrid 来监听 Blob 的增删改动作,然后触发代码来进行索引的更新。对于索引变更的管理逻辑代码可以通过托管在 Azure Function 服务中,快速的实现事件触发的逻辑。用户侧的查询可以通过 Webapp 构建前端 GUI 层为用户提供访问。

        我们再来看一下 Blob 文件内容检索查询,相较文件名和元数据场景,文件内容检索涉及的数据类型,文件类型兼容性至关重要,当前富媒体内容的爆发内容的检索不仅限于文本,可以通过 AI 对富媒体内容进行识别标注,然后进行查询检索。微软云完整的认知服务套件,从文本,视觉,语音的全面支持可以帮助用户快速的数据赋能,Azure Search 内置集成了 Azure Cognitive 认知服务,可以快速的对各类富媒体内容进行识别标注,并将结果数据导入到 Azure Search 中支撑检索查询。对于 Azure 上各类数据源的原生集成帮助用户可以快速对接各类原数据,让用户事半功倍。

         通过上面三个场景的介绍大家应该对于 Azure Blob 的索引检索查询方案有了基本的了解,我会在后续几篇博客中为大家介绍上述几个方案的技术实现,敬请期待。

原文地址:https://www.cnblogs.com/wekang/p/13997917.html