AWS Neptune 数据库中的多租户

Avn*_*evy 5 gremlin amazon-neptune

我是海王星的新手。在 Neptune 数据库中支持多租户的最佳方式是什么?
要求:
1. 支持数据库中的数千个租户(一个集群)
2. 通过租户过滤避免查询变得过于复杂
3. 良好的性能(如果有一种方法可以使用数据分区来加快查询时间)
4. 安全 -很难犯错误,从而导致跨租户访问。

Jam*_*der 0

在非生产环境中,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 点,是的,这不是应用程序代码的问题,手动修改图表时更容易出现错误。