MongoDB 3.2中的最新功能 第一部分:使用可插拔存储引擎拓展应用场景

MongoDB 3.2 目前正式发布,并且可用于生产部署!它是一个名副其实的“重大”版本:它将之前更多的功能和改进都进行了打包。这个博客系列的三个部分致力于帮助您了解所有新的功能,并且提供帮助您开始使用MongoDB 3.2最重要的资源:

  • 第一部分 介绍了新存储引擎的可用性,并且展示了运用MongoDB 3.2 的新应用场景。
  • 第二部分讨论了为支持任务关键型应用而设计的新功能,包括文档验证和改进的复制协议。
  • 第三部分总结了为支持使用MongoDB的数据分析师、数据库管理员及运维团队而设计的新工具和集成。

如果你现在想进一步了解MongoDB 3.2 提供的详细功能,请下载 新功能白皮书

基于MongoDB的新应用场景

对于构建日益复杂、数据驱动型应用的开发者而言,不再存在一种“通用的”数据库存储技术,能够以最佳的方式实现业务需要的各种类型应用。现代应用需要支持大量不同读取模式、安全需求以及性价比特征的服务:从高吞吐的内存操作、到实时分析,再到管理高度敏感的数据。

32_storage_engines-18c202029e

图1 在一个单一的MongoBD复制集中混合和匹配存储引擎

MongoDB 3.2引入了一个新的灵活存储架构,使得MongoDB和生态系统可以快速简单地构建新的可插拔存储引擎,使用新功能扩展数据库,并且对MongoDB进行配置以满足特定的工作负载需求。除了3.0版本支持的两个原始存储引擎,MongoDB 3.2向混合版本中添加了两个新选项。支持的存储引擎包括:

  •  默认的WiredTiger存储引擎:对于许多应用而言,WiredTiger的更细粒度的并发控制和原生的压缩功能将会为最大范围的应用提供最全面的性能和存储效率。
  • MMAPv1引擎,MongoDB 3.x之前版本中使用的存储引擎的改进版本。
  • 新增:加密存储引擎,保护高度敏感数据,避免了单独文件系统加密带来的性能影响或管理支出。
  • 新增:内存存储引擎,为大部分实时分析要求最高的应用提供绝佳的性能和可预测的延迟。

MongoDB创造性地允许用户在一个单一的MongoDB集群中混合和匹配存储引擎。这样的灵活性提供了一个更简单和可靠的方法来满足不同应用对数据的需求。传统地,需要管理多项数据库技术来满足这些需求,为了保证一致性和安全读取,需要使用复杂的、定制的集成代码在数据库之间移动数据。

通过使用MongoDB灵活的存储架构,数据库使用本地复制自动管理不同存储引擎技术之间的数据移动。与运行多个不同数据库技术相比,该技术明显地降低了开发人员和运维人员的复杂性。用户可以在应用的不同部分之间使用相同的MongoDB查询语言、数据模型、安全性、运维工具,并且配置最合适的存储引擎。

新的MongoDB默认存储引擎:WiredTiger

MongoDB 3.2目前使用WiredTiger作为其默认的存储引擎。与之前MongoDB版本中使用的原始MMAP存储引擎相比,WiredTiger更颗粒化的并发控制及本地压缩在降低高达80%存储支出的同时,还提高了7-10倍性能。WiredTiger对广泛的操作型应用而言是非常理想的选择,因此将其作为默认的存储引擎。

新的MongoDB加密存储引擎

数据泄露的频率和严重程度逐年增加。PWC的报告表明:2014年中的每一天,信息系统都会遭受超过117,000次攻击,这数据意味着比前一年增加了48%。由于数据库存储着一个公司最重要的信息资产,保证它们的安全是管理员们最关注的地方。

通过使用先进的身份验证、授权、审核以及网络加密安全控制,MongoDB被广泛用于受监管的行业,例如商业、零售、医疗保健、教育以及政府部门。然而,保护静态存储在持久存储中的数据要求要么在应用级别实现加密,要么通过外部文件系统和磁盘加密解决方案进行加密。通过向栈中引入额外的技术,两种方法都将会增加成本和复杂度。

32_encrypted-efab468afb

图2: 端对端加密-运行中的数据和静态数据

通过加密存储引擎的导入,静态数据的保护现在已经成为数据库的组成要素。对原始数据库中的“明文”内容需要使用一个算法进行加密,该算法主要选取一个随机加密秘钥作为输入然后生成密文,只有使用加密秘钥解密才能够读取原始数据。这个过程对应用是完全透明的。MongoDB支持大量加密模式,其中使用CBC模式中的AES-256(256位秘钥)作为默认模式。同时也支持GCM模式中的AES-256。该加密模式可以配置为FIPS 140-2依从。

