database - 在 Graph 数据库中执行软删除的最佳方法是什么?
问题描述
在 Graph 数据库中使用时间戳(开始日期和结束日期)实现软删除的最佳方法是什么?
解决方案
好吧,根据时间戳来隐藏遍历是相当简单的。以这个示例图为例,“ts”是一个以长表示的模拟时间戳:
gremlin> g.addV('person').property('name','alice').as('a').
......1> addV('person').property('name','bob').as('b').
......2> addV('person').property('name','claire').as('c').
......3> addE('interacted').property('ts', 125).from('a').to('b').
......4> addE('interacted').property('ts', 126).from('a').to('b').
......5> addE('interacted').property('ts', 127).from('a').to('b').
......6> addE('interacted').property('ts', 126).from('b').to('c').
......7> addE('interacted').property('ts', 150).from('b').to('c').
......8> addE('interacted').property('ts', 151).from('a').to('b').iterate()
您可以简单地编写 Gremlin 来解释“ts”:
gremlin> yesterday = 130
==>130
gremlin> g.V().has('person','name','alice').
......1> outE('interacted').has('ts',gt(yesterday)).inV().
......2> values('name')
==>bob
根据您要求的复杂性,在“ts”上添加此过滤器可能会变得繁琐并使您的代码混乱。如果是这种情况,可能SubgraphStrategy
会有所帮助:
gremlin> sg = g.withStrategies(SubgraphStrategy.build().edges(has('ts',gt(yesterday))).create())
==>graphtraversalsource[tinkergraph[vertices:3 edges:6], standard]
gremlin> sg.V().has('person','name','alice').out('interacted').values('name')
==>bob
gremlin> g.V().has('person','name','alice').out('interacted').values('name')
==>bob
==>bob
==>bob
==>bob
推荐阅读
- azure - 如何在删除文件任务中排除某些目录和文件的删除
- python - 在 CSV 文件中选择具有相同标题的特定列并输出到新的 csv
- excel - 如何从 Excel 中的数据模型解决电源查询中的数据重复问题
- c# - ASP.NET MVC5 提示 Windows Auth 忽略身份验证模式
- c# - 通过 C# 错误处理安装 TopShelf 服务
- javascript - 如何获取在 AngularJS 代码中看到的 Angular 8 组件中声明的类类型?
- reactjs - 从 React 应用程序中的本地文件加载任何类型的数据
- php - (Mysql + PHP)如何替换表中每一行的值
- java - Selenium - Geckodriver (Firefox) 加载解压扩展
- linq - EF Core 3 中带有 linq 查询的外部联接不起作用