当前位置: 首页 > 知识库问答 >
问题:

使用表存储的审计跟踪设计

赫连彬炳
2023-03-14

我正在考虑在使用表存储时为我的应用程序实现一个审计跟踪。

我需要能够记录一个特定客户的所有操作和来自该客户的实体的所有操作。

我的第一个猜测是为每个客户创建一个表(Audits_CustomerXXX),并使用实体id和行键(datetime.max.ticks-datetime.now.ticks).ToString(“D19”)值作为分区键。当我的问题是某个实体发生了什么时,这很有效?例如,购买的审计将使用PartitionKey=“purchases/12345”和RowKey作为时间戳。

但是,当我想从整个客户的鸟瞰视图时,我可以只查询表排序按行键跨分区吗?还是创建一个辅助表来保存不同分区键的数据更好?此外,当使用(datetime.max.ticks-datetime.now.ticks).ToString(“d19”)时,是否有一种方法可以防止在同一分区中的两个动作发生在同一tick中的错误(不太可能,但谁知道……)。

谢谢

共有1个答案

郁灿
2023-03-14

您当然可以为鸟瞰视图创建一个单独的表,但实际上不必这样做。考虑到Azure表是无模式的,您也可以将这些数据保留在同一个表中。您可以将partitionkey保留为反向刻度,将rowkey保留为实体ID。因为您将只查询PartitionKey,所以也可以将rowkey保留为GUID。这将确保所有实体都是唯一的。也可以将GUID附加到实体id并将其用作行键。

但是,请记住,因为您插入的是两个具有不同PartitionKey值的实体,所以您必须保护代码不受可能的网络故障影响,因为每个条目都是对表服务的单独请求。我们在应用程序中处理这一问题的方法是将该负载写入队列消息,然后通过后台进程处理该消息。

 类似资料:
  • 我正在finchley使用spring cloud。rc2和spring boot版本2以及sleuth和zipkin。 我有一个使用反应器项目的外观层。Facade调用服务并行,每个服务在Rabbit mq中存储一些跟踪信息。 问题是我在拉链金中看到一些跨度,如 我怎么能阻止这样的痕迹被捕获

  • 问题内容: 我正在尝试跟踪处理URL的脚本的内存使用情况。基本思想是在将另一个URL添加到cURL多处理程序之前,检查是否存在合理的缓冲区。我正在使用“滚动cURL”概念,该概念在多处理程序运行时处理URL数据。这意味着我可以在每次处理和删除现有URL时通过从池中添加新URL来保持N个连接处于活动状态。 我已经使用了一些积极的结果。添加该标志很有帮助(虽然并不清楚“系统”内存和“ emalloc”

  • 问题内容: 我只是想弄清楚Facebook的数据库如何构造用于跟踪通知。 我不会像Facebook这样深入研究复杂性。如果我们想象一个简单的通知表结构: 我们可以使用以下方式获取朋友的通知: 但是,应该使用什么表结构来检查已读取和未读取哪些通知? 问题答案: 我不知道这是否是执行此操作的最佳方法,但是由于我没有别人的想法,所以我会这样做。我希望这个答案也能对其他人有所帮助。 我们有2张桌子 这个想

  • 我随时都有一个“用户”表,如果插入、更新或删除了一行,那么我需要在“用户审核”表中插入一行,其中包含所有用户数据和操作列,以记录执行的操作。 我用的是Spring批处理,Spring数据JPA把数据插入用户表 我如何使用SpringDataJPA在SpringBatch中实现这一点,或者JPA/hibernate是否提供了任何实现?

  • 我正在尝试从Jmeter连接到Oracle DB,但我收到以下错误 java.sql.SQLException:无法创建PoolableConnectionFactory(ORA-09945:无法初始化审计跟踪文件Linux-x86_64错误:28:设备上没有剩余空间ORA-00604:递归SQL级别1发生错误ORA-12705:无法访问NLS数据文件或指定的环境无效) Apache Jeter

  • 问题内容: 我的同事在工作中提出了一个我无法回答的问题(由于缺乏经验),该问题与跟踪表中相关字段的变化有关。 想象一下,我们有3个表,每个表20个字段。在此示例中,我们考虑这些表中的每一个都有2个字段,一个名为LastUpdatedOn,另一个名为LastUpdatedBy。 如果我们只想跟踪这3个表中的更改,而只跟踪几个特定字段,而没有为每个表创建包含更新前最新版本的历史表,那么我们如何跟踪这些