分层对象结构的唯一持久性

时间:2011-12-19 15:07:28

标签: hibernate nhibernate

我有一个算法可以从可行模型的空间中对模型进行采样。一个模型基本上是一个公式,所以一些分层对象结构。如果数据库尚未保留,我想将每个模型保留在数据库中。在查询数据库时,我有什么选择快速找到模型?我知道我可以使用Criteria和一个示例模型来确定模型是否已经存在于数据库中。有更快的方法吗?这是我对模型结构的第一次尝试:

public class Network
{
    public virtual double Bias { get; set; }
    public virtual IList<RBF> RBFs { get; set; }
}

public class RBF
{
    public virtual double Weight { get; set; }
    public virtual ISet<Gaussian> Gaussians { get; set; }
}

public class Gaussian
{
    public virtual int FeatureIndex { get; set; }
    public virtual double Mean { get; set; }
    public virtual double StandardDeviation { get; set; }
}

1 个答案:

答案 0 :(得分:2)

对于这种复杂的相等规则,最快的方法是使用算法将对象图转换为字符串或字节数组,使用加密哈希函数(例如SHA1)对此字符串或字节数组进行哈希处理,以及将哈希与树的根一起存储。

当您必须检查某个给定树是否已经退出数据库时,请在树上重新应用该算法,并检查所获得的哈希是否已存在于数据库中。

困难如下:

  • 两个逻辑上相等的树必须始终生成相同的字节数组。这意味着您必须决定RBF和高斯实体的订单,并始终按相同顺序序列化
  • 比较双打通常不是一件容易的事。您可能需要对它们进行舍入以确保两个非常接近的值被认为是相等的
  • 每次对组成树的任何实体进行修改时,都必须重新计算哈希值。这意味着所有更改都应该封装在一个地方,并始终通过树的根目录。