我有一个后端 Spring 应用程序和 Orientdb 图形数据库。我使用 Tinkerpop Frames 将 orientdb 顶点映射到 java 对象,并使用 OPS4J 进行 spring 事务管理。现在我想在那里实现一个多租户,其中几个客户(租户)使用这个应用程序实例。该应用程序完全按照 REST 原则运行,并且对多个 Angular 应用程序开放——每个应用程序每个客户。因此,前端 Angular 应用程序与我们的客户一样多,而后端 REST Spring 应用程序只有一个。后端从 HTTP 请求中识别租户。
现在我不确定最好的解决方案......
第一个解决方案
当我阅读 Orientdb 文档时,我发现了一种如何在 orientdb 中实现多租户的方法 - http://orientdb.com/docs/2.1/Partitioned-Graphs.html。但是我不知道如何通过 Java API 使用它,除非我不想为每个请求创建一个新的数据库连接。因为现在 Spring 事务管理器从连接池中获取连接,连接池是在 Spring 事务管理配置中集中设置的。我没有找到任何 Java 示例。
Spring事务管理配置:
@Configuration
@EnableTransactionManagement
public class TransactionConfig {
@Bean
@Qualifier("graphDbTx")
public OrientTransactionManager graphDbTransactionManager() {
OrientTransactionManager bean = new OrientTransactionManager();
bean.setDatabaseManager(graphDatabaseFactory());
return bean;
}
@Bean
public OrientBlueprintsGraphFactory graphDatabaseFactory() {
OrientBlueprintsGraphFactory dbf = new OrientBlueprintsGraphFactory();
dbf.setMaxPoolSize(6);
dbf.setUrl(DbConfig.DATABASE_URL);
dbf.setUsername("admin");
dbf.setPassword("admin");
return dbf;
}
@Bean
public FramedGraphFactory framedGraphFactory() {
return new FramedGraphFactory(new JavaHandlerModule());
}
}
获取连接:
protected FramedGraph<OrientGraph> framedGraph() {
return framedGraphFactory.create(gdbf.graph());
}
第二种解决方案
另一种解决方案是使用 Tinkerpop
分区图
在 Orientdb 上工作的类,但我在 Orientdb 文档中没有找到任何关于这种可能性的句子。就在 Tinkerpop 中 - https://github.com/tinkerpop/blueprints/wiki/Partition-Implementation。它可以工作,但最后它只是在每个 orientdb 顶点中创建一个未索引的属性,所以我担心这里的查询性能。
有没有人有这方面的经验?有什么建议吗?