Jas*_*ers 8 binary uuid hibernate jpa
我有一个基于Java/JPA/Hibernate/MySQL的应用程序.我想使用UUID进行对象标识,但是我想确保数据库性能不受影响.
我发现这个伟大的博客发布了JPA和UUID主键,这让我有了一些方法.请注意如何通过以二进制形式存储UUID来优化UUID的存储(与字符串表示形式相比).
它解决了部分问题,因为现在我们可以有效地将对象插入到数据库中.
但是,现在当我想使用EntityManager.createQuery从数据库进行查询时,我遇到了一个问题.是否有可能/需要查询二进制数据?或者,我应该将字符串UUID与二进制版本一起存储以方便查询吗?
使用Hibernate 4.1.2和MySQL-Connector-J 5.1.18测试,您可以定义UUID字段:
@Entity
class EntityType {
@Column( columnDefinition = "BINARY(16)", length = 16 )
private UUID id;
}
Run Code Online (Sandbox Code Playgroud)
...并使用UUID实例进行查询:
UUID id = ....;
EntityType result = em.createQuery(
“SELECT x FROM EntityType x WHERE x.id = ?1?, EntityType.class )
.setParameter( 1, id ).getSingleResult();
Run Code Online (Sandbox Code Playgroud)
Ale*_*man -1
10 亿条记录的 16 字节开销约为 15Gb。如果您确实拥有这么多数据,您将需要解决更严重的可扩展性问题,而 10 美分/Gb 或更低的 15Gb 并不是什么大问题。多对多关系可以更快地发展到这种规模,但仍然不用担心。
总而言之,只需使用字符串表示即可。它将以相当小的价格为您节省处理数据库的大量精力。
PS 我个人偏好是使用数字 ID,但这是单独讨论的。
归档时间: |
|
查看次数: |
7060 次 |
最近记录: |