存储引擎使用一个单独的密钥对每个数据库进行加密。MongoDB中的密钥封装模式 对每台服务器使用一个外部的主密钥和所有单个内部数据库密钥进行封装。加密引擎支持两个密钥管理选项-在两种情况下,在MongoDB外管理的唯一密钥是主密钥:

  • 通过一个密钥文件进行本地密钥管理
  • 通过KMIP协议与第三方密钥管理应用集成(推荐)

大部分安全法规需求都要求每年必须至少一次使用新的密钥对加密密钥进行轮换。MongoDB可以通过复制集的依次重启在没有任何宕机时间的情况下实现密钥轮转。在使用一个KMIP应用时,数据库文件本身不需要被重新加密,因此避免了在另一个数据库中密钥轮换而带来的重大性能支出。只有主密钥轮换时,内部数据库的密钥库会被重新加密。

加密存储引擎基于WiredTiger,因此保证了运维效率以及性能:

  • 文档级别的并发控制和压缩
  • 支持Intel配备AES-EI指令集的CPU,用于加速加密/解密进程
  • 文档被修改时,只需要加密更新的存储块,而不是整个数据库

根据用户测试,加密存储引擎将性能上的额外开销最小化到大约15%(可能会根据被加密的数据类型变化),这远远低于一些文件系统加密解决方案中可见的支出。

MongoDB企业高级版中提供了加密存储引擎。查阅文档了解更多,并且可以查看如何配置存储引擎相关教程。下载MongoDB安全架构指南以了解所有MongoDB安全控制的概述。

MongoDB中灵活的内存计算

内存计算的优势不言而喻。RAM中读取数据的速度比从磁盘取回快将近100,000倍,从RAM读取数据为要求较高的应用提供量级的性能提高。相关的案例就包括:个性化产品推荐中,用户浏览网页时的实时重新评分,以及对市场事件及时响应的股票交易。

除了增加基于WiredTiger的新内存引擎,MongoDB用户现在也可以在不牺牲大量查询灵活性、实时分析、可扩展能力以及传统基于磁盘数据库提供的持久性保障的前提下,实现内存计算的性能优势。

32_engine_mix-93a2a719a2

图三: 使用MongoDB可插拔存储引擎允许单一的数据库运行多个应用

存储引擎灵活性优势拓展了单一应用的界限。不像过去现代应用经常使用单块的代码库包括多个服务、每项服务有独特的数据读取模式以及性能档案,MongoDB的存储架构允许用户根据每项服务的需求进行优化。正如图三中展示的电子商务案例所示,通过内存引擎管理用户数据,以提供一流用户体验必备的吞吐和有限延迟。然而,产品目录的数据存储需求超过了服务器的内存容量,因此提供了另一个配置有基于磁盘、WiredTiger存储引擎的MongoDB复制集。

在这个案例中,MongoDB灵活的存储架构意味着开发者可以免于不得不使用不同的基于内存和基于磁盘的数据库来支持电子商务应用的复杂性。管理员免于不得不配置和管理单独数据层的复杂性,这个应用使用相同的MongoDB数据库,为每项服务提供了对应用场景而言最佳的存储引擎。

内存存储引擎是MongoDB企业高级版的一个部分。目前处于beta测试阶段,预计将于2016年早期正式发布。

下一步

上面就是我们博客系列第一部分的全部内容。注意:您现在可以通过下载最新功能白皮书来详细了解MongoDB 3.2提供的所有功能。

或者,如果您已经阅读了足够多的相关资料,希望马上开始编码,您可以:

为了尽可能快速高效地开始使用MongoDB 3.2,可以考虑咨询专家。MongoDB的咨询工程师可以根据您的需要提供3.2功能方面的私人培训,然后与您一起合作为您的部署制定一个个性化的升级计划。感兴趣吗?那就快点联系我们吧(ianfa.tang@mongodb.com)。

关于作者-Mat Keep

Mat是MongoDB产品市场部总监,主要负责MongoDB产品及服务的愿景、定位及内容构建,包括市场趋势和客户需求分析。在进入MongoDB之前,Mat是Oracle公司的产品经理总监,负责互联网、电信、云以及大数据工作负载上的MysQL数据库,带领着来自技术供应商和终端用户公司的一系列销售人员、业务开发人员、分析师/程序员。

翻译:周颖敏

审稿:TJ

本文译自:https://www.mongodb.com/blog/post/what-s-new-in-mongodb-3-2-part-1-extending-use-cases-with-new-pluggable-storage-engines

发表评论