【译】 安全智能:MongoDB EF Core 提供程序中的可查询加密和向量搜索

原文 | Rishit, Luce

翻译 | 郑子铭

本文由 Rishit Bhatia 和 Luce Carter 撰写。Rishit 是 MongoDB 的高级产品经理,专注于 .NET 开发人员体验,在转行产品管理之前,他曾多年从事 C# 的实践工作。Luce 是 MongoDB 的高级开发者布道师、微软 MVP,热爱代码、阳光和学习。本文已由微软 .NET 团队审核,适用于 EF Core。*

MongoDB Entity Framework (EF) Core 提供程序自 2024 年 5 月起正式发布。自发布以来,我们欣喜地看到 .NET 开发人员社区给予了积极的反馈,并且该提供程序在各种应用程序中得到了越来越广泛的采用。

该提供商使开发人员能够利用 LINQ 查询、更改跟踪和乐观并发等 EF Core 功能,将 MongoDB 无缝集成到他们的 .NET 项目中,同时利用 MongoDB 的灵活性和可扩展性。

我们持续增强提供程序的功能,新增了诸多特性,例如改进了对 MongoDB 特定操作的支持、优化了性能,并扩展了与最新 EF 版本的兼容性。这些更新体现了我们致力于为开发者提供强大、直观且可靠的方式,让他们能够使用 MongoDB 和 EF Core 构建现代应用程序的承诺。

我们很高兴地宣布两项新增的重大功能------可查询加密和向量搜索!这些功能让您可以直接通过便捷的 API 从 MongoDB EF Core 提供程序利用一些重要的 MongoDB 功能,而无需依赖底层的 .NET C# 驱动程序。

让我们先睹为快,看看它们长什么样。

MongoDB 可查询加密

可查询加密是一项突破性功能,它允许您加密 MongoDB 数据库中的敏感数据,同时仍然能够查询这些数据。这意味着您可以在不牺牲查询能力的前提下,维护强大的数据隐私和合规性。

对于医疗保健和金融等数据治理要求严格的行业来说,这一点尤其重要。

对于用户而言,这意味着更高的安全性、更低的数据泄露风险和更简化的合规工作,因为他们可以自信地对静态数据和传输中的数据进行加密,而无需重新设计应用程序架构来查询加密字段。

配置数据模型以定义加密属性DbContext非常OnModelCreating简单,如下所示:

复制代码
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Employee>(entity =>
    {
        entity.Property(e => e.TaxPayerId)
            .IsEncryptedForEquality(<Your Data Encryption Key GUID>));

        entity.Property(e => e.Salary)
            .HasBsonRepresentation(BsonType.Decimal128)
            // Salaries from 0 to 10 million, no decimal place precision
            .IsEncryptedForRange(0m, 10000000m, 0,
                <Your Data Encryption Key GUID>));              
    });
}

下面简要展示一下相等性查询和范围查询的工作原理:

复制代码
//Encrypted Equality Query
var specificEmployee = db.Employees.Where(e => e.TaxPayerId == "45678");

//Encrypted Range Query
var seniorEmployees = db.Employees.Where(e => e.Salary >= 100000m && e.Salary < 200000m);

完整的教程将向您展示如何使用 MongoDB EF Core 提供程序加密数据并进行查询。

MongoDB 向量搜索

向量搜索彻底革新了查找和分析非结构化数据的方式,它支持基于语义而非精确关键词的相似性搜索。这项功能由向量嵌入技术驱动,该技术将数据点(例如文本、图像或音频)表示为高维空间中的数值向量。

向量搜索的重要性在于它能够为人工智能应用(如推荐引擎、语义搜索和异常检测)开启新的可能性。

对于用户而言,这意味着更智能、更相关的搜索结果,能够直接在 MongoDB 数据上构建复杂的 AI 应用程序,以及更深入地了解其非结构化信息。

OnModelCreating以下代码块展示了如何轻松地在函数或数据模型类本身中设置带有向量嵌入字段的数据模型:

复制代码
//Inside the OnModelCreating function 
b.Property(e => e.PlotEmbedding)
   .HasElementName("plot_embedding_voyage_3_large")
   .HasBinaryVectorDataType(BinaryVectorDataType.Float32);

// OR In the data model definition for the property
[BinaryVector(BinaryVectorDataType.Float32)]
public float[] ? PlotEmbedding {get; set;}

完成上述配置并拥有运行向量搜索查询所需的适当向量索引后,使用您的数据运行查询就非常简单,如下所示:

复制代码
//Simple LINQ Vector Search query
var similarMovies = await db.Movies.VectorSearch(
        e => e.PlotEmbedding,
        myCustom.PlotEmbedding,
        limit: 10)
    .ToListAsync();

我们的完整教程中还介绍了更多功能,例如使用预过滤器运行向量搜索查询并预测其得分。

立即开始

MongoDB EF Core 提供程序现在允许您直接从提供程序使用 MongoDB 的标志性功能,例如可查询加密和向量搜索。

首先,您可以创建一个简单的 .NET 控制台应用程序,连接到MongoDB Atlas(MongoDB 的全托管云数据库服务)。之后,您可以使用 MongoDB EF Core 提供程序在应用程序中探索这些强大的功能。有关分步说明,请参阅快速入门指南

了解更多

要了解更多关于 EF Core 和 MongoDB 的信息:

不妨一试!此外,如果您想提升 MongoDB 技能并获得 Credly 认证的徽章,以便在 LinkedIn 上炫耀,何不试试Vector Search 徽章呢?

原文链接

Secure and Intelligent: Queryable Encryption and Vector Search in MongoDB EF Core Provider

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 (MingsonZheng@outlook.com)