如何使用 GUID 从 SQL 服务器 table 引用 Azure table 数据

How to reference Azure table data from a SQL Server table using a GUID

我想使用 SQL 服务器和 Azure table 在我的网站上实现聊天功能。

我想在我的 Azure SQL 数据库中存储聊天元数据(例如谁在与谁交谈以及何时交谈等),并在 SQL 服务器中保留聊天的 GUID,但是存储在 Azure Table.

中的聊天的实际文本

那么,这将如何运作?

读完 Azure tables 后,我应该

  1. 在 SQL 服务器中存储一个 GUID,代表我的 Azure table?

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

  3. ????

通常这会起作用。

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

  • 分区键可以是 GUID。但也许用户 A 和 B 的 id 的哈希值会更好。然后你仍然可以通过分区键检索,但没有必要将它存储在任何地方。
  • 是的,您仍然需要 rowkey,因为这是记录的主键。分区键只是某些记录的分组。
  • 分区键没有限制 - 通常应该是经常重复出现的东西,但 should/may 有成千上万个

2 - 数十亿条记录仍然如此,这取决于您决定如何存储聊天消息(存储每个聊天行或每隔 x 分钟或...)。但我仍然建议使用分区键之类的东西。

SQL Server 2016 和 Azure SQL 有一个名为 'Column Store Indexes' 的功能,它极大地改进了查询并优化了写入磁盘的数据大小(不幸的是,这仅适用于 P1 层在 Azure 中)

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

我相信你有充分的理由,但你想为此使用三种不同的存储类型有点奇怪。单一存储类型是否可以(SQL、Azure SQL、Azure Table 存储、Cosmos Db、..)?