当前位置: 首页 > 知识库问答 >
问题:

Azure Cosmos DB是多模型的,这意味着什么?

长孙兴德
2023-03-14

看着新的Azure cosmos数据库,我对它的多模型特性有点困惑。具体而言,这是否意味着:

a)相同的底层数据库/存储可以以多种方式并发查询,以便我可以对相同的集合使用gremlin图查询和mongodb api。

b)这是否意味着您可以在预配Cosmos DB时选择不同的模型(图、键值、列、文档),这就是从那时起存储数据的方式。

小册子让它听起来像a),但使用Azure仪表板创建cosmos实例让它看起来像b),因为您必须在创建时选择模型类型。

此外,文献中提到了柱状数据,但我在创建时看不到它的选项。

共有3个答案

施昊然
2023-03-14

公认的答案遗漏了一些要点。

COSMOSDB是一个NoSQL数据库,但它是高度分布式的,我们知道它的存储格式是Atom记录序列。

这有什么关系?我们知道,它接受JSON作为输入和输出格式,这并不意味着Cosmos将其数据存储为JSON,它实际上可以是任何格式。这有助于我们对Cosmos的多模型性进行推理:根据某个模型执行查询时得到的可能是数据的投影或视图。

@JesseCarter已经解释了我们可以互换使用文档API和图形API。上周,Table API被公开宣布,可能这个API也没有太大不同。

Spectologic的同事们写了一篇关于Cosmos的跨API使用的博客,他们还指出,多模型性更像是化妆品而不是内部结构,唯一真正的例外似乎是Mongo。有趣的部分在“切换门户体验”一章中指出:https://blog.spectologic.com/2017/06/30/digging-into-cosmosdb-storage/

所以说到底,它可以归结为GlobalDocumentDbMongoDb

秦城
2023-03-14

COSMOSDB的核心是一个地理分布的数据库,它有自己的原子记录序列存储引擎和索引。在这个基础设施之上,我们能够实现许多不同类型的存储,从使用我们的SQL API的类似SQL的存储到Mongo、Cassandra、Gremlin,再到Azure表存储的实现等等。

每种不同的存储类型都有自己的数据类型(例如编码数字、日期等的方式),并且在我们的存储和索引层中以自己的方式进行编码。随着时间的推移,我们希望这些数据类型中的大多数都能得到我们的SQLAPI的本地支持。但目前,我们的每种数据库类型都使用自己的编码约定。在Cosmos DB中创建帐户时(这是一个组织单位,用户可以有多个帐户),在帐户上指定数据库的“类型”。因此,您可以拥有一个TableAPI帐户或Mongo帐户,或者您拥有的其他帐户。

在某些情况下,可以使用API Y访问数据类型为X的帐户。例如,可以使用SQL API与表API帐户中的表对话。但在图表之外,这通常不是一个好主意。现在,我们用一种特殊的格式为每个API编码信息,不同的数据类型不会说出彼此的格式。因此,如果使用SQL API写入表API,最终结果很可能是损坏的数据。

唯一的例外是graph,我们努力工作以确保它在所有数据库类型中都能很好地工作,在将来我们将对此有更多的讨论。

因此,如果您确实想使用多API访问,我们强烈建议您在不使用给定帐户的“本机”API时,仅在“只读”模式下使用。换句话说,通过各种方式来处理从表API读取的SQL API,只是请不要使用SQL API客户端向表API帐户写入数据。

谢同化
2023-03-14

COSMOSDB是一个单一的NoSQL数据引擎,是文档数据库的发展。当您创建一个容器(“数据库实例”)时,您可以为您的用例选择最相关的API,它优化了您与下划线数据存储的交互方式以及数据如何持久保存到该存储中。

因此,根据所选择的API,它将所需的模型(图、列、键值或文档)投影到基础存储上。

您只能对一个容器使用一个API,但由于存储和检索数据的方式,不可能使用多个API。API规定了存储模型——图形、键值、列等,但它们都映射回了相同的技术。

感谢@Jesse Carter在下面的评论,您似乎能够混合和匹配graph和DocumentSQL API。

从文档中:

多模型、多API支持

Azure Cosmos DB本机支持多种数据模型,包括文档、键值、图形和列族。Cosmos DB数据库引擎的核心内容模型基于atom记录序列(ARS)。原子由一小部分基本类型组成,如string、bool和number。记录是由这些类型组成的结构。序列是由原子、记录或序列组成的数组。数据库引擎可以高效地将不同的数据模型转换和投影到基于ARS的数据模型上。Cosmos DB的核心数据模型可以从动态类型的编程语言本地访问,并且可以像JSON一样公开。

该服务还支持用于数据访问和查询的流行数据库API。Cosmos DB的数据库引擎目前支持DocumentDB SQL、MongoDB、Azure表(预览)和Gremlin(预览)。您可以继续使用流行的OSS API构建应用程序,并获得经过战斗测试和完全管理的全球分布式数据库服务的所有好处。

 类似资料:
  • 我想创建一个

  • 问题内容: 据说Javascript的主要优点之一是它是一种基于原型的语言。 但是,Javascript是基于原型的,这意味着什么?为什么这是优点? 问题答案: 原型继承 是一种面向对象的 代码重用形式 。Javascript是使用原型继承的仅有的[主流]面向对象语言之一。几乎所有其他面向对象的语言都是经典的。 在 经典继承中 ,程序员编写一个类,该类定义一个对象。可以从同一类中实例化多个对象,因

  • 问题内容: 如果有Type [],则只能在其中存储Type或其子类型。ArrayList也是如此。那么为什么说一个是同质的而另一个却不是呢? 问题答案: 数组对添加的元素的类型进行运行时检查。也就是说,如果添加了一个不同类型的新元素,则在运行时将引发。这就是为什么它们被认为是“本地的”。 对于s(通常是s)而言,情况并非如此。由于在运行时进行类型擦除,因此它实际上可以容纳任何对象。 运行时,以下内

  • 我刚刚浏览了一些代码,我看到了以下方法

  • 问题内容: 我从未见过这样的代码: 一样吗? 编辑 如果该类是继承的,它指向哪个类? 问题答案: 指向其编写所在的类。 因此,如果您的getInstance方法位于类名中,则以下行: 将做与: 编辑:评论后,还有更多信息。 如果您有两个相互扩展的类,则有两种情况: 在子类中定义 在父类中定义 第一种情况看起来像这样(在此示例中,我已经删除了所有不必要的代码-您必须将其重新添加来获得单例行为)*: