我有一个使用 OrientDB 作为持久层的应用程序并取得了巨大的成功,我在考虑实施审计跟踪时遇到了一个十字路口。
IMO 审核应包括 4 个核心属性:
- 时间戳(动作发生的时间)
- 演员(执行动作的实体)
- 目标(被操作的实体)
- 操作(这可以由许多子部分组成,例如前后状态、描述等,具体取决于您的要求。)
一方面,各种实体之间的这种类型的关系非常适合图形数据库。另一方面(同样是 IMO)图形数据库在时间上并不是非常装备/易于操作。
我现在在两个想法之间左右为难:
创建时间序列
基本上,这个想法是在数据库中创建一个级联时间序列,表示分段顶点节点中的时间。
我将创建一个Audit
包含我的所有可操作属性的顶点,然后我将在 the和最近的时间顶点节点之间、在和 之间以及在和 之间创建Edge
关系。Audit
Audit
Actor
Audit
Target
建立直接关系
时间序列增加了需要考虑的复杂程度。假设审计需要通过 3 个根标准进行搜索;由和时间。Actor
_ 因为时间几乎总是一个要求,它确实使时间序列成为一个有吸引力的解决方案。把过去 30 天的一切都给我。Target
Audit
但是,如果我想搜索一个查询,该查询与过去 30 天的Get me all the行一致,Audit
其中 john 是Actor
. 可以想象,我可以忽略时间关系,只使用Edge
toActor
和Target
时间戳创建审计。
或者时间戳也可能是 的属性Edge
!
时间序列真的有任何优势,还是我只是增加了不必要的复杂性?在图形数据库中审计事件是否有更好的已经被接受的做法?