Avn*_*evy 5 gremlin amazon-neptune
我是海王星的新手。在 Neptune 数据库中支持多租户的最佳方式是什么?
要求:
1. 支持数据库中的数千个租户(一个集群)
2. 通过租户过滤避免查询变得过于复杂
3. 良好的性能(如果有一种方法可以使用数据分区来加快查询时间)
4. 安全 -很难犯错误,从而导致跨租户访问。
在非生产环境中,Gremlin 分区策略对我来说已经足够了。顶点和边共存于同一个 Gremlin 集群中,它们具有区分它们的属性,在我的例子中,我使用了一个_env属性。
然后,在我的 Java 代码中,每次我从工厂请求遍历时,它都会使用分区策略。
private GraphTraversalSource buildReadOnlyTraversal() {
log.debug("building read-only traversal");
return AnonymousTraversalSource.traversal()
.withRemote(DriverRemoteConnection.using(getReadOnlyCluster()))
.withStrategies(buildPartitionStrategy(), buildReadOnlyStrategy());
}
private PartitionStrategy buildPartitionStrategy() {
var env = this.properties.getEnvironmentPartition();
log.info("building partition strategy for environment={}", env);
return PartitionStrategy.build()
.partitionKey(ENVIRONMENT_PARTITION_KEY)
.writePartition(env)
.readPartitions(env)
.create();
}
Run Code Online (Sandbox Code Playgroud)
使用这些遍历将自动将范围限定到您的分区。然而,最大的问题是,您需要记住在从控制台查询时手动添加对分区的引用(实际上是不使用分区策略机制的任何内容),例如
g.V().hasLabel('user').has('_env', 'dev')
我认为这符合您的前两个标准,我无法真正评论性能。第 4 点,是的,这不是应用程序代码的问题,手动修改图表时更容易出现错误。
| 归档时间: |
|
| 查看次数: |
2692 次 |
| 最近记录: |