Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL NDB集群&x2B;冬眠_Mysql_Hibernate_Cluster Computing - Fatal编程技术网

MySQL NDB集群&x2B;冬眠

MySQL NDB集群&x2B;冬眠,mysql,hibernate,cluster-computing,Mysql,Hibernate,Cluster Computing,有人知道您是否可以将mySQL集群与Hibernate结合使用吗?首先,问题的一个重要部分是JDBC驱动程序支持,而且您似乎可以将JDBC(连接器/J)与mySQL集群结合使用(请参阅),因此可以想象在Hibernate的配置中声明这样一个JDBC URL 然后,我对的理解是,数据节点被视为一个整体(从文档中可以看出,如果一个应用程序更新了一名员工的工资,那么查询此数据的所有其他MySQL服务器都可以立即看到此更改),因此Hibernate应该对此感到满意 但是,如果希望Hibernate使用N

有人知道您是否可以将mySQL集群与Hibernate结合使用吗?

首先,问题的一个重要部分是JDBC驱动程序支持,而且您似乎可以将JDBC(连接器/J)与mySQL集群结合使用(请参阅),因此可以想象在Hibernate的配置中声明这样一个JDBC URL

然后,我对的理解是,数据节点被视为一个整体(从文档中可以看出,如果一个应用程序更新了一名员工的工资,那么查询此数据的所有其他MySQL服务器都可以立即看到此更改),因此Hibernate应该对此感到满意

但是,如果希望Hibernate使用NDB引擎创建表,则需要一种特殊的方言(请参阅)。不过没什么复杂的


所以在理论上,一切似乎都很好。实际上,我对这种设置没有任何经验。

扩展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;
    }
}