2

我有一个使用 OrientDB 作为持久层的应用程序并取得了巨大的成功,我在考虑实施审计跟踪时遇到了一个十字路口。

IMO 审核应包括 4 个核心属性:

  • 时间戳(动作发生的时间)
  • 演员(执行动作的实体)
  • 目标(被操作的实体)
  • 操作(这可以由许多子部分组成,例如前后状态、描述等,具体取决于您的要求。)

一方面,各种实体之间的这种类型的关系非常适合图形数据库。另一方面(同样是 IMO)图形数据库在时间上并不是非常装备/易于操作。

我现在在两个想法之间左右为难:

创建时间序列

基本上,这个想法是在数据库中创建一个级联时间序列,表示分段顶点节点中的时间。

在此处输入图像描述

我将创建一个Audit包含我的所有可操作属性的顶点,然后我将在 the和最近的时间顶点节点之间、在和 之间以及在和 之间创建Edge关系。AuditAuditActorAuditTarget

在此处输入图像描述

建立直接关系

时间序列增加了需要考虑的复杂程度。假设审计需要通过 3 个根标准进行搜索;由和时间Actor_ 因为时间几乎总是一个要求,它确实使时间序列成为一个有吸引力的解决方案。把过去 30 天的一切都给我TargetAudit

但是,如果我想搜索一个查询,该查询与过去 30 天的Get me all the行一致,Audit其中 john 是Actor. 可以想象,我可以忽略时间关系,只使用EdgetoActorTarget时间戳创建审计。

在此处输入图像描述

或者时间戳也可能是 的属性Edge

时间序列真的有任何优势,还是我只是增加了不必要的复杂性?在图形数据库中审计事件是否有更好的已经被接受的做法?

4

1 回答 1

0

使用时间序列图会很有意义,尤其是当您使用它来保存预先计算的聚合数据时。这样,像“给我最近三个月的操作次数”这样的聚合查询将是一个非常有效的操作。

在这里你可以找到一些关于这个http://www.slideshare.net/LuigiDellAquila/orientdb-time-representation的例子

于 2015-10-09T14:38:21.623 回答