数据库分片和 JPA

Posted

技术标签:

【中文标题】数据库分片和 JPA【英文标题】:Database sharding and JPA 【发布时间】:2012-11-20 06:08:25 【问题描述】:

我正在开发一个 Java 应用程序,该应用程序在不同的 PostgreSQL 服务器中需要 horizontal partitioning of data。我想使用 JPA 框架和 Spring 进行事务管理。

最流行的使用 JPA 分片数据的框架似乎是 Hibernate Shards,它似乎不再处于开发阶段,以及 OpenJPA Slice,它不支持虚拟分片(我的要求之一)。有没有我遗漏的其他选项,或者有办法绕过 OpenJPA 限制?

提前感谢您的意见!

【问题讨论】:

能否详细说明“虚拟碎片”? 嗨欧宾。基本上,虚拟(或逻辑)分片是不驻留在单独服务器中的分片,而是位于具有某种边界的同一服务器上,例如在单独的架构中。 Hibernate 的带分区的多租户不支持您的用例吗? @dinukadev - 我刚刚遇到了 Hibernate 多租户,我正在调查它。另一种可能的解决方案是使用 OpenJPA Slice,并为每个模式使用不同的用户,并使用不同的默认搜索路径。 你怎么知道它不支持虚拟分片?看起来每个切片都是由可以指向同一台机器的 jdbc 连接属性定义的。 【参考方案1】:

您是否研究过 EclipseLink?它支持JPA2和水平分片。

documentation 表示它支持对多个数据库实例进行分片

【讨论】:

【参考方案2】:

你可以看看Sharding-JDBC,它是一个分片数据库和表的JDBC驱动,可以适配任何ORM框架。

【讨论】:

以上是关于数据库分片和 JPA的主要内容,如果未能解决你的问题,请参考以下文章

数据库分片和 Rails

MongoDB:分片(简介 & 自动分片 & 片键)

tcp分片和ip分片的区别

MongoDB分片群集(实现分片服务启用分片服务管理单点故障模拟)

实体框架和分片数据库

MongoDB分片群集