我正在考虑为我的应用程序实现使用表存储的审计跟踪。
我需要能够记录特定客户的所有操作以及该客户的实体的所有操作。
我的第一个猜测是为每个客户创建一个表(Audits_CustomerXXX),并将实体ID和行键用作分区键(DateTime.Max.Ticks - DateTime.Now.Ticks).ToString(" D19& #34;)价值。当我的问题是某个实体发生了什么时,这很有效?例如,购买审计将有PartitionKey =" Purchases / 12345"和RowKey作为时间戳。
但是当我想要从整个客户那里看鸟瞰时,我是否可以通过分区中的行键查询表格?或者更好的是创建一个辅助表来保存具有不同分区键的数据?此外,当使用(DateTime.Max.Ticks - DateTime.Now.Ticks).ToString(" D19")时,有一种方法可以防止同一分区中的两个动作发生在同一个滴答中时出现错误(不太可能但谁知道......)。
由于
答案 0 :(得分:1)
你当然可以为鸟瞰图创建一个单独的桌子,但你真的不必这样做。考虑到Azure表是无模式的,您也可以将这些数据保存在同一个表中。您可以将PartitionKey
保留为反向刻度,将RowKey
保留为实体ID。因为您只在PartitionKey上查询,所以您也可以将RowKey
保留为GUID。这将确保所有实体都是唯一的。或者,您可以将GUID附加到您的实体ID,并将其用作RowKey。
但是请记住,因为您要插入具有不同PartitionKey值的两个实体,您必须安全地编写代码以防止可能的网络故障,因为每个条目都是对Table服务的单独请求。我们在应用程序中处理此问题的方法是将此有效负载写入队列消息,然后通过后台进程处理该消息。