MySQL NDB集群&x2B;冬眠
有人知道您是否可以将mySQL集群与Hibernate结合使用吗?首先,问题的一个重要部分是JDBC驱动程序支持,而且您似乎可以将JDBC(连接器/J)与mySQL集群结合使用(请参阅),因此可以想象在Hibernate的配置中声明这样一个JDBC URL 然后,我对的理解是,数据节点被视为一个整体(从文档中可以看出,如果一个应用程序更新了一名员工的工资,那么查询此数据的所有其他MySQL服务器都可以立即看到此更改),因此Hibernate应该对此感到满意 但是,如果希望Hibernate使用NDB引擎创建表,则需要一种特殊的方言(请参阅)。不过没什么复杂的MySQL NDB集群&x2B;冬眠,mysql,hibernate,cluster-computing,Mysql,Hibernate,Cluster Computing,有人知道您是否可以将mySQL集群与Hibernate结合使用吗?首先,问题的一个重要部分是JDBC驱动程序支持,而且您似乎可以将JDBC(连接器/J)与mySQL集群结合使用(请参阅),因此可以想象在Hibernate的配置中声明这样一个JDBC URL 然后,我对的理解是,数据节点被视为一个整体(从文档中可以看出,如果一个应用程序更新了一名员工的工资,那么查询此数据的所有其他MySQL服务器都可以立即看到此更改),因此Hibernate应该对此感到满意 但是,如果希望Hibernate使用N
所以在理论上,一切似乎都很好。实际上,我对这种设置没有任何经验。扩展MySQL5方言。这是一个例子:
public class CustomMySQL5Dialect extends MySQL5Dialect {
public String getTableTypeString() {
return " engine=ndb";
}
}
由于MySQL数据库/驱动程序方面的限制,Hibernate的某些特性绝对不能用于MySQL NDB集群。我脑子里想不出的一点是,Hibernate使用临时表来实现对多表结构(辅助表、联接子类等)的批量更新/删除。但是MySQL NDB不支持临时表。查看MySQL NDB限制页面,了解更具体的NDB限制,以及它们是否会影响您:我们将MySQL NDB与Hibernate一起使用,它在Hibernate中不起任何作用,并且我们没有观察到一致性问题。然而,与InnoDB相比,NDB的表现确实有所不同,尤其是在大数据集的情况下。索引必须适合内存,对于长时间运行的事务,这是非常明智的,并且可以锁定的行数是有限的(可以调整这些行,但仍然是无害的“从T中删除”,其中x为了帮助下一位读者,我们在高性能应用程序中使用了NDBCluster和Hibernate(支持数千个并发用户)已经4年多了。请注意,在版本7.3.1之前,MySQL NDB不支持外键约束()。因此我们必须编写一个小实用程序来自动注入必要的触发器(请参阅) NDB早于7.3.1,您可以使用以下内容:
public class MySQL5NDBDialect extends MySQLDialect
{
private static final String ENGINE_NDB = " ENGINE=NDB"; //$NON-NLS-1$
@Override
public boolean supportsCascadeDelete()
{
return false;
}
@Override
public boolean dropConstraints()
{
return false;
}
@Override
public String getTableTypeString()
{
return ENGINE_NDB;
}
@Override
public String getAddForeignKeyConstraintString(final String constraintName, final String[] foreignKey,
final String referencedTable, final String[] primaryKey, final boolean referencesPrimaryKey)
{
// our magic to inject triggers
}
}
NDB 7.3.1及以上版本将更简单:
public class MySQLNDB7Dialect extends MySQLDialect
{
private static final String ENGINE_NDB = " ENGINE=NDB"; //$NON-NLS-1$
@Override
public boolean supportsCascadeDelete()
{
return true;
}
@Override
public boolean dropConstraints()
{
return true;
}
@Override
public String getTableTypeString()
{
return ENGINE_NDB;
}
}