如何使用GUID从SQL Server表引用Azure表数据

时间:2018-11-02 01:35:11

标签: sql-server asp.net-mvc azure azure-table-storage

我想同时使用SQL Server和Azure表在网站上实现聊天功能。

我想在我的Azure SQL数据库中存储聊天元数据(例如,与谁交谈的人以及何时等等),还希望在SQL Server中保留聊天的GUID,但是将聊天的实际文本存储在Azure表中

那么,这将如何工作?

在阅读了有关Azure表的信息后,我应该

  1. 在SQL Server中存储一个GUID,它代表我的Azure表中的分区键吗?

    • 以便用户A和用户B之间的所有聊天都具有相同的GUID /分区?
    • 然后我可以按日期过滤分区提取所有消息!
    • 在这种情况下我需要使用行键吗?
    • 分区上有限制吗,如果我最终有数千甚至上百万个分区怎么办?
  2. 为每条消息存储一个GUID,将除实际消息内容之外的所有内容存储在SQL Server中,因此可能导致数十亿行用于所有聊天。在这种情况下,我想我只会使用/需要1个分区?

  3. ????

1 个答案:

答案 0 :(得分:2)

通常这将起作用。

1-是的,应该使用可重复的,唯一标识的密钥作为分区密钥

  • 分区键可以是GUID。但是,也许用户A&B的ID的哈希值会更好。然后,您仍然可以通过分区键进行检索,但是不必将其存储在任何地方。
  • 是的,您仍然需要行键,因为这是记录的主键。分区键只是某些记录的分组。
  • 分区键没有限制-通常应该是经常出现的分区键,但随后应该/可能是数千个

2-数十亿条记录仍然会发生,这取决于您决定存储聊天消息的方式(存储每条聊天行或每隔x分钟或……)。但是我仍然建议使用分区键之类的东西。

SQL Server 2016和Azure SQL具有称为“列存储索引”的功能,该功能极大地改善了查询并优化了写入磁盘的数据大小(不幸的是,此功能仅在Azure的P1层可用)

您是否考虑过使用Cosmos Db-吞吐量会更好。那就是如果您将有很多流量。 Cosmos Db速度非常快,如果您使用分区集合,那么您将拥有相同的功能和无限的存储空间。

我确定您有充分的理由,但是您要为此使用三种不同的存储类型有点奇怪。不会是一种存储类型(SQL,Azure SQL,Azure表存储,Cosmos Db等)吗?