【问题标题】:Is a SQL Azure Table similar to an Azure Cosmos DB Container?SQL Azure 表是否类似于 Azure Cosmos DB 容器?
【发布时间】:2020-01-31 13:22:34
【问题描述】:

我正在使用 Cosmos DB SQL API。但我很困惑如何将现有的 SQL DB 迁移到 Azure Cosmos DB。

是一个类似于 Cosmos DB 容器的 SQL 表。还是我们需要将所有 SQL 表数据存储到一个具有不同 Partition key 的容器中?

【问题讨论】:

标签: azure-cosmosdb azure-cosmosdb-sqlapi


【解决方案1】:

Cosmos DB 数据迁移工具可用于将数据从 SQL Server 导入 Cosmos DB。参考这个link

Cosmos DB 容器与 SQL Server 表不同。可以将数据库中多个表中的数据导入单个 Cosmos DB 容器。

【讨论】:

  • 感谢 BOB 的评论,能否请您帮助理解将 Azure SQL 迁移到 Cosmos DB。我的理解是,SQL 表中的一行就像 Cosmos DB 中的 Document(Item),我们应该将 COSMOS DB 迁移为一个项目的所有 SQL 表行(1 个 SQL 表行 = Cosmos DB 中的文档或项目),如何我在 COSMOS DB 中对表数据进行分组,我们是否需要在 COSMOS 中创建的 Document 中也添加表名或分区键用于隔离?
  • @AkhilTyagi 对于没有关系的更简单的表,可以将 sql 表行直接转换为 cosmos db json 文档。您可以添加一个名为 type 的附加属性来识别对象类型(例如 type = Customer,如果它来自 Customer 表)。对于在多个表中具有关系数据的复杂类型,例如客户地址,您需要嵌入/引用地址对象。详细了解可以参考这个微软链接docs.microsoft.com/en-us/azure/cosmos-db/modeling-data
  • 感谢一百万 @BOB,您的 cmets 对理解有很大帮助。
  • 我会说逻辑上 Container is 类似于 table 和 item to row。我的意思是,您当然可以将多个关系(跨不同表的相关行)放入容器中的一项中,但也可以将数据迁移到其他基于 sql 的数据库,从而从源数据库中的多个表中生成单个表。因此,从技术上讲,您可以将容器作为表迁移到容器,将项目作为行迁移,只是它们之间存在多个关系会使查询变得更加困难,因此考虑将一些紧密相关的表连接到一个容器中是很重要的。
【解决方案2】:

不要被名字所迷惑。 Cosmos DB SQL API 不允许您像使用关系数据库一样使用 Cosmos DB。

它本质上是一个 JSON 文档数据库,用于将项目存储在容器中。它是无模式的。虽然您可以按照某种方式导入数据(如 @Bob 链接的那样),但您最终不会得到关系表 - 它都是 JSON 文档。

SQL API 允许您使用类似 SQL 的语法来查询 JSON 结构 - 然而,语义都基于这些分层结构的文档,允许您返回 JSON 文档的数组或它们的投影。

查询总是在特定容器的上下文中运行

例如,您不能跨文档加入 - 您 use JOINs 可以在 个单独的文档中自行加​​入。有basic aggregation across documents,还有some limited grouping functionality

语义与 SQL Azure 大不相同;你需要换个思路。

【讨论】:

  • 感谢 James 的评论,能否请您帮助理解将 Azure SQL 迁移到 Cosmos DB。我的理解是,SQL 表中的一行就像 Cosmos DB 中的 Document(Item),我们应该将 COSMOS DB 迁移为一个项目的所有 SQL 表行(1 个 SQL 表行 = Cosmos DB 中的文档或项目),如何我在 COSMOS DB 中对表数据进行分组,我们是否需要在 COSMOS 中创建的 Document 中也添加表名或分区键用于隔离?
猜你喜欢
  • 1970-01-01
  • 2021-11-15
  • 2020-06-03
  • 2020-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-17
  • 2021-04-10
相关资源
最近更新 更多