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

Azure Cosmos DB是多模型的,这意味着什么?,azure,azure-cosmosdb,nosql,Azure,Azure Cosmosdb,Nosql,看着新的Azure cosmos数据库,我对它的多模型特性有点困惑。具体而言,这是否意味着: a) 相同的底层数据库/存储可以以多种方式并发查询,这样我就可以对相同的集合使用gremlin graph查询和mongodb api 或 b) 这是否意味着您可以在配置Cosmos DB时选择不同的模型(图形、键值、列、文档),从那时起,数据将以这种方式存储 小册子让它听起来像a),但使用Azure仪表板创建cosmos实例让它看起来像b),因为您必须在创建时选择模型类型 此外,文献中提到了柱状数

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

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

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

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


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

Cosmos DB是一个单一的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构建应用程序,并从经过战斗测试、完全管理、全球分布的数据库服务中获得所有好处。

公认的答案在某些方面是错误的

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

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

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

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


因此,也许最终它可以归结为
GlobalDocumentDb
MongoDb

宇宙数据库的核心是一个地理分布的数据库,它有自己的原子记录序列存储引擎和索引。在这个基础设施之上,我们能够实现许多不同类型的存储,从使用我们的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,只是请不要向表API帐户写信起诉SQL API客户端。

我对此也很感兴趣,希望从API使用审核的角度了解更多内容,并通过这些答案了解更多阅读内容

经过实验,事情似乎比原来的进展得更远